博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iText 简介
阅读量:4296 次
发布时间:2019-05-27

本文共 2541 字,大约阅读时间需要 8 分钟。

iText 简介

iText 是业界使用最为广泛的创建 PDF 的框架,从 iText 5 升级到 iText 7 后,功能模块的划分更加清晰,两者在使用上,有较为明显的区别。

使用 Maven 管理工具引入两者的代码如下:

com.itextpdf
itext7-core
7.1.11
pom
com.itextpdf
itextpdf
5.5.13.1

实际上,对于版本 5 而言,许多模块相互混杂,引入的一些类并不会用到,而版本 7 则对多个功能进行了细致的划分,如签名,亚洲地区的字体支持,二维码,输入输出等,所以使用 iText 7 时,可以根据需要移出用不到的依赖包。


在版本 5 中的使用:

import com.itextpdf.text.Document;import com.itextpdf.text.PageSize;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.PdfWriter;public class App1 {	 public static void main( String[] args )	    {	        try {				String filePath = "/temp/test1.pdf";				File file = new File(filePath);								Document document = new Document();								OutputStream os = new FileOutputStream(file);								PdfWriter writer = PdfWriter.getInstance(document, os);								document.setPageSize(PageSize.A4);								Paragraph p = new Paragraph();				p.add("aa");								document.open();				document.add(p);				document.close();							} catch (Exception e) {				e.printStackTrace();							}	    }}

通过 PdfWriter 的类方法 getInstanceDocument 实例同文件输出流联系起来,实际上起作用的是内部方法中创建的 Document 的子类 PdfDocument

在执行 document.add(p); 方法时,实际上也是向 PdfDocument 实例中添加了实现 Element 接口的类对象。


在版本 7 中使用:

import com.itextpdf.kernel.geom.PageSize;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.List;import com.itextpdf.layout.element.Paragraph; public class App2{    public static void main( String[] args )    {            try {			String filePath = "/temp/test2.pdf";			File file = new File(filePath);						PdfWriter writer = new PdfWriter(file);						PdfDocument document = new PdfDocument(writer);			document.setDefaultPageSize(PageSize.A4);						Document doc = new Document(document);						doc.add(new Paragraph("Hello World!"));						List list = new List();			list.setListSymbol("+");			list.setMarginTop(20);			list.add("a");			list.add("b");			list.add("c");			doc.add(list);						doc.close();		} catch (FileNotFoundException e) {			e.printStackTrace();		}    }}

从类的分布来看,PdfDocumentPdfWriter 同属于 kernel 核心包,而 Document 则被分到了 layout 布局包中。并且,PdfDocument 不再是 Document 的子类。

同样,诸如 ParagraphListTable 等类,都是 BlockElement 的子类,并同属于 layout.element 包。这样设计的好处是向 PDF 中添加的元素的相同属性得以抽象出来,如他们的宽高、内外边距等,这同 HTML5 中的盒模型十分相似。

iText 7 相较于 iText 5 的优化和调整很多,但是,创建 PDF 文档的思路确实不变的,我们总是先创建一个文档输出流,并将其同 Document 关联起来,而后,再通过 Document 向文档中添加各种文本、图片、表格等信息。

详细使用方法可以参考 或者直接

转载地址:http://evdws.baihongyu.com/

你可能感兴趣的文章
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
点击button实现Storyboard中TabBar Controller的tab切换
查看>>
Xcode 的正确打开方式——Debugging
查看>>
打包app出现的一个问题
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>
那些好用的iOS开发工具
查看>>
iOS最佳实践
查看>>
使用CFStringTransform将汉字转换为拼音
查看>>
更轻量的 View Controllers
查看>>
Chisel-LLDB命令插件,让调试更Easy
查看>>