使用iText生成PDF文件中创建表格

前言

        使用iText的JAR包如下

<dependency>
	<groupId>com.itextpdf</groupId>
	<artifactId>itextpdf</artifactId>
	<version>5.5.13.1</version>
</dependency>
<!-- 输出中文所需-->
<dependency>
	<groupId>com.itextpdf</groupId>
	<artifactId>itext-asian</artifactId>
	<version>5.2.0</version>
</dependency>

实现代码

public static void main(String[] args) {
        String[] headers = {"列一", "列二", "列三", "列四", "列五", "列六"};
        String list = "[{\"balance\":\"42402\",\"changeDate\":\"20211026111641\",\"dgst\":\"SSTR\",\"outMoney\":\"0\",\"bankSeqNo\":\"00000000000641199893\",\"inMoney\":\"11539\"},{\"balance\":\"30863\",\"changeDate\":\"20211005133736\",\"dgst\":\"SALE\",\"outMoney\":\"7500\",\"bankSeqNo\":\"00000000000635138192\",\"inMoney\":\"0\"},{\"balance\":\"38363\",\"changeDate\":\"20210926113940\",\"dgst\":\"SSTR\",\"outMoney\":\"0\",\"bankSeqNo\":\"00000000000632420138\",\"inMoney\":\"11539\"},{\"balance\":\"26824\",\"changeDate\":\"20210925111144\",\"dgst\":\"SALE\",\"outMoney\":\"11150\",\"bankSeqNo\":\"00000000000632752221\",\"inMoney\":\"0\"},{\"balance\":\"37974\",\"changeDate\":\"20210922083109\",\"dgst\":\"SALE\",\"outMoney\":\"4860\",\"bankSeqNo\":\"00000000000631851353\",\"inMoney\":\"0\"},{\"balance\":\"42834\",\"changeDate\":\"20210919153251\",\"dgst\":\"SALE\",\"outMoney\":\"7910\",\"bankSeqNo\":\"00000000000631503750\",\"inMoney\":\"0\"},{\"balance\":\"50744\",\"changeDate\":\"20210917080014\",\"dgst\":\"SALE\",\"outMoney\":\"5870\",\"bankSeqNo\":\"00000000000630377865\",\"inMoney\":\"0\"},{\"balance\":\"56614\",\"changeDate\":\"20210915153430\",\"dgst\":\"SALE\",\"outMoney\":\"8560\",\"bankSeqNo\":\"00000000000630120441\",\"inMoney\":\"0\"},{\"balance\":\"65174\",\"changeDate\":\"20210830103432\",\"dgst\":\"SALE\",\"outMoney\":\"6200\",\"bankSeqNo\":\"00000000000625635279\",\"inMoney\":\"0\"},{\"balance\":\"71374\",\"changeDate\":\"20210825124135\",\"dgst\":\"SSTR\",\"outMoney\":\"0\",\"bankSeqNo\":\"00000000000624479550\",\"inMoney\":\"11539\"}]";
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BASE64Encoder base64 = new BASE64Encoder();
        Document document = null;
        PdfWriter writer = null;
        try {
            List<Map<String, Object>> mapList = (List) JSON.parseArray(StringEscapeUtils.unescapeHtml4(list));
            //创建纵向文件
            document = PdfUtils.createPortraitDocument();
            //建立一个书写器(内存流方式)
            writer = PdfWriter.getInstance(document, byteArrayOutputStream);
            //打开文件
            document.open();
            //添加字体样式
            Font bigFont = PdfUtils.createFont(14, Font.NORMAL, BaseColor.BLACK);
            Font blueFont = PdfUtils.createFont(10, Font.NORMAL, BaseColor.BLACK);
            //段落内容
            Paragraph title = PdfUtils.createParagraph("测试pdf", bigFont);
            //文字居中显示
            title.setAlignment(Element.ALIGN_CENTER);
            //添加段落内容
            document.add(title);
            //创建表格列数
            PdfPTable table = PdfUtils.createPdfPTable(headers.length);
            //创建表头
            PdfUtils.createHeader(document, table, headers, bigFont);
            //填充数据
            PdfUtils.dataProcessing(document, table, mapList, blueFont);
        } catch (DocumentException e) {

        } finally {
            if (document != null) {
                //关闭文档
                document.close();
            }
            if (writer != null) {
                //关闭书写器
                writer.close();
            }
        }
        System.out.println(base64.encode(byteArrayOutputStream.toByteArray()));
    }

 实现效果

 工具类

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @version V1.0
 * @Description:生成PDF文件
 * @Author: Mr.LJie
 * @Date: 2021/11/30 14:17
 */
