【问题标题】:Embed ICC color profile in PDF在 PDF 中嵌入 ICC 颜色配置文件
【发布时间】:2015-10-14 00:08:53
【问题描述】:

我正在生成一个 PDF,其中所有图形都在 sRGB 颜色空间中的 \DeviceRGB 中绘制。我想使用 ICC 配置文件将 PDF 转换为不同的颜色配置文件并嵌入 ICC 配置文件,但我找不到执行此操作的好工具。

我尝试过 ImageMagick,但它会光栅化 PDF,这是不受欢迎的,我尝试过使用 Ghostscript。但是,虽然这会转换颜色,但它不会嵌入 ICC 配置文件。

是否有任何适用于 Linux 的工具或库(最好是 Java 或 Scala)可以满足我的需求?

我尝试过的 Ghostscript 命令是:

gs -o cmyk.pdf -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite \
   -dOverrideICC=true -sOutputICCProfile=CoatedFOGRA27.icc \
   -dRenderIntent=3 in.pdf

gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -ColorConversionStrategy=CMYK \
   -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedFOGRA27.icc \
   -sOutputFile=cmyk.pdf in.pdf 

以及上述的几种变体。我已经尝试过 Ghostscript 9.10 版和 9.16 版。

【问题讨论】:

  • 您的配置文件CoatedFOGRA27.icc 确实位于您执行shell 命令的目录中?否则,它必须位于 Ghostscript 的默认搜索路径之一中,如 gs -h 报告的那样。
  • 是的,它在我执行命令的目录中。

标签: linux pdf ghostscript color-profile color-management


【解决方案1】:

使用 Ghostscript v9.16 或更高版本:

阅读有关 ICC 颜色配置文件支持的文档,可在此处获得:

以下是转换色彩空间和嵌入 ICC 配置文件的可能命令:

gs -o cmyk-doc.pdf      \
   -sDEVICE=pdfwrite    \
   -dOverrideICC=true   \
   -sDefaultCMYKProfile=/path/to/mycmykprofile.icc \
   -sOutputICCProfile=/path/to/mydeviceprofile.icc \
   -dRenderIntent=3     \
   -dDeviceGrayToK=true \
    input-doc.pdf

-dRenderIntent:可能的参数是0(感知)、1(色度)、2(饱和度)和3(绝对色度)。)

注意事项

如果您在屏幕上(或打印时在纸上)查看使用上述命令转换的 PDF 文件并使用:

  • 未校准的显示器/屏幕;
  • 未校准的打印设备;
  • 未校准的室内照明;或
  • 无法处理嵌入式 ICC 配置文件的 PDF 阅读器,然后

你可能会失望。使用与输出配置文件所期望的不匹配的错误 ICC 配置文件或纸张类型也会导致问题。

【讨论】:

  • gs -version: GPL Ghostscript 9.16 (2015-03-30) 为了检查 ICC 配置文件,我解压缩 pdf 并搜索 ICCBased 和我使用的配置文件的名称。
  • @KurtPfeifle This 看起来此命令不应嵌入颜色配置文件。另外,我可以确认this method 仅显示“ColorSpace: DeviceCMYK”(对于转换前为 RGB 的表格单元格填充颜色)。此外,我必须添加 -sProcessColorModel=DeviceCMYK 以使命令完成而不会出现错误,并添加 -sColorConversionStrategy=CMYK 以实际转换我拥有的 RGB 颜色。我使用 gs 9.26 版。
  • @VarunJoshi,我怀疑我可以为 KenS 的that 回答添加任何有用的信息。事实上,只有一小部分色彩管理选项is supported for pdf output
  • -sDefaultCMYKProfile 无效 - 它与 input (不是 CMYK)有关; -sOutputICCProfile-dRenderIntent have no effect 除非会发生光栅化; -dDeviceGrayToK - 可能一样; -dOverrideICC=true 通常是不可取的并且没有效果,因为问题是关于 DeviceRGB 输入。
