Java使用lowagie根据模版动态生成PDF(无需额外设置系统字体)
今天客户给了一个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(无需额外设置系统字体)相关推荐
- java根据pdf模版动态生成pdf
java根据pdf模版动态生成pdf packagecom.utils;importjava.io.ByteArrayOutputStream;importjava.io.File;importjav ...
- 基于itext5动态生成pdf带分页,自定义字体
话不多说直接撸代码: 最终效果图: 在这里插入代码片<dependency><groupId>com.itextpdf</groupId><artifactI ...
- java动态生成pdf文件的方法
java动态生成pdf文件 文章目录 java动态生成pdf文件 前言 一.生成pdf模板 二.使用步骤 1.使用jar包 2.pdf实现方法 总结 前言 java开发过程中难免会遇到生成文件的需求, ...
- java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件
简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...
- Java读取pdf模板,并动态生成pdf文件,如动态生成准考证
Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...
- java pdf 中文_java-pdf-itext 生成pdf 文档(支持中文字体)
java-pdf-itext 生成pdf 文档(支持中文字体) itext 版本:2.1.7 package com.demo.preview; import java.io.ByteArrayOut ...
- Java使用Itext5与html模板生成pdf并支持下载
Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...
- 如何动态生成pdf文件?
pdfService系统 一. 背景 在许多开发需求中都有动态生成pdf文件的需求,例如根据已有的json字符串渲染到一个表格中,然后生成对应的PDF文档,以往的解决方法是调用许多个接口生产pdf文件 ...
- Java中利用freemarker模板动态生成word含表格
最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...
- word生成pdf保留书签设置
word生成pdf保留书签设置 点击"另存为"选项: 在另存为界面选择保存为pdf,如下,会出现"选项"设置项,点击进入: 在选项中,设置需要的设置,若要将pd ...
最新文章
- 《openssl编程》之openssl简介
- Linux必知必会的基本命令和部署项目流程
- DataUml Design 介绍8-DataUML 1.2版本正式发布
- Java基础---封装继承静态
- 各种系统扫描磁带驱动器的操作方法
- [转载] Python dict.keys方法
- JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)
- java代码pingip_java代码ping一个IP地址
- spring相关记录
- php 随机经纬度,使用php,API自动获取经纬度
- php远程开机ubuntu,ubuntu的远程开机、关机和远程桌面控制
- 程炳皓:我不恨陈一舟 开心网做不好是我自己的问题
- kaldi的安装使用
- 转发:上海软件公司排行 (估计是2008年的吧)
- 生产制造工厂的十二项生产管理步骤
- 嵌入式Linux驱动编程复习资料
- html自动半角转全角,全角半角转换就是这么简单
- 调整数组顺序使奇数位于偶数前面——《剑指offer》
- 服务器读取磁盘文件,服务器硬盘狂读写
- hp probook 4411s电脑在用光盘安装时没有镜像问题