我想将两个PDF文档与Python合并(在现有文档中添加预先制作的封面页)并将结果显示给浏览器。我目前正在使用PyPDF2库,它可以很容易地执行合并,但PdfFileWriter类write()方法似乎只支持写入文件对象(must support write() and tell() methods)。在这种情况下,没有理由触摸文件系统;合并的PDF已经在内存中了,我只想发送一个Content-type标题,然后将文档发送到STDOUT(浏览器通过CGI)。是否有一个Python库更适合将文档写入STDOUT而不是PyPDF2?或者,有没有办法将STDIO作为参数传递给PdfFileWriter的write()方法,使得它看起来像write(),好像它是一个文件句柄?
让write()将文档写入文件系统,然后打开生成的文件并将其发送到浏览器,但在这种情况下不是一个选项(除了非常不优雅)。
溶液
使用mgilson的建议,这就是我在Python 2.7中使用它的方法:
#!/usr/bin/python
import cStringIO
import sys
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
###
# Actual PDF open/merge code goes here
###
output = cStringIO.StringIO()
merger.write(output)
print("Content-type: application/pdf\n")
sys.stdout.write(output.getvalue())
output.close()
答案 0 :(得分:1)
Python通过cStringIO.StringIO
(或io.BytesIO
,...取决于python版本)支持“内存中”文件类型。在您的情况下,您可以创建其中一个类的实例,将其传递给需要文件的方法,然后您可以使用.getvalue()
方法将内容作为字符串返回(或者根据python版本返回字节) )。将内容作为字符串后,您只需print
或使用sys.stdout.write
将字符串写入标准输出。