首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyPDF2压缩

PyPDF2压缩
EN

Stack Overflow用户
提问于 2014-04-01 11:42:49
回答 3查看 12K关注 0票数 3

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

代码语言:javascript
运行
复制
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'))

我收到的错误是

代码语言:javascript
运行
复制
TypeError: must be string or read-only buffer, not file

我还尝试在合并完成后压缩pdf。我将失败的压缩建立在使用PDFSAM和压缩后得到的文件大小上。有什么想法吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-03-26 12:57:34

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

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

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

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

代码语言:javascript
运行
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2020-05-18 20:46:00

您的错误说明它必须是字符串或只读缓冲区,而不是文件。

因此,最好将合并写成一个字节或字符串。

代码语言:javascript
运行
复制
import PyPDF2
from io import BytesIO

tmp = BytesIO()
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)
merger.write(tmp)
PyPDF2.filters.compress(tmp.getvalue())
merger.write(open("test_out2.pdf", 'wb'))
票数 0
EN

Stack Overflow用户

发布于 2021-10-20 06:39:48

最初的方法并没有那么错误。只需将页面添加到您的编写器中,并在写入文件之前压缩它们:

代码语言:javascript
运行
复制
...

for i in list(range(reader.numPages)):
    page = reader.getPage(i)
    writer.addPage(page);
for i in list(range(writer.getNumPages())):
    page.compressContentStreams()

...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22776388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档