1

これは以下に関連しています:

(任意の)PDFを黒(K)に変換-CMYKのみ

やあ

まず、私の英語をごめんなさい。

この関連リンクには、私の問題に対する解決策の50%が含まれています。残っているのは、マゼンタの色も100%マゼンタである必要があるということだけです。

ここにシナリオがあります:

私はこのようなhtmlを持っています:

<font color="magenta">Hello </font>
<font color="#000000"> World </font>

1-私はそれを次のように変換します:

/ usr / bin / wkhtmltopdf file.html output1.pdf

2-黒いテキストを100%kに変換します。

gs \
   -dNOPAUSE \
   -dBATCH \
   -sDEVICE=ps2write \
   -sOutputFile=output1.ps \
    output1.pdf

# PS to PDF using replacement function in HackRGB-cmyk-inv.ps
gs \
   -dNOPAUSE \
   -dBATCH \
   -sDEVICE=pdfwrite \
   -sOutputFile=output2.pdf \
    /HackRGB-cmyk-inv.ps \
    output1.ps

これで、黒のテキストは100%Kですが、マゼンタは100%Mではないoutput2.pdfがあります...

参考までに、HackRGB-cmyk-ink.ps(postscript)の内容は次のとおりです。

%!
/oldsetrgbcolor /setrgbcolor load def
/setrgbcolor {
(in replacement setrgbcolor\n) print
                                %% R G B
  1 index 1 index       %% R G B G B
  eq {                  %%
     2 index 1 index    %% R G B R B
     eq {
                        %% Here if R = G = B
      pop pop           %% remove two values
      % setgray % "replace the 'setgray' with":
      0 0 0 4 -1 roll % setcmykcolor
      -1 mul          %% obtain -R on top of stack
      1 add           %% obtain 1-R on top of stack
      setcmykcolor    %% now set(cmykcolor) K (as 1-R)
     } {
       oldsetrgbcolor   %% set the RGB values
     } ifelse
  }{
    oldsetrgbcolor      %% Set the RGB values
  }ifelse

} bind def
/oldsetgray /setgray load def
/setgray {
(in replacement setgray\n) print
  % == % debug: pop last element and print it
  % here we're at a gray value;
  % http://www.tailrecursive.org/postscript/operators.html#setcymkcolor
  % setgray: "gray-value must be a number from 0 (black) to 1 (white)."
  % setcymkcolor: "The components must be between 0 (none) to 1 (full)."
  % so convert here again:
  0 0 0 4 -1 roll % push CMY:000 after Gray and roll down,
                  % so top of stack becomes
                  % ...:C:M:Y:Gray
  -1 mul          %% obtain -Gray on top of stack
  1 add           %% obtain 1-Gray on top of stack
  setcmykcolor    %% now set(cmykcolor) K (as 1-Gray)
} bind def


%~ # test: rgb2gray
%~ gs -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=./blah-slide-hackRGB-gray.ps ./HackRGB.ps ./blah-slide-gsps2w.ps
%~ # gray2cmyk
%~ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=./blah-slide-hackRGB-gray-ci.pdf ./HackRGB-cmyk-inv.ps ./blah-slide-hackRGB-gray.ps
%~ # check separations - looks OK
%~ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -dFirstPage=1 -dLastPage=1 -sOutputFile=p%02d.tif blah-slide-hackRGB-gray-ci.pdf && eog p01.tif 2>/dev/null

それを行う方法についてのいくつかのアイデア?

よろしく。

4

1 に答える 1

1

これがハックの簡単なハックです。oldsetrgbcolorの直後に、cmykカラーを確認して変更できます。たぶん今夜、もっと一般的なモジュールを作ることができます。これをカットすると、50%マゼンタがチェックされ、100%に変更されます。線には、見つかったcmykの色が表示されます。(cmyk-) print pstack計算された色が、.49のように正確に.5でない場合は、必要になることがあります。値が表示されたら、線を削除します。

  }{
    oldsetrgbcolor      %% Set the RGB values
  }ifelse

新着

  }{
    oldsetrgbcolor      %% Set the RGB values
    currentcmykcolor    %puts 4 numbers on the stack
    (cmyk-) print pstack %display the colors (remove when things work correctly)
    3 -1 roll           %put magenta on top of stack
    dup                 %make copy of magenta value
    .5                  %put magenta test value on stack (then may not be exactly .5, see pstack)
    eq                  %see of magenta is equal to test value (.5)
    {pop 1}if           %if it is equal, pop off the .5 and put a 1 onto the stack
    3 1 roll            %put magenta back where it belongs in the stack
    setcmykcolor        %reset the cmyk to have new magenta value
  }ifelse
于 2013-02-27T17:24:38.003 に答える