`
niuka
  • 浏览: 51673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用itext操作pdf

阅读更多

   最近开始接触到系统中开始有打印的功能了,而对于打印功能的实现有很多种方式,比如说在浏览器中调用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();
		}
		
		
		
		
		
		 
	}

}

 

 呵呵,附件是项目的源码,以及模板文件。

分享到:
评论
6 楼 niuka 2012-12-28  
恩 是的。
5 楼 yuur369 2012-12-27  
niuka 写道
这个是先定好规则,再这样做的,如果你要显示不定量的数据的话,就需要用程序去生成这个pdf,再生成多个tr,这个也是可以实现的。

也就是说用模板是实现不了的了。。。。。只有直接写pdftable是吧。。
4 楼 niuka 2012-12-27  
这个是先定好规则,再这样做的,如果你要显示不定量的数据的话,就需要用程序去生成这个pdf,再生成多个tr,这个也是可以实现的。
3 楼 yuur369 2012-12-26  
假如像示例中的商品数量为动态的。。比如从数据库中取出来的。。该怎么处理呢?
2 楼 niuka 2012-10-09  
jnssvh 写道
谢谢,原来打印处理多种多样啊

恩,以后有好的方法记得共享哦!
1 楼 jnssvh 2012-09-26  
谢谢,原来打印处理多种多样啊

相关推荐

    使用itext操作pdf文档(创建、签章、斜字水印、文本替换)

    这篇博客文章(https://llade.iteye.com/blog/2397480)详细介绍了如何使用iText进行这些操作。 首先,创建PDF文档。iText提供了一个名为PdfWriter的类,可以用来创建一个新的PDF文档。你需要创建一个PdfDocument...

    iText操作Pdf简单整理

    在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...

    iText_pdf.rar_iText pdf_itext PDF类

    iText是一款广泛使用的Java库,专门用于创建和编辑PDF(Portable Document Format)文件。这个类库使得开发者能够方便地在应用程序中集成PDF生成和修改功能,而无需深入了解PDF的复杂规格。标题中的“iText_pdf.rar_...

    使用IText生成PDF和WORD文档

    IText是一款广泛使用的Java库,专门用于创建和编辑PDF及Word文档。在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document ...

    初学Itext 生成PDF 表格,条形码(一维),图片

    在使用iText操作PDF的过程中,掌握它提供的各种高级功能,比如PDF文档的合并、拆分、注释添加、表单处理等,都是非常有价值的。但对于初学者而言,理解如何使用iText创建包含表格、条形码和图片的文档是学习iText库...

    java使用itext实现pdf文件下载

    本教程将详细讲解如何使用Itext库实现PDF文件的下载,包括通过系统路径下载和通过浏览器下载两种方式。 首先,我们需要了解Itext的基本用法。Itext提供了一系列的API,可以方便地创建PDF文档的各个元素,如文本、...

    使用itextpdf将excel转化为pdf + pdf加水印

    TestForExcel2PDF测试类可能包含这样的逻辑:首先,加载Excel文件,然后使用itextpdf的API将工作表的内容转换为PDF页面,最后保存为PDF文件。这个过程中可能涉及到对Excel表格的样式、字体、颜色等元素的保持,以...

    使用itextpdf将PDF大文件拆分成若干份指定大小文件.zip

    2. **读取PDF**: 使用`PdfReader`类打开原始PDF文件,获取其`PdfStamper`实例,这将允许你访问并操作PDF的内部结构。 3. **计算页面大小**: 每个PDF页面可能包含不同的元素,如文本、图像和图形,这导致每页的大小...

    使用itext生成pdf需要的jar包

    本篇将详细介绍如何使用iText生成PDF,以及所需的jar包。 首先,我们需要理解iText库的核心功能。iText允许开发者通过编程方式创建PDF文档,支持添加文本、图像、表格、链接、样式和布局等多种元素。它还提供了高级...

    springboot使用itext生成pdf并保存到本地

    本教程将探讨如何利用iText库在Spring Boot应用中从HTML页面生成PDF,并进行一系列的定制化操作,如添加页眉、页码、水印、目录以及二维码。 首先,iText是一个强大的Java库,专门用于创建和编辑PDF文档。它提供了...

    java通过itext操作pdf模板写入pdf合同数据

    Java通过iText库操作PDF模板来写入PDF合同数据是一项常见的技术任务,尤其在文档自动化处理和企业级应用中。iText是一个强大的PDF处理库,它允许开发者创建、修改和处理PDF文档。在这个过程中,首先我们需要一个PDF...

    利用itext操作pdf从数据库导出大量数据

    本篇文章将详细介绍如何利用iText库操作PDF,从数据库中导出大量数据。 首先,我们需要理解iText的基本概念和功能。iText提供了丰富的API,可以用于创建新的PDF文档、添加文本、图像、表格、链接等元素,以及对已有...

    JAVA使用itextpdf实现HTML转PDF

    虽然本示例未直接使用XPDF,但在某些场景下,如服务器环境,你可能需要结合XPDF或其他命令行工具来完成更复杂的PDF操作。 总之,使用iTextPDF库在Java中实现HTML到PDF的转换是一项实用的技能,但需要注意库对HTML和...

    itext7 pdf转图片

    在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...

    java使用itextpdf、itext-asian对pdf文件加水印

    在这种情况下,可以使用iTextPDF库以及其针对亚洲字符集的扩展iText-Asian。这两个库提供了强大的功能,让我们能够方便地处理PDF文档,包括添加中文文字水印。以下是对这两个库以及如何在Java中实现这一功能的详细...

    Itext删除PDF的图层

    "Itext删除PDF的图层"是一个针对PDF处理的专题,特别是涉及到如何使用Itext库来移除PDF文档中的特定图层。Itext是一个开源Java库,专为处理PDF文档设计,提供了一系列API用于创建、编辑和阅读PDF文件。 **Itext库...

    itext对pdf进行编辑

    itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框

    itextpdf.jar

    总结来说,iTextPDF是Java开发中不可或缺的PDF处理工具,它通过强大的HTML、XML和Web表单转换能力,以及丰富的PDF操作接口,极大地拓展了PDF的应用领域。无论是简单的数据输出,还是复杂的报表生成,甚至是安全的...

Global site tag (gtag.js) - Google Analytics