gpt4 book ai didi

java - 使用 itext java 库复制时,pdf 文件大小大大增加

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:37 25 4
gpt4 key购买 nike

我正在尝试使用 Java 中的 itextpdf 库将现有的 pdf 文件复制到一些新文件中。我正在使用 itextpdf 的 5.5.10 版。我在两种方式上都面临着不同的问题:PDFStamper 和 PdfCopy。当我使用 PDFStamper 类时,我观察到新文件的大小大幅增加,尽管没有添加任何新项目。这是代码片段:

    String currFile="C:\misc\pdffiles\AcroJS.pdf" ;
String dest = "C:\misc\pdffiles\AcroJS_copy.pdf" ;
PdfReader reader = new PdfReader(currFile) ;
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest)) ;
stamper.close() ;
reader.close() ;

一些观察结果是:7 MB(原始)到 13 MB(大约,新文件),116 KB > 119 KB(大约)

在复制现有 pdf 文件时,我期望文件大小大致相同。我无法弄清楚为什么尺寸会增加那么多。

我也尝试过 PdfCopy 类。我使用 PdfCopy 遵循了 2 种方法:

  1. 逐页复制。
  2. 在 pdfcopy 对象上调用 setMergeFields() 然后调用 pdfcopy.addDocument(reader) ;

但这两种方法的问题是它从 pdf 文件中丢弃了一些非内容元数据,因此当 Adob​​e 阅读器打开新 pdf 时,它会被破坏。例如我的 pdf 包含字典对象 PdfName.S 。在这种情况下,新创建的 pdf 文件只有 2KB(原始文件为 1.6 MB),这显然意味着没有任何内容被复制到文档中并且它已损坏。

我最初的要求很简单:将现有的 pdf 复制到新的 pdf 文件,不增加大小,不丢弃必要的项目。显然它不是像,复制,粘贴然后重命名。因为在下一步中,我要对 pdf 内容进行一些处理。任何帮助都感激不尽。

操作系统:Windows 10 专业版 java :1.8.101itext:5.5.10

谢谢

最佳答案

使用PdfStamper

你的代码

你的代码

PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest)) ;
stamper.close() ;

基本上告诉 iText 复制原始 PDF 丢弃未使用的对象并使用 iText 的默认压缩设置

iText 的默认压缩设置包括使用压缩的交叉引用和对象流(在 PDF 1.5 中引入),而是使用交叉引用表和单独压缩对象的旧技术。

另一方面,示例文件确实使用了这些技术。因此,它的压缩效果更好。

完全压缩的代码

您也可以告诉 iText 使用这些改进的压缩技术,如下所示:

PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, outputStream);
stamper.setFullCompression();

stamper.close();

( Stamping.java 测试方法 testStampAcroJSCompressed)

这导致文件大小小于 4 MB。

带有追加模式的代码

如果您想忠实于对象的原始存储方式,您可以改用附加模式,它会完全复制原始文件并以所谓的增量更新的形式添加更改,如下所示:

PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, outputStream, '\0', true);

stamper.close();

( Stamping.java 测试方法 testStampAcroJSAppended)

这导致文件比原始文件稍大。

使用PdfCopy

您观察到 PdfCopy

is throwing away some non-content metadata

当然可以。 PdfCopy 旨在将页面从一个 PDF 复制到另一个 PDF,保持内容和注释不变,但忽略其他页面级和所有文档级信息。

关于java - 使用 itext java 库复制时,pdf 文件大小大大增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41183349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com