2012-10-07 77 views
2

可能重複:
Delphi: How to print a PDF without showing it?PDF打印成垃圾與Brother打印機

我遇到不同的行爲,而在不同的打印機上打印。 在我的打印機上,PDF打印是正確的,但使用「Brother」打印機時,相同的PDF將打印爲亂碼(打印文件的內容)。如果使用Adobe Reader將相同的PDF文件直接發送到打印機,則它也會在兄弟打印機上正確打印。

要打印PDF文件,我使用LoadFromFile函數讀取TMemoryStream對象中的內容。指定的docinfo值如下所示 -

DocInfo.pDocName := pChar('My Document'); 
DocInfo.pOutput := Nil; 
DocInfo.pDatatype := pChar('RAW'); 

之後使用WritePrinter功能,該命令被髮送到打印機句柄。

在我看來,好像兄弟打印機無法讀取PDF編碼格式。

讚賞這方面的任何幫助。

P.S:我的應用程序在Delphi4中。

+0

@ Jeroen,我已經嘗試使用ShellExecute命令打印相同的PDF,如下ShellExecute(Application.Handle,'printto','Filename',PChar(printerInfo),nil,SW_HIDE);但是,由於這一點,我能夠打印它,但另一方面,它會打開一個惱人的Adobe閱讀器彈出窗口。有沒有我錯過的選項來隱藏這個彈出窗口。謝謝。 – Vic

+0

@Vic歡迎來到stackoverflow。請閱讀我的答案提及的其他選項。另外:你應該評論一個答案,而不是問題。這是發佈答案的人會收到評論通知的唯一途徑。 –

回答

3

WritePrinter用於sending raw printer specific data to a printer

有些打印機可以理解PDF,有些則不理解。

您應該有一個理解PDF的應用程序將其打印到打印機。

許多應用程序都可以做到這一點,最突出的當然是Adobe Reader

This answer shows three ways of doing that:Adobe Reader ActiveX,Adobe Reader應用程序,GhostView/GhostPrint。它還引用了其他一些方法。

+0

謝謝Jeroen。我擔心的是,當我使用WritePrinter讀取併發送命令時,所有內容都被打印爲垃圾,但直接將文檔發送到打印機沒有問題。這隻適用於Brother打印機,對於其他打印機沒有問題。此外,我試圖檢查在帖子中提供的其他選項,但不幸的是我的應用程序是在Delphi 4中,所以沒有很多第三方組件可用,我不確定是否會被允許購買第三方組件。我可以直接將文檔發送到打印機,但生成的Adobe彈出窗口看起來不太好。 – Vic

+0

@Vic我的答案中提到的Adobe Reader解決方案很可能也適用於Delphi 4,但請記住,Delphi 4是德爾福有史以來最有問題的版本之一。 –