编辑pdf文件中的字节

时间:2012-02-15 18:17:22

标签: 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格式的一些安全机制,就像哈希一样。我可以以某种方式避免这个消息吗?

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

2 个答案:

答案 0 :(得分:2)

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文件疯狂。

答案 1 :(得分:0)

假设您正在使用灰度值,只需尝试以另一种方式将RGB转换为CMYK:

RGB(0.7,0.7,0.7) - > CMYK(0.7,0.7,0.7,0.0)