繁体   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