繁体   English   中英

pyPdf PdfFileReader与PdfFileWriter

[英]pyPdf PdfFileReader vs PdfFileWriter

我有以下代码:

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 ...但是现在这...为什么PdfFileReader相差这么多从PdfFileWriter

有人可以解释吗? 我希望这样的事情:

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()是做什么的?

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)

第三个将JUST CREATED(!)对象传递给output_PDF ,为什么?

问题基本上是PDF交叉引用表。

这是一个杂乱的意大利面条怪兽,涉及页面,字体,对象,元素,所有这些都需要链接在一起以允许随机访问。

每次文件更新时,都需要重建该表。 该文件首先在内存中创建,因此只需执行一次,从而进一步减少了破坏文件的可能性。

output_PDF = PdfFileWriter()

这将在内存中创建供PDF使用的空间。 (从旧的pdf中提取)

output_PDF.addPage(input_file.getPage(page_num))

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

output_PDF.write(output_file)

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

编辑:大概是,JUST CREATED标志表明PyPDF开始建立适当的表并将事物链接在一起。

-

回应为什么vs .txt和csv:

从文本或CSV文件复制时,没有现有的数据结构可以理解和移动,以确保正确保存和创建格式,图像放置和表单数据(输入节等)之类的东西。

之所以很有可能这样做是因为PDF并不是完全线性的-“标题”实际上位于文件的末尾。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM