web-dev-qa-db-ja.com

PyPDF4-エクスポート済みPDFファイルサイズが大きすぎます

約7000ページと479MBのPDFファイルがあります。ページに特定の単語が含まれている場合に特定のページのみを抽出するためにPyPDF4を使用してpythonスクリプトを作成しました。スクリプトは機能しますが、新しいPDFファイルは元の7000から650ページしかないにもかかわらず、元のファイルよりも多くのMBを持っています(正確には498 MB)。

新しいPDFのファイルサイズを小さくする方法はありますか?

私が使用したスクリプト:

from PyPDF4 import PdfFileWriter, PdfFileReader
import os
import re


output = PdfFileWriter()

input = PdfFileReader(open('Binder.pdf', 'rb')) # open input

for i in range(0, input.getNumPages()):
    content = ""
    content += input.getPage(i).extractText() + "\n"


    #Format 1
    RS = re.search('FIGURE', content)
    RS1 = #... Only one search given as example. I have more, but are irrelevant for the question.
    #....

    # Format 2
    RS20 = re.search('FIG.', content)
    RS21 = #... Only one search given as example. I have more, but are irrelevant for the question.
    #....

    if (all(v is not None for v in [RS, RS1, RS2, RS3, RS4, RS5, RS6, RS7, RS8, RS9]) or all(v is not None for v in [RS20, RS21, RS22, RS23, RS24, RS25, RS26, RS27, RS28, RS29, RS30, RS30])):
        p = input.getPage(i)
        output.addPage(p)

#Save pages to new PDF file
with open('ExtractedPages.pdf', 'wb') as f:
    output.write(f)

多くの検索の後、いくつかの解決策が見つかりました。エクスポートされたPDFファイルの唯一の問題は、それが 非圧縮 であったことでした。そのため、PDFファイルを圧縮するソリューションが必要でした。

  1. PyPDF2および/またはPyPDF4には、PDFを圧縮するオプションがありません。 PyPDF2には compressContentStreams() メソッド、 機能しません がありました。

  2. PDFを圧縮すると主張する他のいくつかの解決策を見つけましたが、どれも私にはうまくいきませんでした(他の人に役立つ場合に備えてここに追加します): pylovepdf ; pdfsizeopt ; pdfc

  3. 私のために働いた最初の解決策は、Adobe AcrobatProfessionalでした。サイズが498MBから2.99MBに減少しました。

  4. [最良の解決策]機能する代替のオープンソース解決策として、私は coherentpdf を見つけました。 Windowsの場合、ビルド済みのPDFスクイーザーツールをダウンロードできます。次に、cmdで:

    cpdfsqueeze.exe input.pdf output.pdf

これにより、実際にはAdobeAcrobatよりもPDFが圧縮されました。 498MBから2.48MBまで。オリジナルから0.5%に圧縮されています。 Pythonコードに追加できるので、これが最善の解決策だと思います。

  1. 編集:GUIも備えた別の無料ソリューションを見つけました。 PDFsam 。 1つのPDFファイルでマージ機能を使用できます。詳細設定で、[出力の圧縮]がオンになっていることを確認してください。これは498から3.2MBに圧縮されました。 enter image description here

Linuxでは、ghostscriptスイートの一部であるps2pdfツールを使用して、結果のpdfファイルを圧縮できます。 ghostscriptをインストールします:

$ Sudo apt-get install ghostscript

次のコマンドを実行して、大きなpdfファイルのサイズを縮小します

$ ps2pdf large.pdf compressed.pdf

これを試してみたところ、品質の低下は見られませんでした。

1
php