首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyPdf PdfFileReader vs PdfFileWriter

pyPdf PdfFileReader vs PdfFileWriter
EN

Stack Overflow用户
提问于 2015-02-17 23:31:21
回答 2查看 5.2K关注 0票数 2

我有以下代码:

代码语言:javascript
复制
import os
from pyPdf import PdfFileReader, PdfFileWriter

path = "C:/Real Python/Course materials/Chapter 12/Practice files"

input_file_name = os.path.join(path, "Pride and Prejudice.pdf")
input_file = PdfFileReader(file(input_file_name, "rb"))
output_PDF = PdfFileWriter()

for page_num in range(1, 4):
    output_PDF.addPage(input_file.getPage(page_num))

output_file_name = os.path.join(path, "Output/portion.pdf")
output_file = file(output_file_name, "wb")
output_PDF.write(output_file)
output_file.close()

直到现在我还在读Pdf,后来学会了从Pdf写到txt.但现在这个..。为什么PdfFileReaderPdfFileWriter有这么大的不同?

有人能解释一下吗?我希望这样的事情:

代码语言:javascript
复制
import os
from pyPdf import PdfFileReader, PdfFileWriter

path = "C:/Real Python/Course materials/Chapter 12/Practice files"

input_file_name = os.path.join(path, "Pride and Prejudice.pdf")
input_file = PdfFileReader(file(input_file_name, "rb"))

output_file_name = os.path.join(path, "out Pride and Prejudice.pdf")
output_file = PdfFileWriter(file(output_file_name, "wb"))

for page_num in range(1,4):
    page = input_file.petPage(page_num)
    output_file.addPage(page_num)
    output_file.write(page)

有什么帮助吗?谢谢

编辑0: .addPage()做什么?

代码语言:javascript
复制
for page_num in range(1, 4):
        output_PDF.addPage(input_file.getPage(page_num))

它只是创建了3个空白页吗?

编辑1:有人可以解释在以下情况下发生了什么:

1) output_PDF = PdfFileWriter()

2) output_PDF.addPage(input_file.getPage(page_num))

3) output_PDF.write(output_file)

第三个通过刚刚创建的(!)反对output_PDF,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-20 21:32:28

问题基本上是PDF交叉参考表。

这是一个有点混乱的意大利面怪物引用页,字体,对象,元素,这些都需要链接在一起,以允许随机访问。

每次更新文件时,都需要重新生成此表。该文件首先是在内存中创建的,因此这只需发生一次,从而进一步降低了烧掉文件的机会。

代码语言:javascript
复制
output_PDF = PdfFileWriter()

这就为PDF文件创建了内存空间。(从你原来的pdf中提取)

代码语言:javascript
复制
output_PDF.addPage(input_file.getPage(page_num))

将输入pdf中的页面添加到内存中创建的PDF文件中(您想要的页面)。

代码语言:javascript
复制
output_PDF.write(output_file)

最后,这会将存储在内存中的对象写入文件,构建标题、交叉引用表,并将所有内容链接到一起。

编辑:据推测,刚刚创建的标志标志PyPDF开始构建适当的表并将内容链接到一起。

--

针对为什么vs .txt和csv:

当您从文本或CSV文件复制时,没有需要理解和移动的现有数据结构来确保格式化、图像放置和表单数据(输入部分等)的保存和正确创建。

票数 1
EN

Stack Overflow用户

发布于 2015-02-17 23:48:31

很可能,这是因为PDF并不完全是线性的--“头”实际上在文件的末尾。

如果每次更改时都会将该文件写入磁盘,则您的计算机需要继续将该数据推送到磁盘上。相反,模块(可能)将有关文档的信息存储在一个对象(PdfFileWriter)中,然后在请求时将该数据转换为实际的PDF文件。

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

https://stackoverflow.com/questions/28573256

复制
相关文章

相似问题

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