PyPDF2压缩

问题描述 投票:1回答:1

我正在努力使用PyPDF2模块来压缩我合并的pdf。这是我基于http://www.blog.pythonlibrary.org/2012/07/11/pypdf2-the-new-fork-of-pypdf/的尝试

import PyPDF2
path = open('path/to/hello.pdf', 'rb')
path2 = open('path/to/another.pdf', 'rb')
merger = PyPDF2.PdfFileMerger()
merger.append(fileobj=path2)
merger.append(fileobj=path)
pdf.filters.compress(merger)
merger.write(open("test_out2.pdf", 'wb'))

我收到的错误是

TypeError: must be string or read-only buffer, not file

我也尝试在合并完成后压缩pdf。我将失败的压缩基于我使用PDFSAM压缩后获得的文件大小。有什么想法吗?谢谢。

python pdf pypdf2
1个回答
2
投票

PyPDF2没有可靠的压缩方法。也就是说,有一个compressContentStreams()方法,其描述如下:

通过连接所有内容流并应用FlateDecode过滤器来压缩此页面的大小。

但是,如果内容流压缩由于某种原因变为“自动”,则此功能可能不执行任何操作。

同样,这在大多数情况下不会有任何区别,但您可以尝试以下代码:

import PyPDF2

path = 'path/to/hello.pdf'
path2 = 'path/to/another.pdf'
pdfs = [path, path2]

writer = PyPDF2.PdfFileWriter()

for pdf in pdfs:
    reader = PyPDF2.PdfFileReader(pdf)
    for i in xrange(reader.numPages):
        page = reader.getPage(i)
        page.compressContentStreams()
        writer.addPage(page)

with open('test_out2.pdf', 'wb') as f:
    writer.write(f)
© www.soinside.com 2019 - 2024. All rights reserved.