2012-05-06 2 views
4

색상이 포함되어 있으면 회색 음영으로 PDF를 변환해야합니다. 이 목적을 위해 나는 pdf가 이미 회색조인지 아닌지를 결정할 수있는 스크립트를 발견했다.Ghostscript 회색조 변환에 여전히 색상이 포함되어 있습니까?

convert "source.pdf" -colorspace RGB -unique-colors txt:- 2> /dev/null \ 
    | egrep -m 2 -v "#([0-9|A-F][0-9|A-F])\1{3}" \ 
    | wc -l 

이 RGB의 다른 값 (그래서 그들은 회색되지 않음) 많은 색상이 문서의 존재가 얼마나 계산합니다.

PDF로 이미 내가 제대로 색상없이 표시하는 PDF 뷰어 출력 문서를 열면 내가 고스트

gs \ 
    -sOutputFile=temp.pdf \ 
    -sDEVICE=pdfwrite \ 
    -sColorConversionStrategy=Gray \ 
    -dProcessColorModel=/DeviceGray \ 
    -dCompatibilityLevel=1.4 \ 
    -dNOPAUSE \ 
    -dBATCH \ 
    source.pdf < /dev/null 

로 변환을 진행 그레이 스케일 문서가 아닌 경우. 그러나 새로운 생성 된 문서의 첫 번째 스크립트를 시도해도 여전히 색상이 포함되어있는 것으로 나타났습니다. 문서를 정확한 회색조로 변환하려면 어떻게해야합니까? 컬러 프린터로이 문서를 인쇄 할 경우 프린터는 회색을 인쇄 할 때 검정이 아닌 색을 사용할 것이기 때문에 필요합니다.

+0

에 있습니다. 'egrep' 문의 의도는 무엇인지 설명 할 수 있습니까? –

+0

나는이 고스트 스크립트가 RGB 색상 공간을 GRAYSCALE로 변환하고 Callas 프리 플라이트 소프트웨어로 점검하는 것을 여러 번 사용했습니다. imagemagick을 신뢰하지 말고,이 스위치들은 고통없이 작동합니다. – Dingo

답변

9

나는 매우 일반적으로 ImageMagick과 가치 -하지만 당신이 사용하고있는 명령을 제대로 색상을 계산 convert을 신뢰하지 않는이 ...

은 내가 PDF 페이지 경우 발견 할 수있는 다른 방법을 제안 할 수 있음 색상을 사용합니까? inkcov (상대적으로 새로운) Ghostscript 장치를 기반으로합니다 (Ghostscript v9.05 이상이 필요함). 각 단일 페이지에 대한 CMYK의 잉크 적용 범위를 표시합니다 (RGB 색상의 경우 내부적으로 CMYK로 자동 변환).

첫째, 고스트 스크립트의 도움으로 예 PDF 생성 :

gs \ 
    -o test.pdf \ 
    -sDEVICE=pdfwrite \ 
    -g5950x2105 \ 
    -c "/F1 {100 100 moveto /Helvetica findfont 42 scalefont setfont} def" \ 
    -c "F1       (100% 'pure' black) show showpage" \ 
    -c "F1 .5 .5 .5 setrgbcolor (50% 'rich' rgbgray) show showpage" \ 
    -c "F1 .5 .5 .5 0 setcmykcolor (50% 'rich' cmykgray) show showpage" \ 
    -c "F1 .5   setgray  (50% 'pure' gray)  show showpage" 

모든 페이지가 전혀 색을 사용하지 않는 사람의 눈에 나타나지 않습니다 동안을, 페이지 2와 3은 참으로 혼합 않는다 색상의 겉보기 회색 값. .

gs -o - -sDEVICE=inkcov test.pdf 
[...] 
Page 1 
0.00000 0.00000 0.00000 0.02230 CMYK OK 
Page 2 
0.02360 0.02360 0.02360 0.02360 CMYK OK 
Page 3 
0.02525 0.02525 0.02525 0.00000 CMYK OK 
Page 4 
0.00000 0.00000 0.00000 0.01982 CMYK OK 

(각 컬러 채널에 대한 100 % 잉크 커버리지 1.00000 맵 값 결과의 첫 번째 줄에 따라서 0.02230 페이지 영역의 2.23 % 의미

이제 각 페이지의 잉크 적용 범위를 체크 블랙 잉크에 포함된다) 따라서, 고스트의 inkcov 의해 주어지는 결과를 정확하게 예상 한이다.

  • 페이지 1 + 4 C (시안), M (마젠타), Y 중 (황색을 사용하지 않음) 색상은 K (검정색) 만.
  • 2 + 3 페이지는 C (시안 색), M (마젠타 색), Y (노랑색)의 잉크를 사용하지만 K (검정색)은 전혀 사용하지 않습니다. 이제

의이 DeviceGray 색 공간 사용하는 원래의 PDF의 모든 페이지를 변환 할 :

gs \ 
-o temp.pdf \ 
-sDEVICE=pdfwrite \ 
-sColorConversionStrategy=Gray \ 
-sProcessColorModel=DeviceGray \ 
    test.pdf 

을 ... 다시 잉크 적용 범위를 확인 :

gs -q -o - -sDEVICE=inkcov temp.pdf 
0.00000 0.00000 0.00000 0.02230 CMYK OK 
0.00000 0.00000 0.00000 0.02360 CMYK OK 
0.00000 0.00000 0.00000 0.02525 CMYK OK 
0.00000 0.00000 0.00000 0.01982 CMYK OK 

를 다시 정확히를 성공적인 컬러 변환의 경우 예상되는 결과!(BTW, 두 파일 모두 저에 대한 convert 명령이 리턴 2의 [원본] test.pdf뿐만 아니라 temp.pdf [회색 변환] - ... 그래서이 명령을 잘 수 없다) 아마도

+0

그것은 매력처럼 작동했습니다! 감사! –

4

문서 투명한 인물이 들어 있습니다. 고스트 스크립트 변환 명령에 옵션

-dHaveTransparency=false 

을 전달하십시오. pdfwrite 장치의 전체 옵션 목록은 http://ghostscript.com/doc/current/Ps2pdf.htm#Options

+1

죄송합니다, Vincent :이 설정은 질문과 관련이 없습니다. –

+1

@KurtPfeifle 전적으로 동의하지 않습니다. 이 질문이 몇 달 동안 활동적이지 않았고 귀하의 답변이 충분히 적절하다는 것을 알고 있었지만, 제 자신의 문제는 정확한 제목 이었기 때문에이 질문에 답했습니다. 변환 후 몇 페이지에 여전히 색상이 포함되어 있습니다. 답을 통해 일부 페이지에 투명도가 포함되어 컬러 페이지가 생성되었다는 사실에 어떤 페이지를 결정하고 문제를 좁힐 수있었습니다. 내가 제공 한 옵션을 전달하면이 문제가 해결됩니다. 그러므로 나는이 답을 찾은 것을 기쁘게 생각했다. –

+0

@VincentNivoliers : 좋습니다, 당신이 옳을 수도 있습니다. 필자는 시간이 지나면 적절한 입력 샘플로 이것을 시험해 보도록하겠습니다. 이 추가 힌트를 보내 주셔서 감사합니다. –