2012-02-15 80 views
1

我需要将RGB中的灰度PDF转换为CMYK。因此,我只是在iText中创建一个未压缩的PDF,然后用“0.0 0.0 0.0 0.7 K”替换“0.7 0.7 0.7 RB”等所有条目。在pdf文件中编辑字节

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

P.S.直接在CMYK中生成PDF不是一种选择,因为我使用PdfGraphics2D绘制了我的AWT组件,并且PdfGraphics2D只能使用RGB。

+0

所以换句话说:你正在像一个BMP治疗PDF并获得一个随机生成器? – 2012-02-15 18:20:43

+0

不,我把一个未压缩的pdf作为文本 – AvrDragon 2012-02-16 09:15:45

回答

2

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

当您更换0.7 0.7 0.7 RB0.0 0.0 0.0 0.7 K你改变页面流的字节大小和渲染存储在交叉引用流不正确的值。

许多PDF处理器是用来对付这样的方式打破PDF文件,但你肯定想以适应方形到圆形孔:-)

请使用一个工具,可以适当做任务。我想,Acrobat Professional应该做你需要的东西。或者至少更新交叉引用表(可能不是一件容易的事)。

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

但请请请不要让这些破碎的PDF文件进入荒野。

+0

不幸的是后编辑pdf在某些外部应用程序不是一个选项,我需要使我的Java代码中的所有工作 – AvrDragon 2012-02-16 09:17:30

0

假设你与灰度值的工作,只是尝试转换RGB在这个其他方式为CMYK:

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