本文共 2541 字,大约阅读时间需要 8 分钟。
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
的类方法 getInstance
将 Document
实例同文件输出流联系起来,实际上起作用的是内部方法中创建的 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(); } }}
从类的分布来看,PdfDocument
和 PdfWriter
同属于 kernel
核心包,而 Document
则被分到了 layout
布局包中。并且,PdfDocument
不再是 Document
的子类。
同样,诸如 Paragraph
、List
、Table
等类,都是 BlockElement
的子类,并同属于 layout.element
包。这样设计的好处是向 PDF 中添加的元素的相同属性得以抽象出来,如他们的宽高、内外边距等,这同 HTML5 中的盒模型十分相似。
iText 7 相较于 iText 5 的优化和调整很多,但是,创建 PDF 文档的思路确实不变的,我们总是先创建一个文档输出流,并将其同 Document
关联起来,而后,再通过 Document
向文档中添加各种文本、图片、表格等信息。
详细使用方法可以参考 或者直接
转载地址:http://evdws.baihongyu.com/