itextPdf生成pdf简单示例

文章环境

jdk1.8,springboot2.6.13

POM依赖

XML 复制代码
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

示例代码

java 复制代码
package com.example.example;

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

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author bao
 * @date 2024/3/25 16:10
 */
public class SimpleGenPdf {
        public static void main(String[] args) throws DocumentException,
                IOException {
        // 定义中文字体
        BaseFont bfChinese = BaseFont.createFont("STSong-Light",
                "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        Font fontCN = new Font(bfChinese, 12, Font.NORMAL);

        // 步骤1:创建一个大小为A4的文档
        Document document = new Document(PageSize.A4);
        try {
            // 步骤 2:
            // 我们为document创建一个监听,并把PDF流写到文件中
            //获取资源文件路径
            String resourcePath = "./src/main/resources/";
            PdfWriter.getInstance(document, new FileOutputStream(resourcePath + "/pdf/simplePdf.pdf"));
            // 步骤 3:打开文档
            document.open();

            // 段落
            Paragraph paragraph = new Paragraph("证明\r\r", new Font(bfChinese, 13, Font.NORMAL));
            //设置文字居中
            paragraph.setAlignment(Element.ALIGN_CENTER);
            //设置左缩进
            paragraph.setIndentationLeft(12);
            //设置右缩进
            paragraph.setIndentationRight(12);
            //设置首行缩进
            paragraph.setFirstLineIndent(24);
            //行间距
            paragraph.setLeading(15f);
            //设置段落上空白
            paragraph.setSpacingBefore(5f);
            //设置段落下空白
            paragraph.setSpacingAfter(5f);
            document.add(paragraph);

            //第一个表格
            document.add(new Paragraph("默认情况下的大小---居中 80%", fontCN));
            // 创建一个有3列的表格
            PdfPTable userTable = new PdfPTable(3);
            // 定义一个表格列头
            PdfPCell tableColumnHead = new PdfPCell(new Paragraph("header with colspan 3"));
            // 定义一个表格单元的跨度
            tableColumnHead.setColspan(3);
            // 把单元加到表格中
            userTable.addCell(tableColumnHead);
            //把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行
            userTable.addCell("1.1");
            userTable.addCell("2.1");
            userTable.addCell("3.1");
            userTable.addCell("1.2");
            userTable.addCell("2.2");
            userTable.addCell("3.2");
            userTable.addCell("1.3");
            userTable.addCell("2.3");
            userTable.addCell("3.3");
            // 增加到文档中
            document.add(userTable);

            //第二个表格
            document.add(new Paragraph("居中 100%", fontCN));
            PdfPTable centerTable = userTable;
            // 设置表格大小为可用空白区域的100%
            centerTable.setWidthPercentage(100);
            // 增加到文档中2
            document.add(centerTable);

            //第三个表格
            document.add(new Paragraph("居右 50%", fontCN));
            PdfPTable rightTable = userTable;
            // 设置表格大小为可用空白区域的50%
            rightTable.setWidthPercentage(50);
            // 设置水平对齐方式为 居右
            rightTable.setHorizontalAlignment(Element.ALIGN_RIGHT);
            // 增加到文档中3
            document.add(rightTable);

            document.add(new Paragraph("居左 50%", fontCN));
            PdfPTable leftTable = userTable;
            // 设置水平对齐方式为 居左
            leftTable.setHorizontalAlignment(Element.ALIGN_LEFT);
            document.add(leftTable);
        } catch (Exception de) {
            de.printStackTrace();
        }
        // 步骤 5:关闭文档
        document.close();
    }
}

生成结果

git完整项目代码

bnmjstu / itextpdf-simple-example · GitCode

相关推荐
LostSpeed1 小时前
在福昕(pdf)阅读器中导航到上次阅读页面的方法
pdf
旭久1 小时前
SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
pdf·html·springboot
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹8 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫9 小时前
泛型(2)
java
超爱吃士力架9 小时前
邀请逻辑
java·linux·后端
南宫生9 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论