【问题标题】:Set Page level transparency blending color space to Device RGB将页面级别透明度混合颜色空间设置为设备 RGB
【发布时间】:2019-02-13 03:54:29
【问题描述】:

我的要求是将页面级透明度混合颜色空间设置为设备 RGB。我正在尝试使用 pdfBox 来实现这一点。 屏幕截图来自 Adob​​e Acrobat 阅读器(印刷制作 -> 展平预览器 -> 更改页面级别透明度颜色空间),您可以在其中从下拉列表中设置值。

我尝试使用 PDFBOX 的 PDGraphicState 设置混合模式。实现屏幕截图中显示的页面级别透明度是否正确?

PDGraphicsState gState = new PDGraphicsState(page.getArtBox());
gState.setBlendMode(BlendMode.OVERLAY);
PDExtendedGraphicsState pde = new PDExtendedGraphicsState();
pde.copyIntoGraphicsState(gState);
final COSName blendMode =page.getResources().add(pde);

但这不起作用。 我还有一些其他代码使用“PDExtendedGraphicState”

将使用 page.getResources().add(graphicsState) 添加到页面 但是 PDExtendedGraphicState 没有任何方法来设置混合模式。 所以我创建了新的 PDExtendedGraphicState 对象并执行了“copyIntoGraphicsState”。

是我遗漏了什么还是方法不对?

提前致谢。

编辑
之前 在 Adob​​e acrobat Pro DC 中打开文件。打开:工具 -> 印刷制作 -> 输出预览。尝试打开和关闭输出预览。你可以看到颜色变化。 Before

之后 在 Acrobat Pro DC 中打开相同的文件 (Before.pdf)。打开:工具 -> 印刷制作 -> 压平器预览 -> 查找页面级透明度混合色彩空间(见截图) -> 更改 -> 从下拉列表中选择设备 RGB -> 应用。现在您将获得我在此处添加的 after.pdf。 在此之后,如果您按上述方式打开输出预览,您将看不到颜色的变化。
After

【问题讨论】:

  • 您的问题显然是关于 pdfbox,而不是 itext。所以我删除了itext 标签。

标签: pdf pdf-generation pdfbox acrobat


【解决方案1】:

我认为这里的部分问题是存在混合模式(正常、变暗、乘法、颜色加深等),然后是页面级透明度混合颜色空间(DeviceRGB 或 DeviceCMYK)。后者可以在 InDesign 中设置(有一个菜单项),但这里需要使用 PDFBox 或其他工具设置此参数。因此,它不是叠印或混合模式,而是设置色彩空间(在要修改的 OP 的 PDF 中设置为“无”)。

在我的测试中,如果此设置设置为“无”,则两个 RGB 对象之间的透明度混合无法正常工作,如果设置为“DeviceRGB”或适当的 RGB 颜色空间且叠印或混合没有更改,则可以正常工作模式。

Enfocus PitStop Pro 和 Callas pdfToolbox 似乎都可以设置此参数,但如果 PDFBox 也可以这样做,那将很有用。

【讨论】:

  • 实际上它不是一个简单的“参数”,尽管 InDesign 可能让它看起来那样。如果有术语“页面级透明度混合颜色空间”含义的技术规范,则可以在 PDFBox 中实现这一点。不幸的是,“透明度混合色彩空间”在 PDF 规范中并未作为术语被发现。
  • PDF 参考 v.1.7 中的第 7.2.3 节讨论了混合色彩空间。但是,我不确定这与 PDF 规范有何对应关系。 archimedespalimpsest.net/Documents/External/…
  • 确实如此。在 PDF 规范 ISO 32000-1 中,讨论在第 11.3.4 节中。之后混合色彩空间应该是一个对象被绘制在其中的透明度组的一个属性。页面作为一个整体也应被视为一个组,即页面组(参见“页面组”),具有它自己的颜色空间属性。 所以我们假设我们在这里讨论的颜色空间是页面透明度组字典中的一组。但是对于 OP 的“After.pdf”,该页面没有 Group 条目。哦!
  • 通过跟进,我的特定问题通过将相关资产(而不是整个文档)的混合 colo(u)rspace 设置为 DeviceRGB 来解决。有趣的是,Acrobat Pro DC 不能正确“输出预览”颜色,但印刷机可以正确打印。感谢您的反馈,在这里学习很好。
【解决方案2】:

将 DeviceRGB 设置为文档的透明度混合色彩空间。我们使用过:

group.setItem(COSName.S, COSName.TRANSPARENCY);
group.setItem(COSName.CS, COSName.DEVICERGB);
page.getCOSObject().setItem(COSName.GROUP, group)

这解决了问题。 感谢大家提出不同的方法。

【讨论】:

  • 虽然这是我在约翰回答后的假设,但请参阅我的 cmets,这不是 Adob​​e Acrobat 对您的示例文件所做的。哦,好吧,通往罗马的道路很多......
猜你喜欢
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2017-09-23
  • 2020-03-03
  • 2014-01-24
相关资源
最近更新 更多