将PDF转换为CMYK(带有识别CMYK的标识)

问题描述 投票:25回答:5

[让ImageMagick的identify很难将PDF识别为CMYK感到很麻烦。

基本上,假设我要使用test.tex构建此文件pdflatex

\documentclass[a4paper,12pt]{article}

%% https://tex.stackexchange.com/questions/13071
\pdfcompresslevel=0

%% http://compgroups.net/comp.text.tex/Making-a-cmyk-PDF
%% ln -s /usr/share/color/icc/sRGB.icm .
% \immediate\pdfobj stream attr{/N 4} file{sRGB.icm}
% \pdfcatalog{%
% /OutputIntents [ <<
% /Type /OutputIntent
% /S/GTS_PDFA1
% /DestOutputProfile \the\pdflastobj\space 0 R
% /OutputConditionIdentifier (sRGB IEC61966-2.1)
% /Info(sRGB IEC61966-2.1)
% >> ]
% }

%% http://latex-my.blogspot.com/2010/02/cmyk-output-for-commercial-printing.html
%% https://tex.stackexchange.com/questions/9961
\usepackage[cmyk]{xcolor}

\begin{document}
Some text here...
\end{document}

[如果我随后尝试识别生成的test.pdf文件,则无论我尝试了什么选项(至少根据源中的链接),我都会将其获取为RGB-但是,其中的颜色将是另存为CMYK;对于上面的源:

$ grep -ia 'cmyk\|rgb\| k' test.pdf 
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0)

$ identify -verbose 'test.pdf[0]'
...
  Type: Palette
  Endianess: Undefined
  Colorspace: RGB
  Depth: 16/8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Red:
...
    Green:
...
    Blue:
...
  Histogram:
         5: (12593,11565,11822) #31312D2D2E2E rgb(49,45,46)
         4: (16448,15420,15677) #40403C3C3D3D rgb(64,60,61)
         9: (20303,19275,19532) #4F4F4B4B4C4C rgb(79,75,76)
        25: (23901,23130,23387) #5D5D5A5A5B5B rgb(93,90,91)
...

如果我也取消对\immediate\pdfobj stream ...的评论,也会发生同样的情况部分;但是,如果文档中只有一种颜色(黑色),我看不到identify的RGB值直方图在哪里(尽管可以说,它们都接近于灰色)?

所以请不要介意,尽管我最好尝试使用ghostscripttest.pdf转换为新的pdf,identify会将其识别为CMYK,但即使这样也没有运气:

$ gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite  -sOutputFile=test-gs.pdf -dUseCIEColor -sProcessColorModel=DeviceRGB -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=/CMYK test.pdf 

GPL Ghostscript 9.01 (2011-02-07)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1


$ identify -verbose 'test-gs.pdf[0]'
...
  Type: Grayscale
  Base type: Grayscale
  Endianess: Undefined
  Colorspace: RGB
  Depth: 16/8-bit
...

因此identify唯一被视为变化的是Type: Grayscale(来自先前的Type: Palette);但否则仍然会看到RGB颜色空间!

此外,请注意identify 能够正确报告CMYK pdf-有关使用CMYK poster example: fitting pdf page size to (bitmap) image size? #17843 - TeX - LaTeX - Stack Exchangeconvert生成此类PDF文件的命令行示例,请参见gs。实际上,我们可以执行:

convert test.pdf -depth 8 -colorspace cmyk -alpha Off test-c.pdf

...并且此will的PDF结果为identify作为CMYK-但是,该PDF也将被光栅化(默认为72 dpi)。

编辑:我刚刚发现,如果我在OpenOffice中创建一个.odp演示文稿,然后将其导出为PDF;该PDF默认为RGB,但是以下命令(来自ghostscript Examples | Production Monkeys):

# Color PDF to CMYK:
gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf

...实际上将产生CMYK pdf,由identify报告(尽管在所有四个通道上,黑色都将丰富而不是纯色);但是,当幻灯片具有添加的图像时(显然,这是触发颜色转换的图像!!),此命令将仅适用[[only!有趣的是,我无法从pdflatex PDF中获得相同的效果。

所以我想我的问题可以通过两种方式提出:

    Linux中是否有任何命令行转换方法,可以将RGB pdf转换为CMYK pdf,同时保留矢量,在identify中被识别(因此将建立正确的CMYK颜色直方图)
  • [还有没有其他类似于identify的命令行Linux工具,即使在test.pdf中的原始pdflatex中,它也可以正确识别CMYK颜色的使用(
  • 并且可能基于任意地建立颜色直方图选择的PDF页面,例如identify应该是
)?谢谢您的回答,干杯!

一些参考:

linux pdf imagemagick ghostscript cmyk
5个回答
26
投票
sdaau,您用于尝试将PDF转换为CMYK的命令不正确。试试这个吧:

gs \ -o test-cmyk.pdf \ -sDEVICE=pdfwrite \ -sProcessColorModel=DeviceCMYK \ -sColorConversionStrategy=CMYK \ -sColorConversionStrategyForImages=CMYK \ test.pdf


更新

如果颜色转换无法按需工作,并且您看到类似

“无法将颜色空间转换为灰度,将策略恢复为LeaveColorUnchanged”的消息,然后...

    您的Ghostscript可能是
  1. 9.x版本系列

和的较新版本。您的源PDF可能使用嵌入的
  • ICC颜色配置文件
  • 在这种情况下,在命令行中添加

    -dOverrideICC并查看它是否根据需要更改结果。


    更新2

    为了避免图像中出现JPEG artifacts appearing(以前没有),请添加:

    -dEncodeColorImages=false

    进入命令行。 

    (对于几乎所有的GS

    PDF-> PDF

    处理都是正确的,不仅限于这种情况。因为默认情况下,GS会在被要求生成PDF输出时创建具有全新构造的对象和新文件结构的全新文件-它不会简单地重用先前的对象,因为像pdftk这样的更“笨拙”的PDF处理器{pdftk还有其他优点,请不要误解我的说法!}。GS默认情况下应用JPEG压缩-查看当前Ps2pdf documentation并搜索“ ColorImageFilter”以了解更多详细信息...)

    6
    投票
    我有一个不相关的问题,但目前我也在努力处理CMYK PDF。

    4
    投票
    好吧,这是至少,...

    2
    投票
    我也为此感到发疯。我确实尝试了@tbart的示例,但它仅适用于某些输入pdf(似乎已经包含图像,是否包含rgb?),而不适用于其他输入pdf。具体来说,让我们来看看这个超级简单的ps文件:

    1
    投票
    由于我在队列中还有另一个打印作业,因此再次使用PDF / X-3重新进行CMYK转换,使我发现以下内容:
    © www.soinside.com 2019 - 2024. All rights reserved.