2012-05-17 85 views
2

我可能會用我的問題吠叫錯誤的樹,所以我會試着對問題進行徹底的描述。當-sDEVICE是圖像格式時,將多個頁面打印到%打印機%?

我們有一個Windows服務需要一個XML文件並生成PDF。然後,根據XML文件中的數據,使用-sOutputFile="%printer%"參數,然後輸入我們的網絡打印機之一的名稱,將生成的PDF輸出到Ghostscript。

我們以前使用-sDEVICE=mswinpr2,但是這產生了大約70-80MB的打印命令,當我們在本地網絡上時這並不是特別有用。既然我們有一個用於多個站點的中央打印服務器,考慮到這些荒謬的文件大小,這些PDF的打印時間已經變得天文數字。正在使用中產生

這些文件:

" -sDEVICE=mswinpr2 -sPAPERSIZE=a4" _ 
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel" _ 
& " -sOutputFile=""%printer%" & [somePrinter] & """" 

我一直在使用Ghostscript的設置玩弄我想我會發現PNG圖片的答案,使用下面的Ghostscript命令:

" -sDEVICE=png16m -r600x600 -sPAPERSIZE=a4" _ 
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel -dQUIET" _ 
& " -sOutputFile=""%printer%" & [somePrinter] & """" 

這適用於單頁,對於單頁文檔僅生成大約150kb的數據,但在多頁上僅打印第一頁。我已經通過輸出到文件而不是打印機進行了一些測試,結果發現某種奇怪的多頁PNG正在創建,我認爲打印機正在變得混亂。

實際問題:

我唯一真正這裏約束是,我需要一個PDF文件作爲輸入,並直接輸出到打印機,無需用戶交互,和一個小的文件大小。

有人可以推薦我一個GhostScript設置(或GhostScript的替代品),將實現這一點,因爲我的想法用完了?

+0

您是否嘗試過使用實際打印機的其他驅動程序(如果可用)(大文件大小可能是驅動程序問題)?除此之外,您可以嘗試[PDFCreator](http://sourceforge.net/projects/pdfcreator/files/latest/download),但它可以在沒有用戶交互的情況下打印,儘管您已經創建了PDF文件。 – drcelus

+0

我想我可能不得不嘗試。我一直在向一臺特定型號的打印機發送測試照片。只用一頁打印輸出了另一個模型,它開始嘔吐出數百頁的亂碼。我想它不支持PNG打印:( – Frosty840

回答

2

mswinpr2設備使用Windows打印系統來處理大量不同的打印機。它通過將傳入文件渲染到位圖,將位圖傳送到打印機設備上下文,然後告訴設備上下文打印到打印機來工作。顯然,高分辨率的全綵色頁面可以產生相當大的位圖。 600頁的A4頁面,CMYK色彩約爲130Mb(8.26 * 600 * 11.69 * 600 * 4)

因此,您總是最終將位圖發送到打印機。當然這可能很大,打印機通常會理解一些打印語言,這些打印語言可以使輸出變小,但這將需要Ghostscript'瞭解'打印機併產生正確的輸出。 mswinpr2的美妙之處在於它利用操作系統來完成繁重的工作。缺點是它總是生成位圖,但至少它可以打印到Windows支持的任何打印機。

看來你很幸運你的第一個打印機,它理解PNG,大多數打印機不這樣做,因爲你已經發現,並且將處理傳入的數據作爲本地打印機數據。這種效果可能是任何事情,但它不太可能產生任何有用的打印輸出。

如果你知道一個給定的打印機支持PCL或PostScript,那麼你可以使用適當的Ghostscript的設備添加到您的PDF文件轉換成這些語言中的一種(PCL文件可能仍然是巨大的)。

請注意,包含透明度的PDF文件仍然必須被轉換,至少部分地,位圖,因爲沒有其他打印語言支持的透明度PDF的概念。

我看到你自己發現了這個。我會建議您使用ps2write而不是pswrite,它會產生運行速度更快的更小的輸出。此外,pswrite設備已被棄用且不再受支持。

您應該也可能設置適合您的打印機的分辨率。 ps2write有時很難將頁面的區域渲染爲位圖(例如PDF透明),並使用分辨率參數來決定要創建的圖像的分辨率。默認值爲720dpi,幾乎可以在任何設備上打印。然而,它的方式過大,大多數設備和將再次產生大的位圖在一定條件下(開羅製作PDF文件是特別容易出現這種問題,因爲他們宣稱每一頁的整個部分是透明的)

+0

)謝謝。標記爲已回答,因爲它比我在決定解決方案時獲得的信息多得多,只是在寫[Devices]時寫給未來的讀者的一個提示, (http://ghostscript.com/doc/current/Devices.htm)頁面的GS文檔將指向您[ps2ps2](http://ghostscript.com/doc/current/Ps2ps2.htm)頁面以獲取詳細信息ps2write。帶了我一些落後的搜索,以瞭解爲什麼谷歌找不到一個實際的「ps2write」頁面的鏈接。 – Frosty840

1

我最終的解決方案是使用-sDEVICE=pswrite而不是-sDEVICE=png16m -r600x600

這個輸出在PostScript,這是我們所有的打印機都能夠解釋的。

所以,不是一個答案,可悲的是,但仍然是一個解決方案。