0

我正在尝试在 MS-Word 中打印文档。通过 TWordApplication 或 OleVariant 对我来说都可以。我们的打印机可以选择打印。我们使用具有订书钉功能的施乐打印机。当我手动完成所有操作时,它当然可以正常工作。当我从代码中执行此操作时,我似乎无法使其工作。

据我所知,Delphi 本身没有直接设置订书钉的连接。不是来自代码,也不是来自 MS-Word。我在打印机上设置了 2 种类型的打印作业(高级设置)。一种用于普通打印,一种用于使用 1 个订书钉打印。对于这两种设置,我都进行了导出。然后我尝试在我需要的地方导入设置。不幸的是,打印机驱动程序似乎不喜欢我正在做的事情。每次我尝试导入订书钉的设置时,驱动程序似乎都会从注册表中删除导入并使用其默认值。在我尝试以任何方式覆盖条目“DevMode”后,注册表中的条目被删除并且打印机进入默认模式。

我尝试导入注册表文件,但失败了。我尝试从注册表文件中导入值并使用 WriteBinaryData 写入它,但这会删除 DevMode 条目。我试图从注册表中保存我创建的配置文件信息的另一个注册表值复制注册表值。但是,当我尝试这样做时,似乎什么也没发生。

任何人都可以帮我解决这个问题,据我所知,我尝试了一切,但我似乎无法让它工作。也可能是我对 WriteBinaryData 和 ReadBinaryData 做错了。如果有人能给我一个工作的例子,我会非常感激。

我使用德尔福 XE2。

TIA

4

3 回答 3

0

在 Word 中创建一个执行您想要的操作的宏,然后将此宏复制到您的程序中。显然,您必须对语法进行一定程度的更改。此外,Word(和 Excel)中的宏使用在这些程序中定义但不在 Delphi 中定义的常量,因此您必须发现它们的值是什么,然后在程序中使用这些值。

于 2013-09-17T10:26:52.243 回答
0

DEVMODE结构由打印机驱动程序内部使用,它包括内部数据(甚至驱动程序堆),除非您有制造商提供的详细 HOWTO 表,否则不得修改。您要实现的目标需要比通过 OLE 到达打印机更接近硬件的观点,而且 -很糟糕-如果制造商没有直接为此目的提供 API,甚至无法保证它可以完成。(通常他们不会。)

于 2013-09-17T09:09:25.423 回答
0

您可以使用打印机驱动程序配置启用订书钉吗?如果是这样,请通过在 windows 上安装两次打印机来避免此问题,一次有订书钉,一个没有订书钉,然后在打印时选择您想要的打印机。Word 在 COM API 中有一个属性。我自己使用这种方法来选择不同的纸盘。

于 2013-09-17T12:28:35.620 回答