我有報告說我正在發送到需要報告爲可讀PDF格式的系統。我嘗試了所有免費的圖書館和應用程序,而我發現的唯一工作是Adobe的acrobat系列。使用Python,win32api和Acrobat Reader打印PDF文件9
我在python中編寫了一個快速腳本,它使用win32api以默認註冊應用程序(Acrobat Reader 9)將PDF打印到我的打印機,然後在完成後終止任務,因爲acrobat喜歡在從命令行。
予編譯成一個可執行與通過命令行 中的值傳遞(例如printer.exe%OUTFILE%%PRINTER%),這是一個隨後批處理文件
import os,sys,win32api,win32print,time
# Command Line Arguments.
pdf = sys.argv[1]
tempprinter = sys.argv[2]
# Get Current Default Printer.
currentprinter = win32print.GetDefaultPrinter()
# Set Default printer to printer passed through command line.
win32print.SetDefaultPrinter(tempprinter)
# Print PDF using default application, AcroRd32.exe
win32api.ShellExecute(0, "print", pdf, None, ".", 0)
# Reset Default Printer to saved value
win32print.SetDefaultPrinter(currentprinter)
# Timer for application close
time.sleep(2)
# Kill application and exit scipt
os.system("taskkill /im AcroRd32.exe /f")
這似乎內調用在3-4小時內爲大量工作〜2000份報告,但我有一些下降,我不知道腳本是否被壓倒,或者如果我應該看看多線程或其他東西。
事實上,它處理如此大量的數據而沒有丟棄,這讓我相信問題不在於腳本,但我不確定它是否與主機系統或Adobe Reader或其他問題有關。
任何建議或意見將不勝感激。
'win32api.ShellExecute()'是否同步?即是否等到AcrobatReader完成打印? – 2012-03-13 16:34:09
根據文檔我不這麼認爲,這就是爲什麼我設置計時器,我總是可以擴展時間範圍。我考慮了產卵過程,以便我可以知道應用程序何時結束。問題是我不知道打印作業何時在打印機上實際打印。它的變量取決於網絡流量,打印命令需要處理多長時間。 – dwtorres 2012-03-13 21:29:08
我對你的第一句話有點困惑;什麼不適用於「免費圖書館和應用程序」?打印的PDF是不可讀的,還是根本沒有打印,或者它們是否無法創建正確的PDF? – 2012-03-14 08:32:54