【问题标题】:iText PDF colors are inconsistent in AcrobatAcrobat 中的 iText PDF 颜色不一致
【发布时间】:2011-05-25 20:26:34
【问题描述】:

我正在使用 iText 从 Java 生成多页 PDF。问题:我图表上的线条在某些页面之间改变颜色。

下面是页面之间转换的截图:

本文取自 Adob​​e Reader。这些线条在 OS X Preview.app 中是正确的颜色。

在阅读器中,顶部是#73C352,底部是#35FF69。在 Preview.app 中,该行是 #00FE7E。

对可能导致这种差异的原因有什么想法吗?我从 Preview.app 保存了 PDF 并在 Adob​​e Reader 中打开它,颜色仍然关闭。

Here is the PDF that is having trouble。在 Adob​​e Reader 中打开它并查看第 11 页和第 12 页之间的过渡。

进一步检查后,java.awt.print.PrinterJob 似乎为每个 pageIndex 调用 print() 两次。这可能是一个线索。

【问题讨论】:

  • 这似乎与页面上是否出现某种类型的元素有关。 PrinterJob 为每个 pageIndex 调用 print() 两次。第一次,它传入一个 sun.print.PeekGraphics 作为图形对象。第二次,它传入一个 apple.awt.CPrinterGraphics 对象。 PeekGraphics 是一个“试运行”,看看我会做什么样的绘制操作。显然,如果完成某种类型的绘制操作,颜色会变为较暗的变体。不确定该操作类型到底是什么。

标签: java pdf colors itext


【解决方案1】:

颜色较深的页面的问题在于它们包含带有透明图像的图案对象。当涉及透明度时,Adobe Acrobat 会自动切换到自定义 CMYK 配置文件,这会导致颜色变深。只有 Acrobat 这样做,其他查看器表现得很好。解决方案是要么用透明图像移除图案对象(它似乎是 PDF 生成器引擎的绘图神器,页面上的任何地方都没有使用它)或者你可以使页面成为透明度组的一部分并指定透明度组以使用 RGB 颜色空间。

【讨论】:

【解决方案2】:

有几种不同的可能性,是的。

  1. 不同的颜色匹配。如果您在一个页面上使用“校准”色彩空间,而在另一个页面上使用“设备”色彩空间,相同的 RGB/CMYK 值可能会产生视觉上不同的值。

  2. 如果图形位于 Form XObject 内,则同一图形可能会根据绘制表单时的当前图形状态而呈现不同。

如果您可以发布指向您的 PDF 的链接,我可能会给您一个具体的答案。


哎哟。那个PDF很难通过。我想和编写 PDF 转换器的人谈谈。苛刻的。大量不必要的剪辑(“文本”被到处剪辑,例如,第 7 页),图像模式使用不当,但实际上有帮助时不使用模式,将文本绘制为路径,等等......

编辑:这正是您在通过 PdfGraphics2D 对象呈现 Java UI 时看到的那种东西。您可以将文本保留为文本。这只是您如何创建 PdfGraphics2D 实例的问题。

好的,所以线条本身的颜色是相同的。 0 1 0.4 RG。然而,有一些“透明的东西”正在发生。

在图像带有软蒙版或扩展图形状态会改变透明度的页面上,绿线会显得更暗。在没有的页面上,它看起来更亮。

我怀疑所有其他一直画线的 PDF 查看器根本不支持透明度,或者只支持很差。

【讨论】:

  • 谢谢马克,我当然没有指定任何色彩空间,我正在将 Swing 组件打印到 Graphics 对象。这可能不是 iText 问题,因为如果我调用本机 OS X 打印对话框并点击“预览”,我会看到同样的情况。
  • 发布了指向相关 PDF 的链接。
  • 马克,感谢您浏览此 PDF 格式。非常好的信息。现在,我按照 Sorin 的建议强制使用色彩空间。将来我可能会尝试检测打印何时发生并禁用透明度。对将文本呈现为文本而不是路径感到好奇,我注意到 find 操作在生成的 PDF 中是无用的。
  • PdfContentByte 创建PdfGrahics2D 时,应避免使用createGraphics 的“形状”版本。您可能需要做一些额外的AWT Font->PDF Font 工作,但这些事情通常由iText 通过DefaultFontMapper 自动处理。采用 FontMapper 的 createGrahics 的覆盖将允许您继承 DefaultFontMapper 以添加可能需要的任何特殊调味料。
  • 终于从 Shapes 切换了,PDf 的输出要好得多。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2018-03-22
  • 1970-01-01
相关资源
最近更新 更多