我正在尝试使用PyPDF2将.exe文件附加到PDF中。
我运行了代码。它可以完美运行,但是我的PDF文件大小仍然相同。我不知道我的文件是否已附加。
这是我想要做的:
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input1 = PdfFileReader(open ("doc1.pdf", "rb"))
#check it's whether work or not
print("doc1 has %d pages" % input1.getNumPages())
output.addAttachment("doc1.pdf","client.exe")
我不知道我是否做对了。如果有人知道,请帮助我。
首先,您必须正确使用PdfFileWriter类。
您可以使用appendPagesFromReader将页面从源PDF(“ doc1.pdf”)复制到输出PDF(例如“ out.pdf”)。然后,对于addAttachment,第一个参数是要附加文件的文件名,第二个参数是附件数据(文档中尚不清楚,但必须是类似字节的序列)。要获取附件数据,可以在binary mode中打开.exe文件,然后在read()
中打开。最后,您需要使用read()
actually将PdfFileWriter对象保存到actual PDF文件。
这里是一个更有效的示例:
write
接下来,要检查附加是否成功,您可以使用from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input_pdf = PdfFileReader("doc1.pdf")
output.appendPagesFromReader(input_pdf)
with open("client.exe", "rb") as exe:
output.addAttachment("client.exe", exe.read())
with open("out.pdf", "wb") as f:
output.write(f)
比较附加.exe文件前后的文件大小(以字节为单位)。>>
以下是检查文件大小的相同示例:(我正在将Python 3.6+用于f字符串
)os.stat.st_size
上面的代码打印出来
os.stat.st_size
...这表明.exe文件已添加到PDF。
当然,您可以通过在Adobe Reader中打开PDF进行手动检查:
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
output = PdfFileWriter()
print(f"size of SOURCE: {os.stat('doc1.pdf').st_size}")
input_pdf = PdfFileReader("doc1.pdf")
output.appendPagesFromReader(input_pdf)
print(f"size of EXE: {os.stat('client.exe').st_size}")
with open("client.exe", "rb") as exe:
output.addAttachment("client.exe", exe.read())
with open("out.pdf", "wb") as f:
output.write(f)
print(f"size of OUTPUT: {os.stat('out.pdf').st_size}")
[作为旁注,我不确定要将exe文件附加到PDF时要做什么,但是似乎可以附加它们,但是size of SOURCE: 42942
size of EXE: 989744
size of OUTPUT: 1031773
可能无法打开。您可以使用上面相同的代码来附加另一个PDF文件(或其他文档),而不是附加一个可执行文件,它仍然可以工作。
感谢它的工作,但引发了此错误我知道为什么我会收到此错误吗?