java使用itext填充pdf模板,超简单教学,有手就行

1、先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线

在这里插入图片描述

2、将Word另存为pdf

在这里插入图片描述

3、打开电脑中的Adobe Acrobat pro DC(这个应该win10 都有,搜索一下就出来了),点击 文件→创建→创建表单

在这里插入图片描述

4、然后导入刚刚生成的pdf

在这里插入图片描述

会出来这个页面

在这里插入图片描述

双击这个阴影部分,将名称改成你要设置的名称,后面要根据这个名称来给他赋值

在这里插入图片描述

全部设置好以后就可以另存为了

在这里插入图片描述
在这里插入图片描述

5、前期的pdf模板准备好了,就开始上代码!

1、首先导入我们所需要的依赖

<dependency>
           <groupId>com.itextpdf</groupId>
           <artifactId>itextpdf</artifactId>
           <version>5.5.13</version>
       </dependency>

2、上代码

package com.icaremgt.admin.test;

import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import org.junit.Test;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class TestPdf {
    @Test
    public void testPdf() {
        // 模板文件路径
        String inputFileName = "F:\\pdfWork\\1\\mytests.pdf";
        // 生成的文件路径
        String outputFileName = "F:\\pdfWork\\2\\test9.pdf";

        OutputStream os = null;
        PdfStamper ps = null;
        PdfReader reader = null;
        PdfStamper stamper = null;

        try {
            os = new FileOutputStream(new File(outputFileName));
            // 2 读入pdf表单
            reader = new PdfReader(inputFileName);
            // 3 根据表单生成一个新的pdf
            ps = new PdfStamper(reader, os);
            // 4 获取pdf表单
            AcroFields form = ps.getAcroFields();
            // 5给表单添加中文字体
            BaseFont bf = BaseFont.createFont("Font/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            form.addSubstitutionFont(bf);
            // 6查询数据================================================
            Map<String, Object> data = new HashMap<String, Object>();
            data.put("childrenName", "李四");
            data.put("gender", "男");
            data.put("year", "2021");
            data.put("month", "09");
            data.put("day", "23");
            data.put("userName", "张三");
            data.put("address", "河南省案发时发放手动阀是的");
            // 7遍历data 给pdf表单表格赋值
            for (String key : data.keySet()) {
                form.setField(key, data.get(key).toString());
            }
            ps.setFormFlattening(true);
            System.out.println("===============PDF导出成功=============");
        } catch (Exception e) {
            System.out.println("===============PDF导出失败=============");
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                reader.close();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


   
}

3、字体需要放在resources目录下

BaseFont bf = BaseFont.createFont("Font/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

这个SIMYOU.TTF就是字体 (字体下载地址
在这里插入图片描述

6、开始测试

在这里插入图片描述
导出成功!
在这里插入图片描述

7、看看效果

在这里插入图片描述

ok,非常完美!

可以关注我,下一期讲java使用itext将图片放到pdf模板的指定位置

如果觉得这种pdf模板的方式不好,可以参考我的另一篇博文,可以不用设置pdf模板就直接生成pdf

java使用itext直接生成pdf,无需模板

itext5固定段落Paragraph,指定段落位置

itext5固定段落Paragraph,指定段落位置

问题总结:

@gao1123576431 这位老哥提出问题说赋值了,但是最后导出的PDF是没有值得,后来他给出了解决办法,引入itext-asian

<dependency>
     <groupId>com.itextpdf</groupId>
     <artifactId>itext-asian</artifactId>
     <version>5.2.0</version>
 </dependency>
  • 33
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 66
    评论
Java使用ItextPdf填充已有pdf并且分页,可以采用以下步骤: 1.首先使用ItextPdf读取已有的pdf文件,可以使用PdfReader类。 2.使用PdfStamper类创建新的pdf文件,并将原始pdf文件的内容复制到新的pdf文件中。 3.使用PdfContentByte类在新的pdf文件中添加新的内容,可以使用addTemplate方法将模板添加到新的pdf文件中。 4.使用ColumnText类将文本添加到新的pdf文件中,并进分页处理。 下面是一个示例代码: ```java PdfReader reader = new PdfReader("original.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("new.pdf")); PdfContentByte canvas = stamper.getOverContent(1); // 添加模板 PdfImportedPage importedPage = stamper.getImportedPage(reader, 1); canvas.addTemplate(importedPage, 0, 0); // 添加新的内容 ColumnText ct = new ColumnText(canvas); ct.setSimpleColumn(36, 36, 559, 806); Paragraph p = new Paragraph("Hello World!"); ct.addElement(p); ct.go(); // 分页处理 int pageNumber = 1; while (ColumnText.hasMoreText(ct)) { stamper.insertPage(++pageNumber, reader.getPageSize(1)); canvas = stamper.getOverContent(pageNumber); canvas.addTemplate(importedPage, 0, 0); ct.setCanvas(canvas); ct.setSimpleColumn(36, 36, 559, 806); ct.go(); } stamper.close(); reader.close(); ``` 在上面的示例中,我们首先使用PdfReader类读取原始的pdf文件,然后使用PdfStamper类创建新的pdf文件,并将原始pdf文件的第一页内容复制到新的pdf文件中。 接着,我们使用ColumnText类将新的文本添加到新的pdf文件中,并进分页处理。在while循环中,我们使用insertPage方法添加新的页面,并将原始pdf文件的第一页内容复制到新的页面中。然后,我们使用setCanvas方法将ColumnText绑定到新的页面上,并调用go方法将文本添加到新的页面中。 最后,我们使用PdfStamper类关闭新的pdf文件,并使用PdfReader类关闭原始pdf文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值