ProgramingTip

PDF를 병합하는 Ghostscript는 결과를 압축합니다.

bestdevel 2020. 12. 1. 19:12
반응형

PDF를 병합하는 Ghostscript는 결과를 압축합니다.


Ghostscript를 사용하여 여러 PDF를 병합하는 정리 한 명령을 찾았습니다.

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf

결과 크기는 2 개의 PDF를 결합한 크기보다 작습니다.

단일 파일을 입력으로 사용하여 명령을 실행하면 여전히 더 작은 크기의 출력 파일이 생성됩니다.

Ghostscript에 병합하지 않고 복사하는 옵션이 있습니까?

그렇지 않다면 Ghostscript 압축이 너무 좋아서 품질이 없습니까?


다음 은 장치로 사용할 때 사용할 수있는 몇 가지 추가 옵션 입니다 pdfwrite. 페이지에 따르면 해당 아무것도 전달 하지 않으면 더 구체적이지는 않지만에 -dPDFSETTINGS가까운 것으로 설정됩니다 /screen. -dPDFSETTINGS=/prepress300dpi 이상 만 접근 할 수 있습니다.

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdf

또 다른 대안은 pdftk입니다 .

pdftk in1.pdf in2.pdf cat output out.pdf

관찰 한 크기 최적화 중 일부는 Ghostscript의 사용하지 않는 개체 정리, 최근 비용 한 글꼴 최적화 개선 (최신 버전의 GS?!?) 및 이미지 재 / 다운 샘플링에서 비롯된 수 있습니다. 일어난.

PDF-> PDF 변환에 사용되는 경우 Ghostscript 는 기본적으로 다음과 같이 작동합니다.

  1. 모든 개체와 함께 입력 파일을 읽고 그래픽 페이지 표현을위한 내부 형식으로 변환합니다.
  2. 형식의 페이지 내부 내용 에 대해 명령 줄 에서 요청 고객 된 조작을 수행 합니다.
  3. 완전히 새로운 PDF를 작성하십시오.

즉, 대부분의 PDF-> PDF 작업에서 PDF 개체의 순서와 번호가 다르며 개체의 내부 코드도 변경 될 수 있습니다 (입력 및 출력 PDF간에 차이가없는 경우에도).

기본적으로 Ghostscript는 원본 파일에서 압축되지 않은 모든 개체 스트림도 압축합니다 (그러나 이것은 무손실 압축입니다).

이제 조작에 대한 희망을 포함하지 않는 매우 단순한 명령 줄에 대해 Ghostscript 사용자가 사용하기를 원합니다 가정-dPDFSETTINGS=/default 하고이 매개 변수를 암시 적으로 설정하고 그에 따라 작동합니다.

이제 PDFSETTINGS 무엇/default입니까?! 알아볼 수있는 두 가지 옵션이 있습니다.

  1. 설명서를 업그레이드 . 이 섹션 중간에 있는 큰 는 개요를 제공합니다. -dPDFSETTINGS=/default자체가 자체가 자체가 고유 한 다른 더 구체적인 설정에 대한 속기 일 뿐이라는 것을 알 수 있습니다 . 현재 문서에 대한 링크는 개발 코드의 현재 HEAD에 대한 사용되는 버전은 물론 다를 수 있습니다 .

  2. (자신의) Ghostscript를 쿼리하십시오. '출력 장치의 기본 옵션 / 설정에 대한 Ghostscript 쿼리 ...' 'PostScript 사전은 무엇이며 어떻게 액세스 할 수 있습니까 (Ghostscript를 통해)?'라는 질문에 대한 내 답변 입니다. 이것에 대해 조금 더 자세히 설명하십시오. 간단히 말해, Ghostscript에서/defaultPDFSETTINGS의 세부 정보를 쿼리하면 다음 명령을 실행하십시오.

     gs \
       -q \
       -dNODISPLAY \
       -c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"
    

    다음과 동일한 결과를 얻을 수 있습니다.

      /Optimize false
      /DoThumbnails false
      /PreserveEPSInfo true
      /ColorConversionStrategy /LeaveColorUnchanged
      /DownsampleMonoImages false
      /EmbedAllFonts true
      /CannotEmbedFontPolicy /Warning
      /PreserveOPIComments true
      /GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
      /DownsampleColorImages false
      /PreserveOverprintSettings true
      /CreateJobTicket false
      /AutoRotatePages /PageByPage
      /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
      /ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
      /DownsampleGrayImages false
      /UCRandBGInfo /Preserve
    

    중에서 눈에이 띄는 유일한 점은에서로 변경 /AutoRotagePages하는 /PageByPage것이 /None좋습니다. 명령 줄에서 -dAutoRotatePages=/None.

    다음 매개 변수를 추가하여 입력 PDF에 가능한 많은 패스 스루 모드 를 사용하도록 Ghostscript에 지시하는 전체 매개 변수 목록을 제공하려면 다음을 수행하십시오.

      -dAntiAliasColorImage=false \
      -dAntiAliasGrayImage=false \
      -dAntiAliasMonoImage=false \
      -dAutoFilterColorImages=false \
      -dAutoFilterGrayImages=false \
      -dDownsampleColorImages=false \
      -dDownsampleGrayImages=false \
      -dDownsampleMonoImages=false \
      -dColorConversionStrategy=/LeaveColorUnchanged \
      -dConvertCMYKImagesToRGB=false \
      -dConvertImagesToIndexed=false \
      -dUCRandBGInfo=/Preserve \
      -dPreserveHalftoneInfo=true \
      -dPreserveOPIComments=true \
      -dPreserveOverprintSettings=true \
    

따라서 다음 명령을 시도 할 수 있습니다.

gs                                              \
 -o output.pdf                                  \
 -sDEVICE=pdfwrite                              \
 -dAntiAliasColorImage=false                    \
 -dAntiAliasGrayImage=false                     \
 -dAntiAliasMonoImage=false                     \
 -dAutoFilterColorImages=false                  \
 -dAutoFilterGrayImages=false                   \
 -dDownsampleColorImages=false                  \
 -dDownsampleGrayImages=false                   \
 -dDownsampleMonoImages=false                   \
 -dColorConversionStrategy=/LeaveColorUnchanged \
 -dConvertCMYKImagesToRGB=false                 \
 -dConvertImagesToIndexed=false                 \
 -dUCRandBGInfo=/Preserve                       \
 -dPreserveHalftoneInfo=true                    \
 -dPreserveOPIComments=true                     \
 -dPreserveOverprintSettings=true               \
  input1.pdf                                    \
  input2.pdf

마지막 으로 Chris Haas가 이미 암시 했듯이 Ghostscript가 기본적으로 적용 하는 최적화특별히 원하지 않는pdftk 경우 에도 사용할 수 있습니다 . 단순히 그러한 작업을 수행 할 수 없으며 상대적으로 멍청한 작업으로 인해 상당한 속도를 얻을 수 있습니다 (그러나 Ghostscript보다 훨씬 큰 파일 크기 출력).pdftk

참고 URL : https://stackoverflow.com/questions/8158584/ghostscript-to-merge-pdfs-compresses-the-result

반응형