java - 编辑pdf文件中的字节

标签 java pdf itext

我需要将 RGB 灰度 PDF 转换为 CMYK。所以我只是在 iText 中创建一个未压缩的 PDF,然后将所有条目(如“0.7 0.7 0.7 RB”)替换为“0.0 0.0 0.0 0.7 K”。

它工作正常,但当我在 Acrobat Reader 中打开 pdf 时,我看到一条消息,如“PDF 已损坏,但可以打开”。然后pdf看起来不错。我想是 PDF 格式的一些安全机制,比如哈希。我可以以某种方式避免此消息吗?

附注直接在 CMYK 中生成 pdf 不是一个选项,因为我使用 PdfGraphics2D 来绘制我的 AWT 组件,而 PdfGraphics2D 只能使用 RGB。

最佳答案

PDF 文件包含交叉引用表和/或一个或多个交叉引用流。基本上,这样的表/流包含有关 PDF 对象距文件开头的偏移量的信息。

当您将 0.7 0.7 0.7 RB 替换为 0.0 0.0 0.0 0.7 K 时,您正在更改页面流的字节大小,并且会导致存储在交叉引用流中的值不正确。

许多 PDF 处理器都用于处理以这种方式损坏的 PDF 文件,但您肯定会尝试将正方形放入圆孔中:-)

请使用可以正确完成任务的工具。我想,Acrobat Professional 应该可以很好地满足您的需求。或者至少更新交叉引用表(可能不是一件容易的事)。

另一种选择是破解一些损坏的 PDF,然后在 Acrobat 中打开它们并保存。Acrobat 将为您更新交叉引用表。

但是请-请-请不要让此类损坏的 PDF 散布各处。

关于java - 编辑pdf文件中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9298949/

相关文章:

java - Android:SQLite 部分或完整单词搜索无法使用 SELECT 查询进行

java - 通用方法的 JUnit 测试用例

javascript - 在 JQuery/AJAX 中动态更改 contentType

java - 是否可以逐渐使用 iText RTF(Java 库)刷新输出? (内存不足错误)

java - 使用 Itext 将颜色应用于段落中的字符串

java - 如何测试另一个包中父类(super class)的 protected 继承方法

java - 谷歌应用引擎上的 UserService 问题

python - PDFminer 给出奇怪的字母

php - 用 TCPDF 定位 h1,h2,h3 和其他标签

java - 'com.itextpdf.text.exceptions.InvalidPdfException : PDF header signature not found' when reading the input stream from servlet