PythonとGhostscriptでPDFを軽量化
PythonとGhostscriptでPDFを軽量化 書類の添付などでブラウザからPDFをアップロードする際に数MB以下にしないとアップロードできないことがありますが、印刷用に作成したPDFや複数画像を一枚にまとめたPD […]
Filter by Category
PythonとGhostscriptでPDFを軽量化 書類の添付などでブラウザからPDFをアップロードする際に数MB以下にしないとアップロードできないことがありますが、印刷用に作成したPDFや複数画像を一枚にまとめたPD […]
Pythonのargparseでコマンドライン引数をパース argparseモジュールを使って、Pythonを実行する際にコマンドライン引数を指定してプログラム内に情報を渡す方法です。 引数によって処理を変えたり、別々の […]
書類の添付などでブラウザからPDFをアップロードする際に数MB以下にしないとアップロードできないことがありますが、印刷用に作成したPDFや複数画像を一枚にまとめたPDFは容量が大きくなりがちで、数十MBを超えてしまうことも少なくなりません。PDFを軽量化するオンラインサービスではセキュリティが心配なので、本記事ではPythonとGhostscriptを使ってローカル環境でPDFを軽量化する方法を解説します。
コードはGitHubリポジトリにあげています。
PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.6.7
Python: 3.11.6
Ghostscript: 10.03.1
初めに、PDFの軽量化に必要なGhostscriptをHomebrewでインストールします。(既にインストールされていれば飛ばします)
comp.py
import argparse
import subprocess
output_pdf_path = "outputs/compress.pdf"
def compress_pdf(input_pdf_path, quality):
quality_settings = {
'screen': '72',
'ebook': '150',
'printer': '300',
'prepress': '300',
'default': '300'
}
if quality not in quality_settings:
quality = 'default'
ghostscript_command = [
'gs', '-sDEVICE=pdfwrite', '-dCompatibilityLevel=1.4',
'-dPDFSETTINGS=/{}/'.format(quality), '-dNOPAUSE', '-dQUIET',
'-dBATCH', '-sOutputFile={}'.format(output_pdf_path),
input_pdf_path
]
subprocess.run(ghostscript_command)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Compress a PDF using Ghostscript')
parser.add_argument('input_pdf_path', help='Path to the input PDF')
parser.add_argument('quality', help='Quality of the PDF compression (screen, ebook, printer, prepress, default)')
args = parser.parse_args()
compress_pdf(args.input_pdf_path, args.quality)
下記の引数を指定してコマンドを実行します。
コマンド実行後、output_pdf_pathで指定したディレクトリにcompress.pdfという名前で軽量化したPDFが出力されます。
python comp.py /path/to/your/input.pdf ebook
/path/to/your/input.pdf
:軽量化するPDFのパスを指定
ebook
:出力するクオリティを指定
import argparse
import subprocess
モジュールのインポート
output_pdf_path = "outputs/compress.pdf"
軽量化したPDFの出力先のパスを指定
quality_settings = {
'screen': '72',
'ebook': '150',
'printer': '300',
'prepress': '300',
'default': '300'
}
出力するクオリティに対応する値を辞書として定義
Ghostscriptのオプションの値として使用
if quality not in quality_settings:
quality = 'default'
指定したクオリティがquality_settingsの辞書になければdefaultに設定
ghostscript_command = [
'gs', '-sDEVICE=pdfwrite', '-dCompatibilityLevel=1.4',
'-dPDFSETTINGS=/{}/'.format(quality), '-dNOPAUSE', '-dQUIET',
'-dBATCH', '-sOutputFile={}'.format(output_pdf_path),
input_pdf_path
]
Ghostscriptを実行するためのコマンドラインを作成
subprocess.run(ghostscript_command)
コマンドラインを実行するコード
parser = argparse.ArgumentParser(description='Compress a PDF using Ghostscript')
parser.add_argument('input_pdf_path', help='Path to the input PDF')
parser.add_argument('quality', help='Quality of the PDF compression (screen, ebook, printer, prepress, default)')
args = parser.parse_args()
軽量化するPDFのパスとクオリティを引数に設定
compress_pdf(args.input_pdf_path, args.quality)
PDFを軽量化するcompress_pdf関数を呼び出すコード
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません