有多種方法可以減小給定 PDF 文件的大小。最簡(jiǎn)單的方法是刪除內(nèi)容(例如圖像)或頁(yè)面。
去除重復(fù)
某些 PDF 文檔多次包含相同的對(duì)象。例如,如果圖像在 PDF 中出現(xiàn)三次,則可以嵌入三次?;蛘咚梢郧度胍淮尾⒁脙纱巍?
這可以通過讀取和寫入文件來完成:
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("big-old-file.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.add_metadata(reader.metadata)
with open("smaller-new-file.pdf", "wb") as fp:
writer.write(fp)
這取決于 PDF 的效果如何,但我們已經(jīng)看到在真實(shí) PDF 中文件減少了 86%(從 5.7 MB 到 0.8 MB)。
刪除圖片
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("example.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.remove_images()
with open("out.pdf", "wb") as f:
writer.write(f)
無損壓縮
PyPDF2 支持使用 zlib/deflate 壓縮方法的 FlateDecode 過濾器。它是一種無損壓縮,這意味著生成的 PDF 看起來完全一樣。
可以通過 ?page.compress_content_streams
? 將 Deflate 壓縮應(yīng)用于頁(yè)面:
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("example.pdf")
writer = PdfWriter()
for page in reader.pages:
page.compress_content_streams() # This is CPU intensive!
writer.add_page(page)
with open("out.pdf", "wb") as f:
writer.write(f)
使用這種方法,我們看到真實(shí) PDF 的大小減少了 70%(從 11.8 MB 到 3.5 MB)。
更多建議: