約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ファイルを圧縮するソリューションが必要でした。
PyPDF2および/またはPyPDF4には、PDFを圧縮するオプションがありません。 PyPDF2には compressContentStreams() メソッド、 機能しません がありました。
PDFを圧縮すると主張する他のいくつかの解決策を見つけましたが、どれも私にはうまくいきませんでした(他の人に役立つ場合に備えてここに追加します): pylovepdf ; pdfsizeopt ; pdfc
私のために働いた最初の解決策は、Adobe AcrobatProfessionalでした。サイズが498MBから2.99MBに減少しました。
[最良の解決策]機能する代替のオープンソース解決策として、私は coherentpdf を見つけました。 Windowsの場合、ビルド済みのPDFスクイーザーツールをダウンロードできます。次に、cmdで:
cpdfsqueeze.exe input.pdf output.pdf
これにより、実際にはAdobeAcrobatよりもPDFが圧縮されました。 498MBから2.48MBまで。オリジナルから0.5%に圧縮されています。 Pythonコードに追加できるので、これが最善の解決策だと思います。
Linuxでは、ghostscriptスイートの一部であるps2pdfツールを使用して、結果のpdfファイルを圧縮できます。 ghostscriptをインストールします:
$ Sudo apt-get install ghostscript
次のコマンドを実行して、大きなpdfファイルのサイズを縮小します
$ ps2pdf large.pdf compressed.pdf
これを試してみたところ、品質の低下は見られませんでした。