これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。
HTML ファイル生成日時: 2025/08/19 19:16:06.895 (台灣標準時)
作成した PDF ファイルのファイルサイズが大きい場合、 Ghostscript を使って 圧縮された PDF ファイルを生成することができると知ったでござる。以下のよ うにすればよいようでござる。
% gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -dPDFSETTINGS=/default -dNOPAUSE -dBATCH -sOutputFile=compressed.pdf original.pdf
"-dPDFSETTINGS" オプションの値を変更すると、生成される圧縮済み のファイルの大きさを変えることができるそうでござる。以下の選択肢があるよ うでござる。
生成されるファイルの大きさは、 /default, /prepress, /printer, /ebook, /screen の順に小さくなっていくようでござる。 /screen だと最も小さくなる ようでござる。
![]() |
---|
以下が、 66 MB 程度の PDF ファイルを ghostscript を使って圧縮してみた結 果でござる。
% ls -l compressed_* original.pdf -rw-r--r-- 1 daisuke taiwan 25477117 Aug 15 14:59 compressed_default.pdf -rw-r--r-- 1 daisuke taiwan 2029683 Aug 15 14:58 compressed_ebook.pdf -rw-r--r-- 1 daisuke taiwan 11654080 Aug 15 14:59 compressed_prepress.pdf -rw-r--r-- 1 daisuke taiwan 8513495 Aug 15 14:59 compressed_printer.pdf -rw-r--r-- 1 daisuke taiwan 960015 Aug 15 14:58 compressed_screen.pdf -rw-r--r-- 1 daisuke taiwan 69486966 Aug 15 14:21 original.pdf
以下のようなプログラムを作ってみたでござる。
#!/usr/pkg/bin/python3.13 # # Time-stamp: <2025/08/15 15:53:03 (UT+08:00) daisuke> # # importing argparse module import argparse # importing subprocess module import subprocess # initialising a parser parser = argparse.ArgumentParser (description='compress PDF files') # choices choices_compatibility = [ '1.3', '1.4', '1.7', '2.0' ] choices_preset = [ '/default', '/ebook', '/prepress', \ '/printer', '/screen' ] # adding arguments parser.add_argument ('-c', '--compatibility', choices=choices_compatibility, \ default='1.7', \ help='compatibility level (default: 1.7)') parser.add_argument ('-g', '--ghostscript', default='/usr/pkg/bin/gs', \ help='location of gs command (default: /usr/pkg/bin/gs)') parser.add_argument ('-m', '--moreoptions', default='-dNOPAUSE -dBATCH', \ help='other gs options (default: -dNOPAUSE -dBATCH)') parser.add_argument ('-o', '--output', default='out.pdf', \ help='output PDF file') parser.add_argument ('-q', '--quality', choices=choices_preset, \ default='/prepress', \ help='compression level (default: /prepress)') parser.add_argument ('-v', '--verbose', action='store_true', \ help='verbosity level (default: False)') parser.add_argument ('file', nargs=1, help='input PDF file') # parsing arguments args = parser.parse_args () # input parameters compatibility_level = args.compatibility quality_preset = args.quality command_ghostscript = args.ghostscript options_more = args.moreoptions verbosity = args.verbose file_input = args.file[0] file_output = args.output # compression command command_compression = f'{command_ghostscript}' \ + f' -sDEVICE=pdfwrite {options_more}' \ + f' -dCompatibilityLevel={compatibility_level}' \ + f' -dPDFSETTINGS={quality_preset}' \ + f' -sOutputFile={file_output}' \ + f' {file_input}' # printing command to be executed if (verbosity): print (f'#') print (f'# command to be executed:') print (f'# {command_compression}') print (f'#') # executing a command to compress a PDF file subprocess.run (command_compression, shell=True)