public class PdfUtils {
    /**
     * 固定高
     */
    public static float fixedHeight = 27f;
    /**
     * 跨行
     */
    public static int rowSpan = 0;
    /**
     * 跨列
     */
    public static int colSpan = 0;
    /**
     * 左边距
     */
    public static float marginLeft = 20;
    /**
     * 右边距
     */
    public static float marginRight = 20;
    /**
     * 上边距
     */
    public static float marginTop = 20;
    /**
     * 下边距
     */
    public static float marginBottom = 20;

    /***
     * @Description :创建A4纵向文件
     * @param
     * @return com.itextpdf.text.Document
     * @Author Mr.Jie
     * @Date 2021/11/30 14:25
     */
    public static Document createPortraitDocument() {
        //生成pdf
        Document document = new Document();
        // 页面大小
        Rectangle rectangle = new Rectangle(PageSize.A4);
        // 页面背景颜色
        rectangle.setBackgroundColor(BaseColor.WHITE);
        document.setPageSize(rectangle);
        // 页边距 左,右,上,下
        document.setMargins(marginLeft, marginRight, marginTop, marginBottom);
        return document;
    }

    /***
     * @Description :创建A4横向文件
     * @param
     * @return com.itextpdf.text.Document
     * @Author Mr.Jie
     * @Date 2021/11/30 15:42
     */
    public static Document createTransverseDocument() {
        //生成pdf
        Document document = new Document();
        // 页面大小
        Rectangle rectangle = new Rectangle(new RectangleReadOnly(842F, 595F));
        // 页面背景颜色
        rectangle.setBackgroundColor(BaseColor.WHITE);
        document.setPageSize(rectangle);
        // 页边距 左,右,上,下
        document.setMargins(marginLeft, marginRight, marginTop, marginBottom);

        return document;
    }

    /**
     * @param text 段落内容
     * @param font 字体设置
     * @return com.itextpdf.text.Paragraph
     * @Description :创建段落内容
     * @Author Mr.Jie
     * @Date 2021/11/30 14:59
     */
    public static Paragraph createParagraph(String text, Font font) {
        Paragraph elements = new Paragraph(text, font);
        elements.setSpacingBefore(5);
        elements.setSpacingAfter(5);
        return elements;
    }


