JAVA使用itext根据模板生成PDF文档
1、制作PDF模板
网址打开:https://www.pdfescape.com/open/
我们这里先在线上把基础的内容用word文档做好,然后转成PDF模板,直接上传到网站上,这样方便点
假设我们pdf是这样
然后我们选择文件上传到网站上之后,如下图所示
选择文件后,点击upload ,或者可以把文件直接用鼠标拖到Drop PDF Here的位置,也会直接上传,上传成功之后会跳转页面,所下图所示
接着我们可以进行操作,点击左上角 Form Field,这个是插入字段(你可以理解成是java中文档要用的占位符)
选择对应的text,如有需要,可以选择其他的模式,好了之后,点击Select
选择之后用按住鼠标左键,划定要显示的区域(绿色区域)
然后把鼠标放到绿色区域,点击鼠标右键,点击Object Properties设置属性名称
userName 就是我们到时候在代码中要替换的属性名,好了之后点击OK,然后依次设置其他的内容
还可以选中某个表单域,可以对字体、大小等进行设置(线上版本不支持编辑字体样式、具体可以查看 https://www.pdfescape.com/windows/ 需要下载软件)
然后点击鼠标左侧的保存按钮,或者直接按ctrl+s 也可以直接保存,保存之后点击下方的下载按钮,把我们设置的pdf文档下载下来
以上模板就制作好了。 网站还有很多其他的功能,需要的可以自己去研究使用。
接着是代码书写
1、引入jar包 iText-2.1.7.jar、itextasian-2.1.7.jar、itext-rtf-2.1.7.jar
下载地址:https://yvioo.lanzous.com/b00nq830b
密码:g912
2、这里只是一个简单的demo方法,可以根据自己需要改写
package com.pdf; 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; public class Test {
public static void main(String[] args) throws Exception {
export();
System.out.println("生成完成");
} public static void export(){
try {
// pdf模板所在路径,就是网站制作好后下载的pdf模板路径
String fileName = "D:/testpdf.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("D:/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("schoolName", "国际测试测试测试测试");
data.put("userName", "yvioo");
data.put("date", "2020/7");
return data;
}
}
JAVA使用itext根据模板生成PDF文档的更多相关文章
- iText框架(生成pdf文档)
1.创建一个itext的简单示例 a.导包(pom.xml文件) <dependencies> <dependency> <groupId>com.lowagie& ...
- 【Java】itext根据模板生成pdf(包括图片和表格)
1.导入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar. 2.新建word文档,创建模板,将文件另存为pdf,并用Adobe Acrobat DC打 ...
- 关于根据模板生成pdf文档,差入图片和加密
import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.OSSClient; import com.itextpdf.text.pd ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- 【PDF】java使用Itext生成pdf文档--详解
[API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...
- 手把手教你使用 Java 在线生成 pdf 文档
一.介绍 在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,例如网银/支付宝/微信购物支付的电子发票.订单的库存打印单.各种电子签署合同等等,以方便用户查 ...
- 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
置顶2017年11月06日 14:41:04 阅读数:2311 这几天,任务中有一个难点是把一个打印页面自动给生成PDF文档,并且上传至服务器,然而公司框架只有手动上传文档,打印时可以保存为PDF在本 ...
- Spring Boot集成JasperReports生成PDF文档
由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲染生成PDF文档.本人文采欠缺,写作能力 ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
随机推荐
- Codeforces 407E - k-d-sequence(单调栈+扫描线+线段树)
Codeforces 题面传送门 & 洛谷题面传送门 深感自己线段树学得不扎实-- 首先特判掉 \(d=0\) 的情况,显然这种情况下满足条件的区间 \([l,r]\) 中的数必须相同,双针扫 ...
- hdu 5552 Bus Routes
hdu 5552 Bus Routes 考虑有环的图不方便,可以考虑无环连通图的数量,然后用连通图的数量减去就好了. 无环连通图的个数就是树的个数,又 prufer 序我们知道是 $ n^{n-2} ...
- socket编程:多路复用I/O服务端客户端之select
其实在之前的TCP之中,我们编程实现了多进程,多线程机制下的TCP服务器,但是对于这种的TCP服务器而言,存在太大的资源局限性.所以我们可以是用I/0模型中的多路复用I/O模型来进行编程. 他的具体思 ...
- idea数据库报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
通过idea操作数据库,进行数据的增加,运行时报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 原因:没有导入mysql-connec ...
- 理解ASP.NET Core - 模型绑定&验证(Model Binding and Validation)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 模型绑定 什么是模型绑定?简单说就是将HTTP请求参数绑定到程序方法入参上,该变量可以是简单类 ...
- [项目总结]Android 手动显示和隐藏软键盘
1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) 1 InputMethodManager imm = (InputMethodManager) getSystemService(Cont ...
- 【AWS】【TroubleShooting】EC2实例无法使用SSH远程登陆(EC2 failure for SSH connection)
1. Login AWS web console and check the EC2 instance.
- rust常用技巧
允许未使用的方法,写在文件开头,可过滤过掉该项提示 #![allow(unused)]
- SpringMVC原理分析
Spring MVC主要包括以下要点: 1:由DispatcherServlet控制的整个流程: 2:注解驱动的控制器,其中包括请求映射.数据的绑定和格式化: 3:文件上传: 4:一些杂项,如静态资源 ...
- 理解JMX之介绍和简单使用
JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览.下图是使用Jconsle通过JMX查看Java程序的运 ...