簡體   English   中英

通過自動化在MS Word中設置正確的打印機

[英]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.pPortnamelPrintSetup.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上的打印機名稱:”

我想到了。 Word具有“ NE01上的打印機名稱:”形式的打印機名稱。 Ne01:是win.inidevice部分中指定的打印機端口。 因此,現在我_PRINTER_INFO_2.pPrinterName + ' on ' + <PrinterPort from win.ini>打印機名稱組成為_PRINTER_INFO_2.pPrinterName + ' on ' + <PrinterPort from win.ini>並為FilePrintSetup對話框的打印機屬性設置該名稱。

這比求助於我在問題中提到的跟蹤和錯誤方法要好得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM