当前位置: 首页 > 面试题库 >

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

祝昊东
2023-03-14
问题内容

我很难让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 ...
部分,则几乎会发生同样的情况。但是,如果文档中只有一种颜色(黑色),我看不到identifyRGB值的直方图在哪里出现(尽管可以说所有这些都接近于灰色)?

因此不要紧,我虽然最好尝试ghostscript将转换test.pdf为新的pdf,但该pdf会被CMYK识别identify-但即使如此,也没有运气:

$ 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海报例如:安装PDF页面大小为(位图)图像尺寸?#17843-TeX-LaTeX-Stack
Exchange,其中提供了使用convert和生成此类PDF文件的命令行示例gs。实际上,我们可以执行:

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

…,这 产生一个将被identify编辑为CMYK的PDF-但是,该PDF也将被光栅化(默认为72 dpi)。

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

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

…实际上将产生CMYK pdf,其报告如下identify(尽管在所有四个通道上,黑色都将丰富而不是纯色);但是,此命令
在幻灯片具有添加的图像 时才有效 (显然,它是触发颜色转换的图像!!)!有趣的是,我无法从pdflatexPDF中获得相同的效果。

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

  • Linux中是否有任何命令行转换方法,可以将RGB pdf转换为CMYK pdf并保留矢量,因此可以识别这种格式identify(因此将建立正确的CMYK颜色直方图)
  • 是否有任何其他的命令行Linux工具类似identify,这将承认使用CMYK颜色,即使正确地在原来test.pdfpdflatex以及可能建立一个颜色直方图,基于任意选择的PDF页面上,就像identify是应该)?

预先感谢您的任何回答,


问题答案:

sdaau,您用于尝试将PDF转换为CMYK的命令不正确。尝试以下一项:

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

更新资料

如果颜色转换无法正常工作,并且您看到类似 “无法将颜色空间转换为灰色,将策略还原为LeaveColorUnchanged”的消息, 则…

  1. 您的Ghostscript可能是 9.x版本系列 的较新 版本 ,并且
  2. 您的源PDF可能使用了嵌入式 ICC颜色配置文件

在这种情况下,请添加 -dOverrideICC 到命令行,然后查看它是否根据需要更改了结果。

更新2

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

-dEncodeColorImages=false

进入命令行。

(这对几乎所有GS PDF- >
PDF_处理都是正确的,而不仅是在这种情况下。因为默认情况下,GS会在要求生成PDF输出时使用新建对象和新文件结构创建一个全新文件,但不会简单地重新使用以前的对象,更多的“哑”
PDF处理器一样pdftk
{pdftk还有其他的好处不过,别误会我的发言!} GS默认为使用JPEG压缩-在当前的外观
PS2PDF文档
和搜索
“ ColorImageFilter”_ 以了解更多详细信息…)



 类似资料:
  • 我正在尝试使用Latex创建PDF文件。但是,Latex不处理TIFF或任何其他能够同时透明和CMYK的图像格式。我认为我可以使用的唯一解决方案是将PNG图像转换为PDF并将其嵌入到文件中。 我对imagemagick有点熟悉,但是,我不知道如何将PNG(可能在RGB/SRGB颜色空间中)转换为CMYK颜色空间中的PDF。 我如何进行这种转换,使颜色正确,透明度保持不变?

  • 问题内容: 我读这篇文章了解如何将PDF转换为CMYK,但是当我试图接受的解决方案 如果我的原始pdf文件不包含图片,则不会获得具有CMYK颜色空间的pdf文件。如果在其中添加图片,我将得到正确的结果(已选中)。 例如,如果我用一个矩形创建一个svg,将其导出为pdf,然后使用ghostscript命令,则它在sRBG颜色空间中仍会得到一个pdf。但是,如果我在svg中添加图片,则效果很好。 解决

  • 问题内容: 如果我有RGB小数,例如,我该怎么做才能将其转换为CMYK? 例如: 问题答案: 这是Javascript实现的Python端口。

  • 问题内容: 我正在尝试实现一种解决方案,用于计算RGB和CMYK之间的转换,反之亦然。这是我到目前为止的内容: 问题答案: 正如Lea Verou所说,您应该利用色彩空间信息,因为没有从RGB映射到CMYK的算法。Adobe有一些ICC颜色配置文件可供下载1,但是我不确定它们是如何获得许可的。 获得颜色配置文件后,将执行以下操作:

  • 如何添加字体: HTML: 我是如何创建PDF的: 当使用不同的编码(例如:WINANSI)时,第一行文本可以正确呈现,但第二行显然不能。我真的需要能够创建UNICODE(IDENTITY-H)PDF。 您可以使用以下链接下载结果pdf:download pdf from dropbox 非常感谢任何帮助。 更新:显然这与iText或飞碟无关。我们的Maven构建了一个单独的fat jar,字体也

  • 我有一个pdf文件(附件)。我的目标是使用pdfbox将pdf转换为图像(与在windows中使用剪切工具相同)。pdf有各种形状和文本。 我使用的代码如下: 我如何让pdfbox采取像直接快照图像的东西? 另外,我注意到png的图像质量不太好,有没有办法提高生成图像的分辨率? 编辑:这是pdf(见第68页)https://drive.google.com/file/d/0B0ZiP71EQHz2