Java根据模板生成pdf文件并导出
2018-03-05 20:03
1381 查看
原文地址:/Uploads/Images/Content/201908/16/e6d755c11ecbc1261b877fabe8fba9e9
首先你的制作一个pdf模板:1.先用word做出模板界面
2.文件另存为pdf格式文件
3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。
4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)
5.做完上面的工作后,直接"另存为"将pdf存储就可以
*****************************************************************************以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖
[html] view plain copy<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
[html] view plain copy<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2.下面就是生成pdf代码了[java] view plain copyimport 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 Snippet {
// 利用模板生成pdf
public static void fillTemplate() {
// 模板路径
String templatePath = "E:/测试3.pdf";
// 生成的新文件路径
String newPDFPath = "E:/ceshi.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", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };
int i = 0;
java.util.Iterator<String> it = form.getFields().keySet().iterator();
while (it.hasNext()) {
String name = it.next().toString();
System.out.println(name);
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(1);
} catch (DocumentException e) {
System.out.println(2);
}
}
public static void main(String[] args) {
fillTemplate();
}
}
3.运行结果如下
*********************************************************************如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:[java] view plain copypublic static void test1(){//生成pdf
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));
document.open();
document.add(new Paragraph("hello word"));
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:[java] view plain copypublic static void test1_1(){
BaseFont bf;
Font font = null;
try {
bf = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);//创建字体
font = new Font(bf,12);//使用字体
} catch (Exception e) {
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));
document.open();
document.add(new Paragraph("hello word 你好 世界",font));//引用字体
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
**************************************************************************************当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。 1.把华康少女的字体文件拷贝到这个文件夹里面了:
运行以下代码就能得到pdf文件[java] view plain copypublic static void test1_2(){
BaseFont bf;
Font font = null;
try {
// bf = BaseFont.createFont("font/simsun.ttc,1", //注意这里有一个,1
// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//宋体文字
bf = BaseFont.createFont("font/华康少女文字W5(P).TTC,1", //simsun.ttc
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//华康少女文字
font = new Font(bf,12);
} catch (Exception e) {
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/3.pdf"));
document.open();
document.add(new Paragraph("上善若水",font));
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
当然,如果你还想换其他字体,就去下载字体文件吧,然后把相关部分替换掉就行,上面注释的是宋体的。。。
***********************以下是转载别人的****************************版权声明:欢迎大家转载,转载请声明转载地址http://blog.csdn.net/u012377333,谢谢大家。我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档。第一步:下载AdobeAcrobat DC,必须使用这个来制作from域。第二步:使用AdobeAcrobat DC将Word导成PDF文档。第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便; 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,“工具”-》“编辑PDF”-》”水印”-》”添加”
添加水印的操作:
点击“确定”:
第四步:使用AdobeAcrobat DC添加From域;添加From域方法:使用AdobeAcrobat DC打开文档,“工具”-》“准备表单”
点击“开始”:
点击“保存”:
添加“文本域”到我们想要添加内容的位置:
第五步:使用Java代码导出PDF文档;主要三个类:功能类-PDFTempletTicket[java]view plain copy
/**
*@Title: PDFTempletTicket.java
*@Package: org.csun.ns.util
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日上午11:29:52
*@Version V1.0
*/
package org.csun.ns.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import org.csun.ns.entity.Ticket;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
/**
*@ClassName: PDFTempletTicket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日上午11:29:52
*/
public class PDFTempletTicket {
private String templatePdfPath;
private String ttcPath;
private String targetPdfpath;
private Ticket ticket;
public PDFTempletTicket() {
super();
}
public PDFTempletTicket(String templatePdfPath, String ttcPath,
StringtargetPdfpath, Ticket ticket) {
this.templatePdfPath= templatePdfPath;
this.ttcPath= ttcPath;
this.targetPdfpath= targetPdfpath;
this.ticket= ticket;
}
public void templetTicket(File file) throws Exception {
PdfReaderreader = new PdfReader(templatePdfPath);
ByteArrayOutputStreambos = new ByteArrayOutputStream();
PdfStamperps = new PdfStamper(reader, bos);
/*使用中文字体 */
BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1",
BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
ArrayList<BaseFont> fontList = newArrayList<BaseFont>();
fontList.add(bf);
AcroFieldss = ps.getAcroFields();
s.setSubstitutionFonts(fontList);
s.setField("ticketId",ticket.getTicketId());
s.setField("ticketCreateTime",ticket.getTicketCreateTime());
s.setField("ticketCompany",ticket.getTicketCompany());
s.setField("sysName",ticket.getSysName());
s.setField("moneyLittle",ticket.getMoneyLittle());
s.setField("moneyBig",ticket.getMoneyBig());
s.setField("accountCompany",ticket.getAccountCompany());
s.setField("bedNumber",ticket.getBedNumber());
s.setField("username",ticket.getUsername());
s.setField("password",ticket.getPassword());
ps.setFormFlattening(true);
ps.close();
FileOutputStreamfos = new FileOutputStream(file);
fos.write(bos.toByteArray());
fos.close();
}
/**
* @return the templatePdfPath
*/
public String getTemplatePdfPath() {
return templatePdfPath;
}
/**
* @param templatePdfPath the templatePdfPathto set
*/
public void setTemplatePdfPath(String templatePdfPath) {
this.templatePdfPath= templatePdfPath;
}
/**
* @return the ttcPath
*/
public String getTtcPath() {
returnttcPath;
}
/**
* @param ttcPath the ttcPath to set
*/
public void setTtcPath(String ttcPath) {
this.ttcPath= ttcPath;
}
/**
* @return the targetPdfpath
*/
public String getTargetPdfpath() {
return targetPdfpath;
}
/**
* @param targetPdfpath the targetPdfpath toset
*/
public void setTargetPdfpath(String targetPdfpath) {
this.targetPdfpath= targetPdfpath;
}
/**
* @return the ticket
*/
public Ticket getTicket() {
return ticket;
}
/**
* @param ticket the ticket to set
*/
public void setTicket(Ticket ticket) {
this.ticket= ticket;
}
}
数据类-Ticket[java]view plain copy
/**
*@Title: Ticket.java
*@Package: org.csun.ns.entity
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月26日下午7:43:31
*@Version V1.0
*/
package org.csun.ns.entity;
/**
*@ClassName: Ticket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月26日下午7:43:31
*/
public class Ticket {
private String ticketId;
private String homesId;
private String ticketCreateTime;
private String ticketCompany;
private String sysName;
private String moneyLittle;
private String moneyBig;
private String accountCompany;
private String bedNumber;
private String username;
private String password;
public Ticket() {
super();
}
public Ticket(String ticketId, String homesId, String ticketCreateTime,
StringticketCompany, String sysName, String moneyLittle,
StringmoneyBig, String accountCompany, String bedNumber,
Stringusername, String password) {
this.ticketId= ticketId;
this.homesId= homesId;
this.ticketCreateTime= ticketCreateTime;
this.ticketCompany= ticketCompany;
this.sysName= sysName;
this.moneyLittle= moneyLittle;
this.moneyBig= moneyBig;
this.accountCompany= accountCompany;
this.bedNumber= bedNumber;
this.username= username;
this.password= password;
}
/**
* @return the ticketId
*/
public String getTicketId() {
return ticketId;
}
/**
* @param ticketId the ticketId to set
*/
public void setTicketId(String ticketId) {
this.ticketId= ticketId;
}
/**
* @return the homesId
*/
public String getHomesId() {
return homesId;
}
/**
* @param homesId the homesId to set
*/
public void setHomesId(String homesId) {
this.homesId= homesId;
}
/**
* @return the ticketCreateTime
*/
public String getTicketCreateTime() {
return ticketCreateTime;
}
/**
* @param ticketCreateTime the ticketCreateTimeto set
*/
public void setTicketCreateTime(String ticketCreateTime) {
this.ticketCreateTime= ticketCreateTime;
}
/**
* @return the ticketCompany
*/
public String getTicketCompany() {
return ticketCompany;
}
/**
* @param ticketCompany the ticketCompany toset
*/
public void setTicketCompany(String ticketCompany) {
this.ticketCompany= ticketCompany;
}
/**
* @return the sysName
*/
public String getSysName() {
return sysName;
}
/**
* @param sysName the sysName to set
*/
public void setSysName(String sysName) {
this.sysName= sysName;
}
/**
* @return the moneyLittle
*/
public String getMoneyLittle() {
return moneyLittle;
}
/**
* @param moneyLittle the moneyLittle to set
*/
public void setMoneyLittle(String moneyLittle) {
this.moneyLittle= moneyLittle;
}
/**
* @return the moneyBig
*/
public String getMoneyBig() {
return moneyBig;
}
/**
* @param moneyBig the moneyBig to set
*/
public void setMoneyBig(String moneyBig) {
this.moneyBig= moneyBig;
}
/**
* @return the accountCompany
*/
public String getAccountCompany() {
return accountCompany;
}
/**
* @param accountCompany the accountCompany toset
*/
public void setAccountCompany(String accountCompany) {
this.accountCompany= accountCompany;
}
/**
* @return the bedNumber
*/
public String getBedNumber() {
return bedNumber;
}
/**
* @param bedNumber the bedNumber to set
*/
public void setBedNumber(String bedNumber) {
this.bedNumber= bedNumber;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username= username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password= password;
}
}
测试类-TestTempletTicket[java]view plain copy
/**
*@Title: TestTempletTicket.java
*@Package: org.csun.ns.util
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日下午1:31:23
*@Version V1.0
*/
package org.csun.ns.util;
import java.io.File;
import org.csun.ns.client.OSSConfigure;
import org.csun.ns.client.OSSUtil;
import org.csun.ns.entity.Ticket;
/**
*@ClassName: TestTempletTicket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日下午1:31:23
*/
public class TestTempletTicket {
public static void main(String[] args) throws Exception {
Ticket ticket = new Ticket();
ticket.setTicketId("2016042710000");
ticket.setTicketCreateTime("2016年4月27日");
ticket.setTicketCompany("武汉日创科技有限公司");
ticket.setSysName("智能看护系统");
ticket.setMoneyLittle("50,000.00");
ticket.setMoneyBig("伍万元整");
ticket.setAccountCompany("洪山福利院");
ticket.setBedNumber("500床位");
ticket.setUsername("qiu");
ticket.setPassword("123456");
PDFTempletTicket pdfTT = new PDFTempletTicket();
pdfTT.setTemplatePdfPath("D:\\ticket_from.pdf");
pdfTT.setTargetPdfpath("D:\\aaabbbccc.pdf");
pdfTT.setTicket(ticket);
File file = new File("D:\\aaabbbccc.pdf");
file.createNewFile();
pdfTT.templetTicket(file);
//OSSConfigureconfig = OSSUtil.getOSSConfigure();
//OSSManageUtil.uploadFile(config, file, "aaabbbccc.pdf","pdf", "ticket/" + "aaabbbccc");
//System.out.println("path = " + config.getAccessUrl());
}
}
导出来后的结果:
备注:导出PDF文档,From域的内容不可见问题;iText找不到字体;问题1:我开始导出的From域内容看不到,将ps.setFormFlattening(true);设置为flase后,可以看到From域,还是看不到内容,我点击进入From后可以看到内容,该方法是将From域隐藏;后来看到有人设置From域内容的字体:BaseFont bf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);以及:
s.setSubstitutionFonts(fontList);问题2:别人的代码:BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:\Windows\Fonts下面有很多字体可以使用)
首先你的制作一个pdf模板:1.先用word做出模板界面
2.文件另存为pdf格式文件
3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:http://pan.baidu.com/s/1pL2klzt)如果无法下载可以联系博主。
4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)
5.做完上面的工作后,直接"另存为"将pdf存储就可以
*****************************************************************************以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖
[html] view plain copy<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
[html] view plain copy<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2.下面就是生成pdf代码了[java] view plain copyimport 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 Snippet {
// 利用模板生成pdf
public static void fillTemplate() {
// 模板路径
String templatePath = "E:/测试3.pdf";
// 生成的新文件路径
String newPDFPath = "E:/ceshi.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", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "河北省保定市" };
int i = 0;
java.util.Iterator<String> it = form.getFields().keySet().iterator();
while (it.hasNext()) {
String name = it.next().toString();
System.out.println(name);
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(1);
} catch (DocumentException e) {
System.out.println(2);
}
}
public static void main(String[] args) {
fillTemplate();
}
}
3.运行结果如下
*********************************************************************如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:[java] view plain copypublic static void test1(){//生成pdf
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));
document.open();
document.add(new Paragraph("hello word"));
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:[java] view plain copypublic static void test1_1(){
BaseFont bf;
Font font = null;
try {
bf = BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);//创建字体
font = new Font(bf,12);//使用字体
} catch (Exception e) {
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));
document.open();
document.add(new Paragraph("hello word 你好 世界",font));//引用字体
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
**************************************************************************************当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。 1.把华康少女的字体文件拷贝到这个文件夹里面了:
运行以下代码就能得到pdf文件[java] view plain copypublic static void test1_2(){
BaseFont bf;
Font font = null;
try {
// bf = BaseFont.createFont("font/simsun.ttc,1", //注意这里有一个,1
// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//宋体文字
bf = BaseFont.createFont("font/华康少女文字W5(P).TTC,1", //simsun.ttc
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//华康少女文字
font = new Font(bf,12);
} catch (Exception e) {
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("E:/3.pdf"));
document.open();
document.add(new Paragraph("上善若水",font));
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
当然,如果你还想换其他字体,就去下载字体文件吧,然后把相关部分替换掉就行,上面注释的是宋体的。。。
***********************以下是转载别人的****************************版权声明:欢迎大家转载,转载请声明转载地址http://blog.csdn.net/u012377333,谢谢大家。我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档。第一步:下载AdobeAcrobat DC,必须使用这个来制作from域。第二步:使用AdobeAcrobat DC将Word导成PDF文档。第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便; 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,“工具”-》“编辑PDF”-》”水印”-》”添加”
添加水印的操作:
点击“确定”:
第四步:使用AdobeAcrobat DC添加From域;添加From域方法:使用AdobeAcrobat DC打开文档,“工具”-》“准备表单”
点击“开始”:
点击“保存”:
添加“文本域”到我们想要添加内容的位置:
第五步:使用Java代码导出PDF文档;主要三个类:功能类-PDFTempletTicket[java]view plain copy
/**
*@Title: PDFTempletTicket.java
*@Package: org.csun.ns.util
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日上午11:29:52
*@Version V1.0
*/
package org.csun.ns.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import org.csun.ns.entity.Ticket;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
/**
*@ClassName: PDFTempletTicket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日上午11:29:52
*/
public class PDFTempletTicket {
private String templatePdfPath;
private String ttcPath;
private String targetPdfpath;
private Ticket ticket;
public PDFTempletTicket() {
super();
}
public PDFTempletTicket(String templatePdfPath, String ttcPath,
StringtargetPdfpath, Ticket ticket) {
this.templatePdfPath= templatePdfPath;
this.ttcPath= ttcPath;
this.targetPdfpath= targetPdfpath;
this.ticket= ticket;
}
public void templetTicket(File file) throws Exception {
PdfReaderreader = new PdfReader(templatePdfPath);
ByteArrayOutputStreambos = new ByteArrayOutputStream();
PdfStamperps = new PdfStamper(reader, bos);
/*使用中文字体 */
BaseFontbf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1",
BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
ArrayList<BaseFont> fontList = newArrayList<BaseFont>();
fontList.add(bf);
AcroFieldss = ps.getAcroFields();
s.setSubstitutionFonts(fontList);
s.setField("ticketId",ticket.getTicketId());
s.setField("ticketCreateTime",ticket.getTicketCreateTime());
s.setField("ticketCompany",ticket.getTicketCompany());
s.setField("sysName",ticket.getSysName());
s.setField("moneyLittle",ticket.getMoneyLittle());
s.setField("moneyBig",ticket.getMoneyBig());
s.setField("accountCompany",ticket.getAccountCompany());
s.setField("bedNumber",ticket.getBedNumber());
s.setField("username",ticket.getUsername());
s.setField("password",ticket.getPassword());
ps.setFormFlattening(true);
ps.close();
FileOutputStreamfos = new FileOutputStream(file);
fos.write(bos.toByteArray());
fos.close();
}
/**
* @return the templatePdfPath
*/
public String getTemplatePdfPath() {
return templatePdfPath;
}
/**
* @param templatePdfPath the templatePdfPathto set
*/
public void setTemplatePdfPath(String templatePdfPath) {
this.templatePdfPath= templatePdfPath;
}
/**
* @return the ttcPath
*/
public String getTtcPath() {
returnttcPath;
}
/**
* @param ttcPath the ttcPath to set
*/
public void setTtcPath(String ttcPath) {
this.ttcPath= ttcPath;
}
/**
* @return the targetPdfpath
*/
public String getTargetPdfpath() {
return targetPdfpath;
}
/**
* @param targetPdfpath the targetPdfpath toset
*/
public void setTargetPdfpath(String targetPdfpath) {
this.targetPdfpath= targetPdfpath;
}
/**
* @return the ticket
*/
public Ticket getTicket() {
return ticket;
}
/**
* @param ticket the ticket to set
*/
public void setTicket(Ticket ticket) {
this.ticket= ticket;
}
}
数据类-Ticket[java]view plain copy
/**
*@Title: Ticket.java
*@Package: org.csun.ns.entity
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月26日下午7:43:31
*@Version V1.0
*/
package org.csun.ns.entity;
/**
*@ClassName: Ticket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月26日下午7:43:31
*/
public class Ticket {
private String ticketId;
private String homesId;
private String ticketCreateTime;
private String ticketCompany;
private String sysName;
private String moneyLittle;
private String moneyBig;
private String accountCompany;
private String bedNumber;
private String username;
private String password;
public Ticket() {
super();
}
public Ticket(String ticketId, String homesId, String ticketCreateTime,
StringticketCompany, String sysName, String moneyLittle,
StringmoneyBig, String accountCompany, String bedNumber,
Stringusername, String password) {
this.ticketId= ticketId;
this.homesId= homesId;
this.ticketCreateTime= ticketCreateTime;
this.ticketCompany= ticketCompany;
this.sysName= sysName;
this.moneyLittle= moneyLittle;
this.moneyBig= moneyBig;
this.accountCompany= accountCompany;
this.bedNumber= bedNumber;
this.username= username;
this.password= password;
}
/**
* @return the ticketId
*/
public String getTicketId() {
return ticketId;
}
/**
* @param ticketId the ticketId to set
*/
public void setTicketId(String ticketId) {
this.ticketId= ticketId;
}
/**
* @return the homesId
*/
public String getHomesId() {
return homesId;
}
/**
* @param homesId the homesId to set
*/
public void setHomesId(String homesId) {
this.homesId= homesId;
}
/**
* @return the ticketCreateTime
*/
public String getTicketCreateTime() {
return ticketCreateTime;
}
/**
* @param ticketCreateTime the ticketCreateTimeto set
*/
public void setTicketCreateTime(String ticketCreateTime) {
this.ticketCreateTime= ticketCreateTime;
}
/**
* @return the ticketCompany
*/
public String getTicketCompany() {
return ticketCompany;
}
/**
* @param ticketCompany the ticketCompany toset
*/
public void setTicketCompany(String ticketCompany) {
this.ticketCompany= ticketCompany;
}
/**
* @return the sysName
*/
public String getSysName() {
return sysName;
}
/**
* @param sysName the sysName to set
*/
public void setSysName(String sysName) {
this.sysName= sysName;
}
/**
* @return the moneyLittle
*/
public String getMoneyLittle() {
return moneyLittle;
}
/**
* @param moneyLittle the moneyLittle to set
*/
public void setMoneyLittle(String moneyLittle) {
this.moneyLittle= moneyLittle;
}
/**
* @return the moneyBig
*/
public String getMoneyBig() {
return moneyBig;
}
/**
* @param moneyBig the moneyBig to set
*/
public void setMoneyBig(String moneyBig) {
this.moneyBig= moneyBig;
}
/**
* @return the accountCompany
*/
public String getAccountCompany() {
return accountCompany;
}
/**
* @param accountCompany the accountCompany toset
*/
public void setAccountCompany(String accountCompany) {
this.accountCompany= accountCompany;
}
/**
* @return the bedNumber
*/
public String getBedNumber() {
return bedNumber;
}
/**
* @param bedNumber the bedNumber to set
*/
public void setBedNumber(String bedNumber) {
this.bedNumber= bedNumber;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username= username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password= password;
}
}
测试类-TestTempletTicket[java]view plain copy
/**
*@Title: TestTempletTicket.java
*@Package: org.csun.ns.util
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日下午1:31:23
*@Version V1.0
*/
package org.csun.ns.util;
import java.io.File;
import org.csun.ns.client.OSSConfigure;
import org.csun.ns.client.OSSUtil;
import org.csun.ns.entity.Ticket;
/**
*@ClassName: TestTempletTicket
*@Description: TODO
*@Author: chisj chisj@foxmail.com
*@Date: 2016年4月27日下午1:31:23
*/
public class TestTempletTicket {
public static void main(String[] args) throws Exception {
Ticket ticket = new Ticket();
ticket.setTicketId("2016042710000");
ticket.setTicketCreateTime("2016年4月27日");
ticket.setTicketCompany("武汉日创科技有限公司");
ticket.setSysName("智能看护系统");
ticket.setMoneyLittle("50,000.00");
ticket.setMoneyBig("伍万元整");
ticket.setAccountCompany("洪山福利院");
ticket.setBedNumber("500床位");
ticket.setUsername("qiu");
ticket.setPassword("123456");
PDFTempletTicket pdfTT = new PDFTempletTicket();
pdfTT.setTemplatePdfPath("D:\\ticket_from.pdf");
pdfTT.setTargetPdfpath("D:\\aaabbbccc.pdf");
pdfTT.setTicket(ticket);
File file = new File("D:\\aaabbbccc.pdf");
file.createNewFile();
pdfTT.templetTicket(file);
//OSSConfigureconfig = OSSUtil.getOSSConfigure();
//OSSManageUtil.uploadFile(config, file, "aaabbbccc.pdf","pdf", "ticket/" + "aaabbbccc");
//System.out.println("path = " + config.getAccessUrl());
}
}
导出来后的结果:
备注:导出PDF文档,From域的内容不可见问题;iText找不到字体;问题1:我开始导出的From域内容看不到,将ps.setFormFlattening(true);设置为flase后,可以看到From域,还是看不到内容,我点击进入From后可以看到内容,该方法是将From域隐藏;后来看到有人设置From域内容的字体:BaseFont bf = BaseFont.createFont(PDFTicket.class.getResource("/") +"org/csun/ns/util/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);以及:
s.setSubstitutionFonts(fontList);问题2:别人的代码:BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:\Windows\Fonts下面有很多字体可以使用)
相关文章推荐
- java根据模板生成pdf文件并导出(转)
- java根据模板生成pdf文件并导出
- Itext根据模板生成pdf文件并导出
- java 使用itextpdf.jar和itext-asian.jar根据pdf模板填写数据后生成一个新的pdf文件
- java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
- java根据模板导出pdf
- 根据xsl模板及xml数据文件生成pdf(文字内容复制不乱码)
- java根据模板导出PDF(利用itext)
- java 利用pdf模板 生成 pdf文件
- 根据模板生成word文件并导出保存到本地
- 根据PDF模板生成PDF文件(基于iTextSharp)
- java根据模板生成word文件
- java根据模板动态生成PDF实例
- 根据模板生成word文件并导出保存到本地
- Java-pdf模板制作流程-使用pdf 模板生成pdf文件
- Java使用freemarker模板导出pdf文件
- java-pdf-(itext+adobe acrobat+pdf模板)生成pdf文件
- Java根据模板导出Excel报表并复制模板生成多个Sheet页
- java根据模板导出PDF详细教程(无bug版)
- 根据html改为ftl模板生成pdf文件,支持中文及换行