【解决方案2】:

AFAIU,Ghostscript 9.12-9.27 无法达到您的预期。
但您或许能够部分实现您的目标:

  • 试试UseDeviceIndependentColor
    这不会嵌入您的个人资料,也不会将颜色转换为您的个人资料。但它会使您的颜色“按色度定义”并嵌入 一些 icc 配置文件。如果您的目标是“保留”颜色,那可能对您有用。

  • 尝试PDF/X-3 输出,嵌入“输出意图”icc 配置文件。

  • 尝试调整DefaultRGB colorspace - 请注意docs 中的以下短语:

    如果用户需要不平凡的颜色调整,则必须定义不平凡的 DefaultRGB 颜色空间

    (我从未尝试过。)

  • 试试collink。 (我已经 never managed 来完成这项工作。)

一个玩具示例

原始文件:

gs 命令:

 gswin64c -dPDFX -dBATCH -dNOPAUSE -dHaveTransparency=false -r20 
  -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=UseDeviceIndependentColor 
  -sDefaultRGBProfile="default_rgb.icc" -sOutputICCProfile="cmyk_des_renderintent.icc" 
  -dRenderIntent=1 -dDefaultRenderingIntent=/Perceptual -sDEVICE=pdfwrite 
  -sOutputFile=colorbar_v1.pdf PDFX_IntCmyk.ps Colorbar.pdf

Adobe Acrobat 中的输出如下所示(它采用嵌入的“输出意图”icc 配置文件):

福昕阅读器中的相同文件(它忽略嵌入的“输出意图”):

这里发生了什么:

  • cmyk_des_renderintent.icc 个人资料,如"Ghostscript 9.21 Color Management" 中所述, 被设计成不同的意图输出不同的颜色:
    • “感知”渲染意图 (0) 仅输出青色,
    • “RelativeColorimetric”意图 (1) 仅输出洋红色
    • “饱和度”渲染意图 (2) 仅输出黄色。
  • -dHaveTransparency=false 确保第二页会被光栅化(由于存在具有透明度的 tikz pic)
  • -r20 确保光栅化清晰可见(由于只有 20dpi)
  • -sOutputICCProfile="cmyk_des_renderintent.icc" -dRenderIntent=1 使光栅化器产生洋红色输出。
    • 注意OutputICCProfile参数在current docs中没有提到, 因为this9.27 docs 有点过时了)。
    • RenderIntent 在这种情况下也没有记录。它也只会影响光栅化。
  • -dDefaultRenderingIntent=/Perceptual 将所述意图与“输出意图 icc 配置文件”放在一起。这使得 Acrobat 以青色绘制所有内容。
  • -sDefaultRGBProfile="default_rgb.icc" 是一个占位符,用于使用输入 icc 配置文件进行可能的实验。如果省略此参数,则设置相同的默认值。
    如果您知道您的输入配置文件是 sRGB(但它没有嵌入 - pdf 是普通的 \DefaultRGB),那么在此处明确指定配置文件可能是个好主意。 即使 sRGB 是默认值。
  • 我使用修改后的gs/lib/PDFX_def.ps 来自 Ghostscript 存储库,其中嵌入了 cmyk_des_renderintent.icc 作为“输出意图”。

您可以找到本实验中使用的所有文件here。 还有其他几个实验。 我创建它们是为了了解色彩管理在 gs 中的工作原理。我希望他们对这个问题有所了解。 还有一个与 Adob​​e Acrobat“转换颜色”工具的比较。 AFAIU,它完全符合您的预期。

当谈到 pdf 输出的颜色管理时,KenS (gs dev) 通常says “pdfwrite 设备会竭尽全力保持输入的颜色规范在输出中不变”。在这种情况下,他们似乎并没有真正关注从一个配置文件到另一个配置文件的转换。嗯...这几乎不是“最需要的”功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2010-09-27
    • 1970-01-01
    • 2012-03-08
    • 2017-11-17
    相关资源
    最近更新 更多