我正在尋找一個很好的PDF 2圖像轉換器很長一段時間。我需要將PDF轉換爲圖像以便使用Qt進行打印。我使用Python/Pyside進行編程,因此如果我可以使用子進程將PDF轉換爲一系列(PNG)圖像,則可以毫無問題地打印它們。PDF到PNG Python與pdf2cairo
我通過調用Imagemagick中的convert.exe來實現此目的。它工作的很好,但它依賴於GhostScript,這是一個很大的包,我想避免它,因爲它更復雜的集成。
我也試過從GhostScript muPDF,但這似乎沒有標準輸入和標準輸出選項。這是一個遺憾,因爲它首先保存我的文件。用muPDF打開它,轉換並保存它,然後在我的Python應用程序中重新加載它。沒有所有這些步驟應該是可能的!
今天我開始試驗Poppler的pdf2cairo。我認爲它能以這種方式將我的(多頁面)PDF轉換爲一系列圖像並將其傳輸到標準輸出。不幸的是,它沒有,我遇到兩個問題:
- 它抱怨說,它只能導出到標準輸出,當你也使用-singlepage參數。我如何將所有頁面導出到標準輸出?
- 當我出口到stdout我得到的錯誤:
'Error opening output file fd://0.png\r\n
從標準到圖像文件轉換爲PDF是沒有問題的這一切。
這是我的代碼,也觸發有關打開輸出文件中的錯誤:
import subprocess
pdf = open('test.pdf')
p = subprocess.Popen(['pop/pdftocairo.exe', '-singlefile', '-png', '-', '-'],stdin = pdf, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
print(p.stderr.read())
print(p.stdout.read())
我已經下載PDF2Cairo從預編譯:http://blog.alivate.com.au/poppler-windows/ 的pdf2cairo的命令行選項的文檔可以發現這裏:http://manpages.ubuntu.com/manpages/precise/man1/pdftocairo.1.html
希望你能幫助我做出這項工作!
更新 正如你可以看到下面的pdftocairo是越野車,當你想使用標準輸出工作不正常的答案。 pdftoppm不起作用,它返回的是你的PDF文件的字節對象:
pdf = open('test.pdf')
p = subprocess.Popen(['pop/pdftoppm.exe', '-png'],stdin = pdf, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
data, error = p.communicate()
我唯一需要做的就是將字節對象分成多個文件。
非常感謝您的回答。這很清楚。 我剛剛發現,PDF格式爲ppm支持標準輸入和標準輸出,如果你只是離開文件的引用:''pop/pdftoppm.exe','-png'就足以得到一個字節對象與所有的PNG文件。我正在努力分裂這個對象在單獨的文件。但這是另一個問題! – Ecno92
是的,它似乎返回所有單頁作爲pngs流。分割魔法''\ x89PNG''應該不會那麼困難:)奇怪的是,以ppm命名的實用程序也會產生其他格式。 – mata
通過閱讀將我的SSH和GPG密鑰附加到一個錯誤並決定只寫入一個tmp文件,讀取它並將其寫入到所需的流中,我讀到了一半。男人,我喜歡github + pull請求。似乎這已經過去了幾年沒有得到提交/處理。這太糟糕了。 :( – Ricky