iText系列之PdfCopy和PdfSmartCopy
来源:互联网 发布:淘宝卖家怎么处理退款 编辑:程序博客网 时间:2024/06/03 19:31
一个PDF文件是由一系列的对象组成的,比如说一个PDF文件中的图片是由键值对形式的字典组成的一个流对象,而这个流对象是由stream和endstream这两个词来界定的。
那么,如果我们现在在不同的两个页面上,都有一个相同的图片,我们需要避免重复的信息存储,这样一来,就可以达到优化和压缩PDF文件的大小的目的。
我们来看看这两个对象是怎么做的:
- PdfCopy:它会存储两个不同的图片流对象,在索引表中会引用两次,因此虽然是一个相同的图片,但是在不同的页面上会分别显示对应的图片。
- PdfSmartCopy:经过它处理,会重建索引表,会把这个图片流对象引用到不同的页面上,而这个图片对象只存储了一份。
由此看来,PdfCopy处理的比较快,但是生成的PDF文件的大小会很大,很臃肿。而PdfSmartCopy处理文档比较慢,也会消耗更多的内存,但是生成的PDF文件大小会很小。
因此,在实际使用中,为了控制大小,一般会使用PdfSmartCopy来对PDF文件进行处理。
例如:
public static void compressPdf(byte[] pdf, OutputStream out) throws Exception {PdfReader reader = null;PdfSmartCopy copy = null;Document document = null;try {document = new Document();copy = new PdfSmartCopy(document, out);reader = new PdfReader(pdf);int n = reader.getNumberOfPages();document.open();for (int i=1; i<=n; i++) {document.newPage();PdfImportedPage imported = copy.getImportedPage(reader, i);copy.addPage(imported);}} catch (IOException e) {e.printStackTrace();} finally {if (document != null)document.close();if (reader != null)reader.close();if (copy != null)copy.close();}}
0 0
- iText系列之PdfCopy和PdfSmartCopy
- iText使用PdfCopy时出现的空指针问题
- iText系列(二) iText---表格
- iText系列(一) Itext简单介绍
- iText系列(四) iText加入页码
- iText入门之HelloWorld
- 导出pdf之--itext
- iText简单应用之二
- JAVA解析PDF之IText
- iText初探之HelloWorld (一)
- Java操作PDF之iText
- PDF生成方案之iText
- iText
- iText
- ITEXT
- iText
- iText
- itext
- test
- 清明出游散记
- java学习总结——第十天
- ***s5pv210 nandflash 移植
- saiku中文维度,补充说明
- iText系列之PdfCopy和PdfSmartCopy
- Git教程【译】
- 第七周(项目一)——深复制体验。
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- Ubuntu安装MariaDB 10
- MVC中的Templates
- 2038,又一个世界末日?
- android 用seekbar建立拖动条
- Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER