【问题标题】:How can I uncompress a PDF with Python only?如何仅使用 Python 解压缩 PDF?
【发布时间】:2017-07-24 05:52:47
【问题描述】:

我目前想处理 PDF 中的字符串。由于常见的 Python 库似乎不支持此功能,因此我使用 pdftk 解压缩 PDF 并直接使用 Python 编辑文件。

是否可以直接用 Python 解压 PDF 文件?

【问题讨论】:

  • pdftk 中的解压缩选项是什么。我快速查看pdftk link 找不到任何相关的压缩/解压缩。我可以发现它只是在做分割、合并、旋转、水印、印章……等等。
  • 命令是pdftk doc.pdf output doc.unc.pdf uncompress。描述为“解压缩 PDF 页面流以在文本编辑器(例如 vim、emacs)中编辑 PDF”
  • 那是在您编辑文件之前,您输入的 pdf 文件是 tar.gz 或 .zip 文件的一部分吗?请分享信息。
  • 嘿!您是否尝试过使用this lib?
  • @Haranadh 不,我有一个 PDF 文件。但是许多(大多数?全部?)PDF 的内容是压缩的。

标签: python pdf


【解决方案1】:

在 git-hub 中有一个新的压缩/解压缩请求。但它不是发布的一部分。

您可能需要复制 --> 将 pypdftk.py 的内容粘贴到本地库的 pypdftk.py 文件中。并尝试使用以下功能。

import pypdftk

def test_compress():
    input_file = "/Out/test1.unc.pdf"
    pypdftk.compress(input_file, "./Out/test1.c.pdf")

def test_uncompress():
    input_file = "./Out/test1.pdf"
    pypdftk.uncompress(input_file, "./Out/test1.unc.pdf")

def main():
    test_num_pages()
    test_uncompress()
    test_compress()

if __name__ == '__main__':
    main()

刚刚试了一下。不确定您是否正在寻找相同的解决方案。 :) 希望这会对你有所帮助。

【讨论】:

  • 这使用pdftk。它几乎与我目前所做的相同(但更糟糕的是,因为它是一个 3rd 方模块)。
  • 是的。完全一样。但是您可以在帖子中提到您不想要 pdftk 解决方案。
  • 我在标题中说“仅限 Python”。
【解决方案2】:

pyPDF2 可以解压内容对象

================================================ ======

from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2 import generic
from PyPDF2.pdf import ContentStream
from PyPDF2.generic import TextStringObject, NameObject

pdf = PdfFileReader(in_name)  
pdf_writer = PdfFileWriter()

for n in range(0, pdf.getNumPages()):
page = pdf.getPage(n)
    content_object = page["/Contents"].getObject()
    content = ContentStream(content_object, pdf)
    page.__setitem__(NameObject("/Contents"), content)
    pdf_writer.addPage(page)
  
with Path(out_name).open(mode="wb") as output_file:
    pdf_writer.write(output_file)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多