使用Python将PDF写入STDOUT

时间:2014-06-24 13:31:01

标签: python pdf stdout

我想将两个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()

1 个答案:

答案 0 :(得分:1)

Python通过cStringIO.StringIO(或io.BytesIO,...取决于python版本)支持“内存中”文件类型。在您的情况下,您可以创建其中一个类的实例,将其传递给需要文件的方法,然后您可以使用.getvalue()方法将内容作为字符串返回(或者根据python版本返回字节) )。将内容作为字符串后,您只需print或使用sys.stdout.write将字符串写入标准输出。