有多种方法可以减小给定 PDF 文件的大小。最简单的方法是删除内容(例如图像)或页面。
去除重复
某些 PDF 文档多次包含相同的对象。例如,如果图像在 PDF 中出现三次,则可以嵌入三次。或者它可以嵌入一次并引用两次。
这可以通过读取和写入文件来完成:
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 的效果如何,但我们已经看到在真实 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 压缩应用于页面:
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)
使用这种方法,我们看到真实 PDF 的大小减少了 70%(从 11.8 MB 到 3.5 MB)。
更多建议: