[英]Setting correct printer in MS Word through automation
我有以下自動化代碼:
lPrintSetup := fWordObject.Application.Dialogs.Item(wdDialogFilePrintSetup);
lPrintSetup.Printer := 'MyPrinter';
lPrintSetup.DoNotSetAsSysDefault := True;
lPrintSetup.Execute;
lPrintSetup := Null;
Printer
屬性給我一些問題,有時由於錯誤的打印機名稱而導致EOleException(0x800A1460(錯誤代碼5216):存在打印機錯誤)導致Execute
崩潰。
我通過EnumPrinters API調用獲得的_PRINTER_INFO_2
記錄中具有所有打印機的打印機信息。 給定_PRINTER_INFO_2
記錄中的信息,如何為Word組成正確的_PRINTER_INFO_2
? 它至少可與Windows 2000,Word 2000和Citrix一起使用。
一些背景信息:
我們的應用程序首先用一個自建的打印機名填充Printername。 這給Citrix客戶端帶來了問題,因此對於Citrix客戶端,我們采用_PRINTER_INFO_2.pPortName
並刪除了Client:#:部分。 這適用於大多數客戶,但有時仍會顯示打印機錯誤。
到目前為止,我已經嘗試過(在Windows XP SP3,Word 2007上):
_PRINTER_INFO_2.pPrinterName
。 問題是,當您有意修改打印機名稱時(將“ PDFCreator”重命名為“ MYPC上的HP DESKJET 520”),它將在后者上崩潰(在Word中選擇此打印機時有效)。 lPrintSetup.Printer := PRINTER_INFO_2.pPrinterName + ' on ' + PRINTER_INFO_2.pPortname
: lPrintSetup.Printer := PRINTER_INFO_2.pPrinterName + ' on ' + PRINTER_INFO_2.pPortname
。 似乎總是可以工作! 但是谷歌搜索顯示“ on”已本地化,因此我不確定這是否適用於非英語的Windows版本。 編輯:並不總是工作:( 我在網上找到的另一個解決方案:
從Word讀取打印機名稱時,其格式為“ Ne01:上的打印機名稱”,其中Ne01的范圍從Ne00:到Ne99:。 該解決方案建議采用打印機名稱,並嘗試在從Ne00:到Ne99:循環時進行設置。 當.Execute不崩潰時,您已經找到了正確的選擇。 我不太喜歡這種“跟蹤與錯誤”方法。
我不確定您是否嘗試過此方法,或者它是否有任何用途,但是您可以從Printer.Printers對象獲取系統上所有打印機的列表,確保將Printers添加到設備的Uses子句中。
然后,這應該列出系統上的實際名稱,您也許可以使用此信息來執行所需的操作。
如前所述,您可以使用Printer.Printers獲取一個打印機名稱列表,該列表是一個TStringList,其中每個項目均帶有打印機名稱。
此代碼提供默認的打印機名稱
Printer.Printers[Printer.PrinterIndex]
幾分鍾前,我了解到,word2k不僅希望使用打印機名稱,例如“ Ne01上的打印機名稱:”,還希望端口(NEnn)大寫“ NE01上的打印機名稱:”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.