web-dev-qa-db-ja.com

Ghostscript PDFバッチ圧縮

私が探しているのは12,000+のサイズを圧縮/縮小することであるため、WindowsにGhostscriptをインストールしましたPDFネットワーク共有上のファイル。これはどのGUIソフトウェアでも不可能です。リソースが足りなくなってしばらくすると爆破するだけなので、コマンドラインがここに行く方法だと思います。

GhostscriptのドキュメントとPDFファイルの圧縮のさまざまな例を読みましたが、大きなバッチとして動作するものが見つからないようです。

基本的に、ネットワーク共有上にあるファイルを再帰的に圧縮するには、複数のフォルダーをターゲットにする必要があります。

これはGhostscriptで行うことができますか?もしそうなら、私がこれを達成するのを助けるためにいくつかのコマンド例でアドバイスしてください。

ありがとう!

6
BabyPython

次のスクリプトを使用して、配列変数filesDirに必要なすべてのディレクトリを定義できます。
これらすべてのディレクトリをループし、サブディレクトリを含むすべてのディレクトリですべてのpdfファイルを検索します。
見つかったすべてのPDFファイルに対して このghostscriptコマンド(GitHub) を使用し、ファイルの名前を出力します。 fileabc.pdf新しい名前:compr_fileabc.pdf

編集#1:

コメントの要求に応じてスクリプトを変更し、新しいpdfファイルを書き込むか、入力pdfファイルを上書きしました。これらのオプションから選択するには、createNewPDFs変数を1(新しいファイル)または0(上書き)に変更します。
ghostscriptは入力ファイルに書き込めないため、出力ファイルはユーザーの一時パス(%TEMP%)に書き込まれ、元の入力ファイルに移動してこのファイルを上書きします。新しいファイルのサイズが小さい場合にのみ、入力pdfファイルが上書きされます。
さらに、ghostscriptコマンドは、Windowsではgswin64c(64ビット)またはgswin32c(32ビット)のいずれかである可能性があるため、同じ名前の変数に置き換えられます。

アウトカミングサイズが十分に小さくない場合は、これらのghostscriptコマンドスイッチ-dPDFSETTINGS=/printerを試してみてください。これについては、以下で説明します。

バッチスクリプト:

@echo off
setlocal EnableDelayedExpansion

rem ghostscript executable name
set "ghostscript=gswin64c"

rem directories to scan for files
set "filesDir[0]=FOLDER1"
set "filesDir[1]=FOLDER2"
set "filesDir[2]=FOLDER3"

rem extension of files to be scanned
set "ext=pdf"

rem new file be creation or input file overwrite
set "createNewPDFs=0"
rem file prefix for new files (if they should be created)
set "filepre=compr_"

rem loop over all directories defined in filesDir array
for /f "tokens=2 delims==" %%d in ('set filesDir[') do (
   if exist "%%~d" (
      pushd "%%~d"
      rem loop over all files in all (sub)directories with given extension
      for /f "delims=*" %%f in ('dir "*.%ext%" /b /s /a:-d') do (
         if [%createNewPDFs%] EQU [1] (
            %ghostscript% -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile="%%~dpf%filepre%%%~nxf" "%%~f"
         ) else (
            %ghostscript% -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile="%TEMP%\%%~nxf" "%%~f"
            for %%t in ("%TEMP%\%%~nxf") do ( set "newSize=%%~zt" )
            for %%t in ("%%~f") do ( set "oldSize=%%~zt" )
            if [!newSize!] LSS [!oldSize!] (
               rem new file is smaller --> overwrite
               move /y "%TEMP%\%%~nxf" "%%~f"
            ) else (
               rem new file is greater --> delete it of the temp dir
               del "%TEMP%\%%~nxf"
            )
         )
      )
      popd
   )
)

GitHub ghostscriptコマンドが見つかりました PDFサイズを縮小するには:

これにより、ファイルのサイズを最大15%(1つのケースでは2.3Mから345K)に減らすことができ、品質が明らかに低下することはありません。

ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

PDFSETTINGSの他のオプション:

  • / screenは、AcrobatDistillerの「画面最適化」設定と同様の低解像度出力を選択します。
  • / ebookは、AcrobatDistillerの「eBook」設定と同様の中解像度出力を選択します。
  • / printerは、AcrobatDistillerの「PrintOptimized」設定と同様の出力を選択します。
  • / prepressは、AcrobatDistillerの「PrepressOptimized」設定と同様の出力を選択します。
  • / defaultは、おそらくより大きな出力ファイルを犠牲にして、さまざまな用途で役立つことを目的とした出力を選択します。

出典: http://ghostscript.com/doc/current/Ps2pdf.htm


ss64.com からのコマンド参照リンク:

7
Andre Kampling