【问题标题】:PyPDF4 - Exported PDF file size too bigPyPDF4 - 导出的 PDF 文件太大
【发布时间】:2020-01-06 14:40:47
【问题描述】:

我有一个大约 7000 页和 479 MB 的 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)

【问题讨论】:

  • content 变量应在循环外部/之上声明

标签: python python-3.x pdf pypdf


【解决方案1】:

经过大量搜索找到了一些解决方案。 导出的 PDF 文件的唯一问题是它是 uncompressed。所以我需要一个压缩PDF文件的解决方案:

  1. PyPDF2 和/或 PyPDF4 没有压缩 PDF 的选项。 PyPDF2 有 compressContentStreams() 方法,which doesn't work

  2. 找到了一些其他声称可以压缩 PDF 的解决方案,但没有一个对我有用(在此处添加它们以防它们对其他人有用): pylovepdf ; pdfsizeopt ; pdfc

  3. 第一个对我有用的解决方案是 Adob​​e Acrobat Professional。它将大小从 498 MB 减少到 2.99 MB。

  4. [最佳解决方案] 作为另一种可行的开源解决方案,我找到了coherentpdf。 对于 Windows,您可以下载预构建的 PDF 压缩工具。 然后在cmd中:

    cpdfsqueeze.exe 输入.pdf 输出.pdf

这实际上比 Adob​​e Acrobat 压缩了 PDF。从 498 MB 到 2.48 MB。从原始压缩到 0.5%。我认为这是最好的解决方案,因为它可以添加到您的 Python 代码中。

  1. 编辑: 找到另一个也有 GUI 的免费解决方案。 PDFsam。您可以在一个 PDF 文件上使用合并功能,并在高级设置中确保您选中了压缩输出。这从 498 压缩到 3.2 MB。

【讨论】:

    【解决方案2】:

    如果您同意丢失 PDF 中的任何链接,请在保存文件之前尝试调用 PdfFileWriter.removeLinks() 函数。我遇到了同样的问题,但在保存之前调用此函数会使我的文件大小从 44.7MB 减少到仅 1.09MB。

    【讨论】:

      【解决方案3】:

      在 Linux 中,您可以使用 ps2pdf 工具压缩生成的 pdf 文件,该工具是 ghostscript 套件的一部分。 安装ghostscript:

      $ sudo apt-get install ghostscript
      

      运行以下命令以减小大型 pdf 文件的大小

      $ ps2pdf large.pdf compressed.pdf
      

      当我尝试这个时,我没有发现任何质量损失。

      【讨论】:

      • 不错的答案;我还要注意 Ghostscript 是 TeX 依赖项,所以如果你有 TeX 就会有这个
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2016-06-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多