我想將兩個PDF文檔與Python合併(在現有文檔中預先製作一個封面)並將結果呈現給瀏覽器。我目前使用PyPDF2庫,它可以很容易地執行合併,但PdfFileWriter類write()方法似乎只支持寫入文件對象(must support write() and tell() methods)。在這種情況下,沒有理由觸摸文件系統;合併的PDF已經在內存中,我只想發送Content-type頭文件,然後將文檔發送到STDOUT(通過CGI瀏覽器)。有沒有比PyPDF2更適合將文檔寫入STDOUT的Python庫?或者,是否有辦法將STDIO作爲參數傳遞給PdfFileWriter的write()方法,使其看起來像write()一樣是一個文件句柄? ()將文檔寫入文件系統,然後打開生成的文件並將其發送到瀏覽器,但在這種情況下(這不是一種非常不雅觀的選擇),這不是一個選項。使用Python將PDF寫入STDOUT
解決方案
使用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()
我猜你試過傳遞'sys.stdout'?這可能不支持'.tell' ...如果是這種情況,你可以寫一個'cStringIO.StringIO'(或'io.BytesIO')實例,然後將_that_的內容寫入stdout ... – mgilson
This完美地工作。我使用PdfFileMerger寫入一個cStringIO對象,然後在該對象上調用一個sys.stdout.write().getvalue()。謝謝! – Riblet
我想我會作爲答案張貼,所以我們可以關閉這一個... – mgilson