Converting PDF to CMYK (with identify recognizing CMYK)

32,261

Solution 1

sdaau, the command you used for trying to convert your PDF to CMYK was not correct. Try this one instead:

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

Update

If color conversion does not work as desired and if you see a message like "Unable to convert color space to Gray, reverting strategy to LeaveColorUnchanged" then...

  1. your Ghostscript probably is a newer release from the 9.x version series, and
  2. your source PDF likely uses an embedded ICC color profile

In this case add -dOverrideICC to the command line and see if it changes the result as desired.


Update 2

To avoid JPEG artifacts appearing in the images (where there were none before), add:

-dEncodeColorImages=false

into the command line.

(This is true for almost all GS PDF->PDF processing, not just for this case. Because GS by default creates a completely new file with newly constructed objects and a new file structure when asked to produce PDF output -- it doesn't simply re-use the previous objects, as a more "dumb" PDF processor like pdftk does {pdftk has other advantages though, don't misunderstand my statement!}. GS applies JPEG compression by default -- look at the current Ps2pdf documentation and search for "ColorImageFilter" to learn about more details...)

Solution 2

I have an unrelated problem but I am also struggling with CMYK PDFs currently.

I wrote this little script here (it's called pdf2pdfx):

#!/bin/bash

gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-dProcessColorModel=/DeviceCMYK \
-dPDFSETTINGS=/prepress \
-sOutputFile="${1%%.pdf}_X-3.pdf" \
PDFX_def.ps \
"$1"

and my PDFX_def.ps contains the following (I removed the ICC profile and defined FOGRA39, this should be OK):

%!
% $Id$
% This is a sample prefix file for creating a PDF/X-3 document.
% Feel free to modify entries marked with "Customize".

% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.

systemdict /ProcessColorModel known {
  systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
} {
  true
} ifelse
{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
  /ProcessColorModel cvx /rangecheck signalerror
} if

% Define entries to the document Info dictionary :

% /ICCProfile (/usr/share/color/icc/ISOcoated_v2_300_eci.icc) def  % Customize or remove.

[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
  /Title (Title)                  % Customize.
  /Trapped /False                 % Must be so (Ghostscript doesn't provide other).
  /DOCINFO pdfmark

% Define an ICC profile :

currentdict /ICCProfile known {
  [/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
  [{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
  [{icc_PDFX} ICCProfile (r) file /PUT pdfmark
} if

% Define the output intent dictionary :

[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
  /Type /OutputIntent              % Must be so (the standard requires).
  /S /GTS_PDFX                     % Must be so (the standard requires).
  /OutputCondition (Commercial and specialty printing) % Customize
  /Info (none)                     % Customize
  /OutputConditionIdentifier (FOGRA39)      % Customize
  /RegistryName (http://www.color.org)   % Must be so (the standard requires).
  currentdict /ICCProfile known {
    /DestOutputProfile {icc_PDFX}  % Must be so (see above).
  } if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark

Identify then correctly reports CMYK colorspace. Before:

tbart@blackknight ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print.pdf
Image: action_schulungsvideo_v3_print.pdf
  Format: PDF (Portable Document Format)
  Class: DirectClass
  Geometry: 612x859+0+0
  Resolution: 72x72
  Print size: 8.5x11.9306
  Units: Undefined
  Type: TrueColor
  Endianess: Undefined
  Colorspace: RGB
  Depth: 16/8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Red:
      min: 0 (0)
      max: 65535 (1)
      mean: 53873.6 (0.822058)
      standard deviation: 19276.7 (0.294144)
      kurtosis: 1.854
      skewness: -1.82565
    Green:
      min: 0 (0)
      max: 65535 (1)
      mean: 55385.6 (0.84513)
      standard deviation: 19274.6 (0.294112)
      kurtosis: 2.09868
      skewness: -1.91651
    Blue:
      min: 0 (0)
      max: 65535 (1)
      mean: 51020 (0.778516)
      standard deviation: 20077.7 (0.306367)
      kurtosis: 0.860627
      skewness: -1.52344
  Image statistics:
    Overall:
      min: 0 (0)
      max: 65535 (1)
      mean: 53426.4 (0.815235)
      standard deviation: 19546.7 (0.298263)
      kurtosis: 1.59453
      skewness: -1.75701
  Rendering intent: Undefined
  Interlace: None
  Background color: white
  Border color: rgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Compose: Over
  Page geometry: 612x859+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Undefined
  Orientation: Undefined
  Properties:
    date:create: 2011-09-14T15:38:57+02:00
    date:modify: 2011-09-14T15:38:57+02:00
    pdf:HiResBoundingBox: 612.283x858.898+0+0
    pdf:Version: PDF-1.5 
    signature: 210bfc9cf90e3b9505385f8b2267da1665b5c2de28bb5223311afba01718bbeb
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 1.577MBB
  Number pixels: 526KB
  Pixels per second: 52.57MB
  User time: 0.020u
  Elapsed time: 0:01.009
  Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org

after:

tbart@blackknight ~/orpheus/werbung/action $ pdf2pdfx action_schulungsvideo_v3_print.pdf
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 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


tbart@blackknight ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print_X-3.pdf 
Image: action_schulungsvideo_v3_print_X-3.pdf
  Format: PDF (Portable Document Format)
  Class: DirectClass
  Geometry: 612x859+0+0
  Resolution: 72x72
  Print size: 8.5x11.9306
  Units: Undefined
  Type: ColorSeparation
  Base type: ColorSeparation
  Endianess: Undefined
  Colorspace: CMYK
  Depth: 16/8-bit
  Channel depth:
    cyan: 8-bit
    magenta: 8-bit
    yellow: 8-bit
    black: 8-bit
  Channel statistics:
    Cyan:
      min: 0 (0)
      max: 65535 (1)
      mean: 8331.78 (0.127135)
      standard deviation: 14902.2 (0.227392)
      kurtosis: 1.62171
      skewness: 1.7799
    Magenta:
      min: 0 (0)
      max: 62194 (0.94902)
      mean: 6739.34 (0.102836)
      standard deviation: 14517.5 (0.221523)
      kurtosis: 2.08183
      skewness: 1.93276
    Yellow:
      min: 0 (0)
      max: 65535 (1)
      mean: 13310.1 (0.203098)
      standard deviation: 17022.5 (0.259746)
      kurtosis: 0.991135
      skewness: 1.45216
    Black:
      min: 0 (0)
      max: 56540 (0.862745)
      mean: 7117.47 (0.108606)
      standard deviation: 16803.7 (0.256408)
      kurtosis: 3.02752
      skewness: 2.16554
  Image statistics:
    Overall:
      min: 0 (0)
      max: 65535 (1)
      mean: 8874.66 (0.135419)
      standard deviation: 15850.6 (0.241864)
      kurtosis: 2.17614
      skewness: 1.88139
  Total ink density: 292%
  Rendering intent: Undefined
  Interlace: None
  Background color: white
  Border color: cmyk(223,223,223,0)
  Matte color: grey74
  Transparent color: black
  Compose: Over
  Page geometry: 612x859+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Undefined
  Orientation: Undefined
  Properties:
    date:create: 2011-09-14T15:39:30+02:00
    date:modify: 2011-09-14T15:39:30+02:00
    pdf:HiResBoundingBox: 612.28x858.9+0+0
    pdf:Version: PDF-1.3 
    signature: 0416db7487ea147b974ece5748bc4284e82bfc3fb7cd07a4de050421ba112076
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 2.103MBB
  Number pixels: 526KB
  Pixels per second: 5.25708PB
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org

This is on 64bit Gentoo with gs 9.04 Maybe that helps?

Source PDF stems from inkscape pdf export, colors were restricted to those covered in ECI ISO coated v2. I use this as a workaround for the lacking CMYK export of inkscape and the lacking prepress-ready PDF/X output...

Solution 3

Ok, here is something, at least...

Originally, I need this as a way to make sure that my PDF files are in CMYK, and have the text as "plain black" C:0, M:0, Y:0, K:100 - since I've had problems with printers previously, where they would complain about my Latex PDFs containing "rich black" for text (which thus cost more). And I usually go for identify since it seems to be the only tool that can parse PDFs and colors (and it is also relatively easy to remember).

Well, I read through Tech Tip: Using Ghostscript to Convert and Combine Files | Linux Journal; where it is recommended to use the tiffsep device of gs to obtain separations. And this for me fulfills the same role as identify; I can just do:

$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 -sOutputFile=p%08d.tif test.pdf 

$ ls p*
p00000001.Black.tif  p00000001.Magenta.tif  p00000001.Yellow.tif  p00000001.Cyan.tif   p00000001.tif

$ eog p00000001.tif

... and then I can just 'iterate' through the separation images using left/right arrow - and it is immediately obvious if it is 'plain black' or 'rich black'.

So this shows that, regardless of what identify shows, the test.pdf from pdflatex actually has 'plain black' as text color, as it is supposed to (the other separations are blank) - however, doing something like:

# do a conversion of original PDF
$ gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile=out_pdfa.pdf test.pdf

# do a separation on the converted pdf
$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 \
  -dFirstPage=1 -dLastPage=1 -sOutputFile=p%08d.tif out_pdfa.pdf

# view
$ eog p00000001.tif

... will reveal that the particular out_pdfa.pdf actually has 'rich black' - i.e. ink for text goes over all four separations! (identify also shows this one as RGB, too).

So, I hope that this gs/tiffsep technique is more reliable than identify :)

 

Note: I'm using Ubuntu Natty, which ships GhostScript 9.01 - however, that one has a nasty bug with tiffsep: Bug 691857 – tiffsep crashes in Version 9 (missing lab.icc). That has been fixed for 9.02 - and 9.02 has been released as ghostscript in oneiric. To use 9.02 under Natty, I followed how to update a single package using apt-get? - Ubuntu Forums:

sudo nano /etc/apt/sources.list # add deb http://archive.ubuntu.com/ubuntu/ oneiric main restricted
sudo apt-get update
sudo apt-get install ghostscript # this upgrades only gs and dependencies 
sudo nano /etc/apt/sources.list  # remove/comment oneiric repo
sudo apt-get update && sudo apt-get upgrade # should be back to normal here

Note that with the buggy 9.01 version, even this command would fail:

$ GS_LIB=/usr/share/ghostscript/9.01/iccprofiles/ gs -sICCProfilesDir=/usr/share/ghostscript/9.01/iccprofiles/ -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -sOutputFile=p%08d.tif out_pdfa.pdf

...
sfopen: gs_parse_file_name failed.
sfopen: gs_parse_file_name failed.
... gsicc_open_search(): Could not find lab.icc ...

.. and with 9.02, there is no need to specify sICCProfilesDir explicitly.

Solution 4

I am also being driven insane by this. I tried @tbart's example exactly, but it only works for some input pdfs (seemingly containing images already, rgb or not?), and not others. Specifically, let's take this super simple ps file:

%!PS
/Times-Roman findfont 30 scalefont setfont
72 680 moveto
0.81 0.72 0 0 setcmykcolor
(This is text!) show
showpage

If I call this test1.ps, and then run this command (on windows, gs 9.14):

gswin64c -dEmbedAllFonts=true -dPDFX -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedGRACoL2006.icc   -sColorConversionStrategy=CMYK -sColorConversionStrategyForImages=CMYK -sOutputFile=test1.pdf PDFX_def.ps test1.ps

Replace gswin64c with gs if you're on linux/cygwin.

The CMYK ICC I'm using is in the PDFX_def.ps and in the command above. You can get it from here, but it's just a random ICC that moo wants for their cards, it doesn't seem special: http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=4075&fileID=3790

The test1.pdf output from this loads as a CMYK pdf in Illustrator, but identify -verbose says it's sRGB. If I do @sdaau's tiffsep thing it writes out the separations and they have the right values.

So, I dunno.

Can anybody get this ps file to convert to a CMYK pdf that identify recognizes?

Chris


Edit: whoa. I may have figured this out and fixed it. It looks like identify is just looking for a /ColorSpace /DeviceCMYK in the PDF file, so if I hack the PDFX_def.ps to output it, identify will call it CMYK. So, looking through the pdfs that worked, I found that if they had this line identify worked, and if not, they were incorrectly flagged as sRGB.

At the end of PDFX_def.ps, add the /ColorSpace /DeviceCMYK line:

[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
  /ColorSpace /DeviceCMYK          % convince ImageMagick's identify that it's CMYK
  /Type /OutputIntent              % Must be so (the standard requires).
  /S /GTS_PDFX                     % Must be so (the standard requires).
  /OutputCondition (Commercial and specialty printing) % Customize
  /Info (none)                     % Customize
  /OutputConditionIdentifier (CGATS TR 003)      % Customize
  /RegistryName (http://www.color.org)   % Must be so (the standard requires).
  currentdict /ICCProfile known {
    /DestOutputProfile {icc_PDFX}  % Must be so (see above).
  } if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark

Boom. I hope this doesn't do anything weird with compatibility or anything.

Solution 5

I found the command line for ghostscript to be quite confusing, and googling around for this gave a lot of similar, sometimes conflicting suggestions, most of which didn't work for me.

In my case, I'm starting with a purely black or white SVG (all vectors + text). Converting that to PDF with CairoSVG makes an RGB PDF.

The minimum ghostscript (version 9.50) command I found to perform the conversion to CMYK (or "single-plate" black only) is:

gs -q -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -o <output.pdf> <intput.pdf>

Notes:

  • -sColorConversionStrategy=Gray will make a "single-plate", black-only file (which is actually what I wanted in my case).
  • -o to set the output file is not the same as the -sOutputFile switch.
  • <input_file.pdf> cannot be the same file as <output_file.pdf>; you'll get a blank PDF if you do that.
  • In my case, I did not want to keep the intermediate RGB PDF that CairoSVG produced, so I did this: cairosvg <input_file.svg> -f pdf | gs -q -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -o <output_file.pdf> -; the - at the end of the ghostcript command tells it to take input from standard out.

To verify that I ended up with the PDF file I desired, I used Adobe Acrobat's Preflight check, as suggested here, for conversion to PDF/X format, which does not support RGB colors.

Share:
32,261

Related videos on Youtube

sdaau
Author by

sdaau

Updated on July 09, 2022

Comments

  • sdaau
    sdaau almost 2 years

    I am having much trouble to get ImageMagick's identify to, well, identify a PDF as CMYK.

    Essentially, let's say I'm building this file, test.tex, with 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}
    

    If I then try to identify the resulting test.pdf file, I get it as RGB, no matter what options I've tried (at least according to the links in the source) - and yet, the colors in it would be saved as CMYK; for the source above:

    $ 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)
    ...
    

    The same pretty much happens if I also uncomment that \immediate\pdfobj stream ... part; and yet, if there is only one color (black) in the document, I don't see where does identify come up with a histogram of RGB values (although, arguably, all of them close to gray) ?!

     

    So nevermind this, then I though I'd better try to use ghostscript to convert the test.pdf into a new pdf, which would be recognized as CMYK by identify - but no luck even there:

    $ 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
    ...
    

    So the only thing that identify perceived as a change, is Type: Grayscale (from previous Type: Palette); but otherwise it still sees an RGB colorspace!

    Along with this, note that identify is capable of correctly reporting a CMYK pdf - see CMYK poster example: fitting pdf page size to (bitmap) image size? #17843 - TeX - LaTeX - Stack Exchange for a command line example of generating such a PDF file using convert and gs. In fact, we can execute:

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

    ... and this will result with a PDF that will be identifyed as CMYK - however, the PDF will also be rasterized (default at 72 dpi).

    EDIT: I have just discovered, that if I create an .odp presentation in OpenOffice, and export it to PDF; that PDF will by default be RGB, however, the following command (from ghostscript Examples | Production Monkeys):

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

    ... actually will produce a CMYK pdf, reported as such by identify (although, the black will be rich, not plain - on all four channels); however, this command will work only when the slide has an added image (apparently, it is the one triggering the color conversion?!)! Funnily, I cannot get the same effect from a pdflatex PDF.

     

    So I guess my question can be asked two ways:

    • Are there any command-line conversion methods in Linux, that will convert an RGB pdf into a CMYK pdf while preserving vectors, which is recognized as such in identify (and will consequently build a correct histogram of CMYK colors)
    • Are there any other command-line Linux tools similar to identify, which would recognize use of CMYK colors correctly even in the original test.pdf from pdflatex (and possibly build a color histogram, based on an arbitrarily chosen PDF page, like identify is supposed to)?

    Thanks in advance for any answers,
    Cheers!

     

    Some references:

    • darda
      darda over 3 years
      I don't think identify is a good way to check the conversion succeeded. I take a PDF which identify claims uses the CMYK color space and check for compliance with PDF/X In Acrobat's Preflight features, which reveals that colors are still RGB. Moreover, if identify is part of ImageMagick then it's rasterizing the PDF so I'm not sure anything it says is reliable (I'm getting gray values in the histogram, but I have a purely white and black vector PDF, indicating that maybe some anti-aliasing is happening)
  • sdaau
    sdaau over 12 years
    Many thanks for this detailed answer & examples, @tbart - hope to be able to look at it as soon as the problem appears again :) Cheers!
  • JB.
    JB. over 10 years
    Beware, ghostscript 9.05 is really vicious and tries to open /usr/share/ghostscript/9.05/lib/PDFX_def.ps on ubuntu 12.04
  • Pedro M Duarte
    Pedro M Duarte over 9 years
    unfortunately when I do this my PDF becomes rasterized. Is there a way to avoid this?
  • sdaau
    sdaau about 9 years
    Thanks for that, @ChrisHecker - I'm yet to test it out, but nice to have this written... cheers!
  • johnp
    johnp over 7 years
    Will this method preserve vectors when converting them to CMYK, or do they need to be rasterized first?
  • johnp
    johnp over 7 years
    Will this method preserve vectors when converting them to CMYK, or do they need to be rasterized first?
  • Kurt Pfeifle
    Kurt Pfeifle over 7 years
    @johnp: But for your peace of mind -- yes, it will preserve vectors. You could verify that by creatively applying this answer to your PDF documents (before and after converting to CMYK).
  • Kurt Pfeifle
    Kurt Pfeifle over 7 years
    @PedroMDuarte: (1) identify is part of ImageMagick. (2) ImageMagick cannot process PDF input by itself (it can only process raster images directly) -- it exploits Ghostscript as its 'delegate' for all PDF input, even for identify-ing PDFs. (3) When ImageMagick gets PDF input, it calls Ghostscript to convert it to (a series of) full page raster images first, and then goes on to work on these. (4) You don't have direct control over the exact command ImageMagick uses to run Ghostscript (it may well re-convert CMYK input back to RGB in advertedly).
  • Varun Joshi
    Varun Joshi almost 5 years
    I tried this command with a pdf containing text only & some background colors. But identify says the pdf is sRGB colorspace
  • Kurt Pfeifle
    Kurt Pfeifle almost 5 years
    @VarunJoshi: The identify command is part of the ImageMagick suite of tools. ImageMagick cannot handle PDFs natively. Instead, it employs third-party tools (called "delegates") to convert the PDF pages into raster images first, and only then works on these raster images. (In the case of PDF, the delegate IM uses to convert it to raster images is Ghostscript.) Your statement is no proof at all that my command does not work as intended. You can disprove your statement yourself by running identify against a prooven-to-be-CMYK PDF of your own choice. It will also say it is sRGB.
  • Dave Jarvis
    Dave Jarvis about 4 years
    @KurtPfeifle: Invalid value for option -dProcessColorModel=DeviceCMYK -- does the latest version need to use /DeviceCMYK instead?
  • darda
    darda over 3 years
    What's the difference between -sProcessColorModel=DeviceCMYK and -dProcessColorModel=/DeviceCMYK? The former (as in your answer) did not convert my RGB PDF to CMYK as far as identify reports, but the latter does. (My PDF is created from a native, vector-only SVG using CairoSVG and only contains RGB black and white). All I needed in my case was gs -sDEVICE=pdfwrite -dProcessColorModel=/DeviceCMYK -o out.pdf in.pdf
  • Kurt Pfeifle
    Kurt Pfeifle over 3 years
    @darda: There is no difference. It's just a syntax thing. The -sXXXXXX=Something is to tell Ghostscript to treat XXXXXX-value as a string. The -dXXXXXX=/Something-syntax is to tell Ghostscript to treat XXXXXX-value as a token, and tokens start with a slash as their first character. (There is only a fixed set of tokens a given Ghostscript version is familiar with. Any -dXXXXXX=/Something-tokens can be re-written into the -sXXXXXX=Something-string -- but not necessarily the other way round.)
  • Adrian Lopez
    Adrian Lopez about 2 years
    ... Meaning gs only changes the colorspace, but doesn't change the colors, is that right?