首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfConcatenate (智能)在iText 7中的应用

PdfConcatenate (智能)在iText 7中的应用
EN

Stack Overflow用户
提问于 2019-07-26 15:37:16
回答 1查看 731关注 0票数 0

在iText v5中,可以选择对PDF文档进行“智能”连接:

代码语言:javascript
复制
public PdfConcatenate(OutputStream os, boolean smart) throws DocumentException

创建连接类的实例。 参数: os -用于PDF文档智能的OutputStream -我们希望PdfCopy检测冗余内容吗?

我所做的初始化应该是这样的:

代码语言:javascript
复制
PdfConcatenate concatenatedPdf = new PdfConcatenate(outputStream, true);

在iText 7中,我看到我们应该使用copyPages函数。类似于:

代码语言:javascript
复制
[...]
PdfDocument concatenatedPdf = new PdfDocument(writer);
PdfDocument docToAdd = new PdfDocument(pdfReader);
docToAdd.copyPagesTo(1, docToAdd.getNumberOfPages(), concatenatedPdf);

我正在迁移一个逻辑,将文档从iText v5合并到v7。对于v5中带有PdfConcatenate和标志“smart”的示例测试,结果PDF为177 KB,v7为763 KB。是否有一种方法可以检测iText v7中的冗余内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 19:59:34

首先,iText7为合并PDF提供了一个名为PdfMerger的方便类。

下面是一个如何使用它的示例:

代码语言:javascript
复制
PdfDocument sourceDocument = new PdfDocument(new PdfReader(filename));

PdfMerger resultDocument = new PdfMerger(new PdfDocument(new PdfWriter(resultFile)));
resultDocument.merge(sourceDocument, fromPage, toPage);
resultDocument.close();
sourceDocument.close();

当然,在本例中,只有一组来自源文档的页面被添加到结果文档中,但是您可以任意多次调用merge函数。

现在,当您希望生成的文件在文件大小上尽可能小时,您需要为输入到PdfDocument的目标PdfMerger指定一些设置。

首先,您可以调整流的压缩级别以使用更多的CPU和时间,但压缩更好:

代码语言:javascript
复制
PdfMerger resultDocument = new PdfMerger(new PdfDocument(
            new PdfWriter(resultFile, new WriterProperties().setCompressionLevel(CompressionConstants.BEST_COMPRESSION))));

要更好地压缩,可以使用完全压缩。这不仅会更好地压缩流(页面的内容、图像、字体),而且还会压缩PDF对象,这些对象通常占用了out文件大小中的许多位。这样做是可以的:

代码语言:javascript
复制
PdfMerger resultDocument = new PdfMerger(new PdfDocument(
            new PdfWriter(resultFile, new WriterProperties().setFullCompressionMode(true))));

在默认情况下,如果源文档具有相同的对象,则可能会有一些重复。所谓的“智能模式”提供了一种可能性,以避免这种重复,并优化文件大小的情况下,有许多重复的对象。这将是您在iText 5代码中引用的“智能”标志的关闭模拟。您可以通过以下方式在iText 7中启用智能模式:

代码语言:javascript
复制
PdfMerger resultDocument = new PdfMerger(new PdfDocument(
            new PdfWriter(resultFile, new WriterProperties().useSmartMode())));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57223168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档