Converting PDF to CMYK (with identify recognizing CMYK)

后端 未结 5 1888
眼角桃花
眼角桃花 2020-12-02 06:19

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

相关标签:
5条回答
  • 2020-12-02 06:22

    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.

    0 讨论(0)
  • 2020-12-02 06:23

    Revisiting the CMYK conversion with PDF/X-3 again as I have another print job in the queue made me find out the following:

    If you only need CMYK, avoid X-3. It does not support transparency (https://en.wikipedia.org/wiki/PDF/X) and the cyan tinted image you will get is neither satisfying nor will it actually conform to any standard. If you have alpha, opacity, gradients do not convert to PDF/X-3 if not absolutely needed by your print shop.

    If you do need pdf/X you will need to rasterize and go for X-3. There is no X-4 on Linux / free software products that I know of in the "well known tool chain" (imagemagick, inkscape, gimp etc. )

    I am however still fighting with defined rich black, f.ex. 60%C, 60%M, 40%Y, 100%K - a rather typical standard for print shops here. Whenever I set this in inkscape it will be gone as soon as export (to RGB; a cairo limitation)

    Still, this is what seems to get me close to what they'd expect:

    #!/bin/bash
    
    # possibly ps2ps2 for keeping fonts?
    pdf2ps -sOutputFile=- "$1" | gs \
    -dPDFX \
    -dBATCH \
    -dNOPAUSE \
    -dNOOUTERSAVE \
    -dPDFSETTINGS=/prepress \
    -dCompatibilityLevel=1.4 \
    -sDEVICE=pdfwrite \
    -sColorConversionStrategy=CMYK \
    -sProcessColorModel=DeviceCMYK \
    -dHaveTransparency=false \
    -sOutputFile="${1%%.pdf}_X-3.pdf" \
    PDFX_def.ps \
    -
    

    Any insights on a true CMYK creation to CMYK-PDF output workflow are still very welcome. Scribus is no real solution as it has lots of problems importing inkscape SVGs correctly.. Other than that, scribus does a decent job creating CMYK-PDFs.

    0 讨论(0)
  • 2020-12-02 06:26

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

    0 讨论(0)
  • 2020-12-02 06:39

    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.

    0 讨论(0)
  • 2020-12-02 06:44

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

    0 讨论(0)
提交回复
热议问题