最近开始接触到系统中开始有打印的功能了,而对于打印功能的实现有很多种方式,比如说在浏览器中调用window的print方法,或者是通过生成pdf文档来打印。
我自认为两者都各自有优缺点,使用window的print的优点在于:实现起来比较简单,样式什么的都比较好调试。缺点在于:排版布局太痛苦了,使用pdf来打印的优点在于:你可以很好的控制排版布局,将模板定义好之后,基本上都是一劳永逸了。缺点在于浏览器等待的时间比较长。而且还跟客户端的adoberead版本有关,好像9.3不支持这个功能。
而我采用的是使用pdf模板的方式来生成pdf。实现步骤,第一部做一个wold文档,稍微调整一下字体格式,布局。
最近增加了一个功能就是将动态生成的一个图片加入到pdf中的某一个位置。
如图:(word)
完成之后,直接使用Adobe Acrobat 8 Professional这个软件将world转换成pdf文件。
得到的pdf文件如下图:
然后使用Adobe Acrobat 8 Professional软件编辑表单完成之后如下图:
然后就可以使用java程序,通过itext的API,加上亚洲语言包,不过建议最好是使用相同的版本。以免一些命名空间不一致导致报一些莫名其妙的错出来。
package pdfTest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.springframework.util.ResourceUtils;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class PDFTest {
public static void main(String[] args) {
try {
FileOutputStream pos = new FileOutputStream(new File("D:\\test.pdf"));
InputStream is = ResourceUtils.getURL("classpath:pdfTemplate.pdf").openStream();;
// 目标输出流
PdfReader reader = new PdfReader(is);
PdfStamper stamp = new PdfStamper(reader, pos);
StringBuffer script = new StringBuffer();
//给pdf加上脚本实现自动掉打印机,然后自动关闭
script.append("this.print({bUI: false,bSilent: true,bShrinkToFit: false});");
//自动关闭的脚本
//.append("\r\nthis.closeDoc();");
stamp.addJavaScript(script.toString());
// 插入水印;
Image img = Image.getInstance("D:/stsWorkspace/pdfTest/source/742.jpg");
img.setAbsolutePosition(50, 680);
PdfContentByte over = stamp.getOverContent(1);
over.addImage(img);
AcroFields form = stamp.getAcroFields();
//通过属性名来赋值
form.setField("orderCode", "DD0045784-897");
form.setField("orderPrice", "78.99");
form.setField("receiveName", "艾伦");
form.setField("cellphone", "021-14579896");
form.setField("mobile", "16898654789");
form.setField("ispos", "是");
form.setField("address", "银河系太阳系地球亚洲中国内蒙古自治区亚历山大市亚历山大县亚历山大镇亚里士多德乡哥伦布村长寿街3号");
for(int i=0;i<2;i++){
form.setField("stockNo"+i, "789558554");
form.setField("number"+i, "2");
form.setField("price"+i, "40");
}
stamp.setFormFlattening(true);
stamp.close();
//输出文件,关闭流
pos.flush();
pos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
呵呵,附件是项目的源码,以及模板文件。
分享到:
相关推荐
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
此文档主要讲述了使用Java组件iText来生成PDF,操作PDF
NULL 博文链接:https://llade.iteye.com/blog/2397480
利用itext操作pdf从数据库导出大量数据 压缩包含需要的jar包、案例源码
itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框
html渲染页面转换为pdf并设置页眉,页码,水印,目录,二维码
内含maven仓库在文件itext.txt文件中,含架包,需要先用adobe来生成pdf模板
Java使用iText PDF插件导出PDF文档时,需引入中文字体文件,并创建不同大小风格的中文字体
itextpdf中绝对位置添加文本,也可以进行多页设置。pdf插入文本
iText是一个JAVA中快速制作PDF文件的类库,如果你想用JAVA制作PDF文档,这个源码包可不要错过哟。
JAVA基于ITEXT操作PDF文档,代码示例加详细注解。
* 提供的方法 * 1、pdf追加pdf * 2、pdf插入pdf 指定序列号下 * 3、删除pdf的某页 * 4、图片转pdf * 5、读取pdf文本 * 6、交换pdf页号 * 7、生成pdf目录(未... <artifactId>itextpdf <version>5.5.12 </dependency>
itextpdf-5.5.0.jar使用iText对PDF文档的操作
iText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合
itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。
PDF iText 使用简单介绍,一种生成PDF报表的Java组件--iText
内含itextpdf5.5.10和itext-asian5.2.0两个jar包,用于java操作pdf。 比如生成pdf、设置pdf字体、样式、表格、水印等。
iText5.0.6PDF操作包+iTextAsian.rar中文支持包