    /***
     * @Description :创建字体样式
     * @param fontNumber    字号
     * @param fontSize      字体大小
     * @param fontColor     字体颜色
     * @return com.itextpdf.text.Font
     * @Author Mr.Jie
     * @Date 2021/11/30 14:57
     */
    public static Font createFont(int fontNumber, int fontSize, BaseColor fontColor) {
        //中文字体 ----不然中文会乱码
        BaseFont bf = null;
        try {
            bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            return new Font(bf, fontNumber, fontSize, fontColor);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Font(bf, Font.DEFAULTSIZE, Font.NORMAL, BaseColor.BLACK);
    }

    /***
     * @Description :隐藏表格边框线
     * @param cell  单元格
     * @return void
     * @Author Mr.Jie
     * @Date 2021/11/30 14:57
     */
    public static void disableBorderSide(PdfPCell cell) {
        if (cell != null) {
            cell.disableBorderSide(1);
            cell.disableBorderSide(2);
            cell.disableBorderSide(4);
            cell.disableBorderSide(8);
        }
    }


    /***
     * @Description :创建居中得单元格
     * @param
     * @return com.itextpdf.text.pdf.PdfPCell
     * @Author Mr.Jie
     * @Date 2021/11/30 14:57
     */
    public static PdfPCell createCenterPdfPCell() {
        PdfPCell cell = new PdfPCell();
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setFixedHeight(fixedHeight);
        return cell;
    }

    /***
     * @Description :创建指定文字得单元格
     * @param text      文字内容
     * @param rowSpan   跨行合并单元格
     * @param colSpan   跨列合并单元格
     * @param font      字体
     * @return com.itextpdf.text.pdf.PdfPCell
     * @Author Mr.Jie
     * @Date 2021/11/30 14:50
     */
    public static PdfPCell createCenterPdfPCell(String text, int rowSpan, int colSpan, Font font) {
        PdfPCell cell = new PdfPCell(new Paragraph(text, font));
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        cell.setFixedHeight(fixedHeight);
        cell.setRowspan(rowSpan);
        cell.setColspan(colSpan);
        return cell;
    }

    /***
     * @Description :表格列数
     * @param len
     * @return com.itextpdf.text.pdf.PdfPTable
     * @Author Mr.Jie
     * @Date 2021/11/30 14:52
     */
    public static PdfPTable createPdfPTable(int len) {
        PdfPTable pdfPTable = new PdfPTable(len);
        //宽度100%填充
        pdfPTable.setWidthPercentage(100);
        return pdfPTable;
    }

    /***
     * @Description :创建表头
     * @param document
     * @param headers
     * @param font
     * @return void
     * @Author Mr.Jie
     * @Date 2021/11/30 15:27
     */
    public static void createHeader(Document document, PdfPTable table, String[] headers, Font font) throws DocumentException {
        for (int i = 0; i < headers.length; i++) {
            //默认不跨行、跨列
            PdfPCell cell = PdfUtils.createCenterPdfPCell(headers[i], rowSpan, rowSpan, font);
            //居中显示
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            table.addCell(cell);
        }
        document.add(table);
    }

    /***
     * @Description :数据处理
     * @param document
     * @param table
     * @param list
     * @param font
     * @return void
     * @Author Mr.Jie
     * @Date 2021/11/30 15:32
     */
    public static void dataProcessing(Document document, PdfPTable table, List<Map<String, Object>> list, Font font) throws DocumentException {
        Iterator<Map<String, Object>> iterator = list.iterator();
        while (iterator.hasNext()) {
            //获取对象
            Map<String, Object> map = iterator.next();
            //Map 获取key & value
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                Object value = entry.getValue();
                //默认不跨行、跨列
                PdfPCell cell = PdfUtils.createCenterPdfPCell(value.toString(), rowSpan, rowSpan, font);
                table.addCell(cell);
            }
            document.add(table);
        }
    }
}

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
asp.net生成PDF详解 asp.net生成PDF PDF详解 用C#制作PDF文件全攻略 丽水市汽车运输集团有限公司信息心 苟安廷 目 录 前 言 3 第一部分 iText的简单应用 4 第一章 创建一个Document 4 第一步 创建一个Document实例: 5 第二步 创建Writer实例 6 第三步 打开Document 6 第四步 添加内容 10 第五步,关闭 document 11 第二章 块、短句和段落 11 块 11 短句 12 段落 12 字体的延续 13 第三章 锚点、列表和注释 14 锚点 14 列表 14 注释 15 第四章 页眉页脚、章节、区域和绘图对象 16 页眉页脚 16 章节和区域 17 图形 17 第五章 表格 18 一些简单的表格 18 一些表格参数 18 大表格 20 内存管理 20 嵌套表格 21 表格偏移 21 表格的绝对位置 21 第六章 图片 21 Image对象 21 图片的位置 22 缩放和旋转图片 23 原始图片数据 23 System.Drawing.Bitmap 23 TIFF和CCITT 24 图片和其他对象 24 第二部分 其他文档格式 25 第七章 XML和 (X)HTML 25 第八章 RTF文件 25 RTF包 25 创建一个RTF文档 25 不支持的特性 26 RTF扩展的页眉和页脚 26 第三部分 iText的高级应用 27 第九章 字体 27 TrueType字体应用 27 TruType字体集合的应用 28 第十章 图象和文本的绝对位置 28 pdfContentByte 28 简单图形 29 文本 29 模板(Form xObjects) 30 分栏 31 PdfTable 32 颜色(SpotColors)和图案(Patterns) 33 第十一章 本地和异地转向、目标和概要 33 本地转向 33 异地转向 33 第十二章 页面和表格事件 34
iText 是一个开源的 Java PDF 库,可以用来创建、操作和处理 PDF 文件。以下是基于 iText 生成 PDF 文件的简单示例: 1. 添加 iText 依赖 在项目的 pom.xml 文件添加如下依赖: ```xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> ``` 2. 创建 PDF 文件 使用 iText 创建 PDF 文件的步骤如下: ```java // 创建 PDF 文档对象 Document document = new Document(); // 创建 PDF 输出流 PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 打开文档 document.open(); // 添加内容 document.add(new Paragraph("Hello, World!")); // 关闭文档 document.close(); ``` 在上面的代码,首先创建了一个 Document 对象,然后使用 PdfWriter 创建一个 PDF 输出流,将输出流与 Document 对象关联。接下来打开文档,添加内容,最后关闭文档。 3. 添加表格和图片 除了文本,iText 还支持添加表格和图片等元素。以下是添加表格和图片的示例代码: ```java // 创建 PDF 文档对象 Document document = new Document(); // 创建 PDF 输出流 PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 打开文档 document.open(); // 添加表格 PdfPTable table = new PdfPTable(3); table.addCell("Name"); table.addCell("Age"); table.addCell("Gender"); table.addCell("John Doe"); table.addCell("30"); table.addCell("Male"); document.add(table); // 添加图片 Image image = Image.getInstance("image.png"); document.add(image); // 关闭文档 document.close(); ``` 在上面的代码,首先创建了一个 PdfPTable 对象,添加了表头和数据,然后将表格添加到 PDF 文档。接下来添加了一张图片,最后关闭文档。 以上是基于 iText 生成 PDF 文件的简单示例,iText 还支持更丰富的 PDF 操作,如添加书签、水印、表单等功能。详细的示例可以参考 iText 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值