今天客户给了一个docx文档模板,让页面填写以后下载成pdf格式的文件,之前的项目里面用过wkhtmltopdf 动态生成pdf,但是如果使用这个方式需要先把word文件转化成html,把数据填充到html以后,再转成pdf,这样转起来太复杂了。
今天无意中发现使用lowagie 可以直接编辑pdf,而且也不需要像itextpdf那样额外引入系统字体。

话不多说,开始操作:

第一步 设置pdf模板

wps 将word 转成pdf,使用Adobe Acrobat DC编辑pdf。
Adobe Acrobat DC下载:

地址:https://pan.baidu.com/s/1NoPc0sNfk3hojJphUoPhyQ?pwd=cir7
密码:cir7

下载解压后执行这个文件:

为PDF准备表单


表单准备完毕以后,如下图:

双击一个区域,自定义key:

设置两个字段试试:

保存一下,生成一个新的带表单的pdf。

使用maven的项目

导入依赖

        <dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency><dependency><groupId>cn.lesper</groupId><artifactId>iTextAsian</artifactId><version>3.0</version></dependency><dependency><groupId>com.lowagie</groupId><artifactId>itext-rtf</artifactId><version>2.1.7</version></dependency>

java代码创建PdfUtils类

package pdf.kit.util;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;import com.lowagie.text.pdf.AcroFields;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
/*** @ClassName PdfUtils * @Description TODO* @Author lgn* @Date 16:43 2022/8/22* @Version 1.0**/
public class PdfUtils {public static void main(String[] args) throws Exception {export();System.out.println("生成完成");}public static void export(){try {// pdf模板所在路径,就是网站制作好后下载的pdf模板路径String fileName = "C:\\Users\\lgn\\Desktop\\JS-PAS-2208-001222.pdf";PdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();PdfStamper ps = new PdfStamper(reader, bos);// 使用中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);fillData(fields, data());//必须要调用这个,否则文档会出现你不想出现的东西ps.setFormFlattening(true);ps.close();//生成pdf路径存放的路径OutputStream fos = new FileOutputStream("C:\\Users\\lgn\\Desktop\\result.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();}catch (Exception e){e.printStackTrace();}}/*** 填充模板中的数据*/public static void fillData(AcroFields fields, Map<String, String> data) {try {for (String key : data.keySet()) {String value = data.get(key);// 为字段赋值,注意字段名称是区分大小写的fields.setField(key, value);}} catch (Exception e) {e.printStackTrace();}}/*** 填充数据源* 其中data存放的key值与pdf模板中的文本域值相对应*/public static Map<String, String> data() {Map<String, String> data = new HashMap<String, String>();data.put("executor", "钢铁侠");data.put("reviewed", "小辣椒");return data;}
}

验证一下:

Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)相关推荐

  1. java根据pdf模版动态生成pdf

    java根据pdf模版动态生成pdf packagecom.utils;importjava.io.ByteArrayOutputStream;importjava.io.File;importjav ...

  2. 基于itext5动态生成pdf带分页,自定义字体

    话不多说直接撸代码: 最终效果图: 在这里插入代码片<dependency><groupId>com.itextpdf</groupId><artifactI ...

  3. java动态生成pdf文件的方法

    java动态生成pdf文件 文章目录 java动态生成pdf文件 前言 一.生成pdf模板 二.使用步骤 1.使用jar包 2.pdf实现方法 总结 前言 java开发过程中难免会遇到生成文件的需求, ...

  4. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件

    简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...

  5. Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

    Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 ​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...

  6. java pdf 中文_java-pdf-itext 生成pdf 文档(支持中文字体)

    java-pdf-itext 生成pdf 文档(支持中文字体) itext 版本:2.1.7 package com.demo.preview; import java.io.ByteArrayOut ...

  7. Java使用Itext5与html模板生成pdf并支持下载

    Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...

  8. 如何动态生成pdf文件?

    pdfService系统 一. 背景 在许多开发需求中都有动态生成pdf文件的需求,例如根据已有的json字符串渲染到一个表格中,然后生成对应的PDF文档,以往的解决方法是调用许多个接口生产pdf文件 ...

  9. Java中利用freemarker模板动态生成word含表格

    最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...

  10. word生成pdf保留书签设置

    word生成pdf保留书签设置 点击"另存为"选项: 在另存为界面选择保存为pdf,如下,会出现"选项"设置项,点击进入: 在选项中,设置需要的设置,若要将pd ...

最新文章

  1. 《openssl编程》之openssl简介
  2. Linux必知必会的基本命令和部署项目流程
  3. DataUml Design 介绍8-DataUML 1.2版本正式发布
  4. Java基础---封装继承静态
  5. 各种系统扫描磁带驱动器的操作方法
  6. [转载] Python dict.keys方法
  7. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)
  8. java代码pingip_java代码ping一个IP地址
  9. spring相关记录
  10. php 随机经纬度,使用php,API自动获取经纬度
  11. php远程开机ubuntu,ubuntu的远程开机、关机和远程桌面控制
  12. 程炳皓:我不恨陈一舟 开心网做不好是我自己的问题
  13. kaldi的安装使用
  14. 转发:上海软件公司排行 (估计是2008年的吧)
  15. 生产制造工厂的十二项生产管理步骤
  16. 嵌入式Linux驱动编程复习资料
  17. html自动半角转全角,全角半角转换就是这么简单
  18. 调整数组顺序使奇数位于偶数前面——《剑指offer》
  19. 服务器读取磁盘文件,服务器硬盘狂读写
  20. hp probook 4411s电脑在用光盘安装时没有镜像问题

热门文章

  1. MCSkin3D我的世界皮肤制作器 中文补丁
  2. 实对称矩阵的特征值求法_【8】实(反)对称矩阵的特征值
  3. 不理解 Java Steam?一步步梳理其工作方式
  4. 东南卫视肌肤食品微商套路解析
  5. Latex编辑线性规划、最优化模型
  6. 自定义获取ip和地址的接口
  7. 服务器应用层次划分,服务器按应用层次划分的话可以分为哪几种?
  8. QQ音乐文件缓存位置以及修改方法步骤
  9. Jfree 数据可视化
  10. 微信 html5商城,微信公众号H5商城源码