java根据pdf模板生成指定格式的pdf文件
一、工具准备
事先得准备好Adobe Acrobat DC,这是一款专门编辑pdf的工具,小编已经给大家准备好了。
链接:https://pan.baidu.com/s/1jsaCMnRaHTHBVEmwJw6yjA
提取码:ichi
二、接下家就是教大家怎么设计文档模板
1.首先用word(或者wps)设计出一个word类型的模板,通过word可以设计文件内容的格式。
2.将设计好的word文件另存为pdf文件
3.用Adobe Acrobat DC打开刚刚存储的pdf文件,然后点击左侧准备表单的选项。
4.然后点击开始
5.然后pdf就会变成下面的样子。
6.做完上面的工作pdf模板就算大功告成了,直接将pdf文件保存就好了。
java代码的编写
- 首先项目结构设计如下
- 包依赖关系如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kejizhentan</groupId>
<artifactId>itext_acrobat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
</project>
- java代码设计如下
package com.kejizhentan;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class PdfPractise {
// 利用模板生成pdf
public static void fillTemplate() {
// 模板路径
String templatePath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/pdf模板.pdf";
// 生成的新文件路径
String newPDFPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/pdf练习.pdf";
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
out = new FileOutputStream(newPDFPath);// 输出流,该类用来创建一个文件并向文件中写数据(从内存中写到硬盘文件中)
reader = new PdfReader(templatePath);// 读取pdf模板,将硬盘中的数据'读'到内存中
bos = new ByteArrayOutputStream();// 捕获内存缓冲区的数据,转换成字节数组
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
String[] str = { "123456789", "柯基", "男", "1994-09-08", "110101199409085715","计算机科学与技术", "北京市西城区安河桥北" };
int i = 0;
java.util.Iterator<String> it = form.getFields().keySet().iterator();
while (it.hasNext()) {
String name = it.next().toString();
System.out.println(name+":"+str[i]);
form.setField(name, str[i++]);
}
stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
stamper.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
System.out.println(e.toString());
} catch (DocumentException e) {
System.out.println(2);
}
}
public static void main(String[] args) {
fillTemplate();
}
}
运行上述代码就能获取对应格式的pdf文件。*
####################################################################################################################################################################################################################################################################################################
接下来小编教大家怎么给pdf模板加上水印
- 第一步准备水印图片
- 第二步对照下组图一步步操作就可以了
根据以上步骤,带有水印的pdf文件就制作好了。接下来就是代码部分了。 - 包的依赖关系
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kejizhentan</groupId>
<artifactId>itext_acrobat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
</project>
- java代码设计
package com.kejizhentan;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class PdfPractise2 {
public static void templetTicket(){
//模板的路径
String templatePdfPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/卖身契模板.pdf";
// 生成的新文件路径
String newPDFPath = "E:/java17/java_practise/itext_acrobat/src/main/resources/temp/卖身契.pdf";
FileOutputStream fos;
PdfReader reader;
ByteArrayOutputStream bos;
PdfStamper ps ;
try {
fos = new FileOutputStream(newPDFPath);
reader = new PdfReader(templatePdfPath); //将硬盘中的文件数据读取到内存中
bos = new ByteArrayOutputStream();
ps = new PdfStamper(reader, bos); //将内存中的数据暂存到字节数组中
AcroFields form = ps.getAcroFields();//获取模板文件中的表单域
String[] str = {"柯基小四","柯基侦探","柯基小四","柯基侦探","柯基小四","柯基侦探","2020-11-28","北京市昌平区十三陵镇"};
int i = 0;
java.util.Iterator<String> it = form.getFields().keySet().iterator();//用迭代器遍历pdf中的所有域
while (it.hasNext()) {
String name = it.next().toString();
System.out.println(name+":"+str[i]);
form.setField(name, str[i++]);
}
ps.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
System.out.println(e.toString());
} catch (DocumentException e) {
System.out.println(2);
}
}
public static void main(String[] args){
templetTicket();
}
}
执行上述代码就能生成带有水印的pdf文件了。