delphi - 保存打印机设置参数

标签 delphi printing

我正在使用 Delphi 2006 编写一个程序,并将数据存储在 XML 文件和 Firebird 数据库中。我使用 FastReports、Excel 或 QuickPDF 创建报告。我允许用户将多个报告打包在一起,并定向到他们选择的目的地,无论是 PDF 文件、打印机、屏幕还是电子邮件。

我希望我的用户能够为发送到打印机的报告配置打印机选择。为此,我将使用打印机对话框来选择打印机并设置该打印机的属性。我希望能够捕获这些属性并存储它们,以便当他们运行报告包时,它们都将使用他们选择的配置转到正确的打印机。

我知道不同的打印机有不同的配置可能性。例如,我使用的一个允许我选择打印小册子样式,这样您就可以从报告中生成 5 1/2 X 8 1/2 小册子。当用户在包中配置报告并期望以这种方式打印该报告时,用户可能会选择类似的选项。可能有很多我不知道的可能性,但如果可能的话我愿意允许。我只是不知道如何从打印机对话框中捕获该配置,将其存储在数据库中,然后在打印报告时使用该信息来配置打印机。

如何将打印机对话框中存储的信息转换为可以存储在数据库中(甚至是 blob 中)的信息,然后使用该信息来配置打印机?

感谢您的帮助。

最佳答案

据我所知,这是不可能的。打印机设置对话框是标准的,但经常被替换(或修改)以包含附加的打印机特定设置信息(例如,您提到的小册子信息)。由于除了打印机驱动程序发布者之外的任何人都无法知道那里有什么,因此无法以通用方式可靠地获取信息。

Jeroen 提到的 GetPrinterDataEx() API 函数也不起作用,因为它要求您提前知道用于通过 SetPrinterDataEx() 过程存储信息的注册表项的名称,这可能或打印机驱动程序可能尚未使用。如果使用它,您必须手动查看注册表以查看驱动程序发布者决定存储信息的位置;我怀疑打印机制造商之间的情况也有所不同。

后续:我刚刚进行了快速检查,我很确定上述内容是正确的。如果我使用 Delphi 应用程序中的“打印机设置”对话框来访问打印机设置(例如,运行报告之前的双面设置),则不会将任何更改写入注册表。但是,如果我进入控制面板打印机小程序并更改其中的设置,注册表就会更新。这似乎证实了用户即时做出的每个报告设置选择将很难保存,因为除了打印机驱动程序之外,它们可能无法在任何地方访问。永久类型设置(在控制面板小程序中进行的设置)由用户进行,并且用户选择使它们在系统范围内永久化,因此它们被保存到注册表中。这似乎妨碍了在每个报告的基础上保存这些类型的选项,至少在打印机设置对话框更改中是如此。

关于delphi - 保存打印机设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1602068/

相关文章:

delphi - 跨平台开发-Delphi 2011 : How to made a Windows-tied library cross-platform?

delphi - 在哪里可以获得 Excel 式多项式回归曲线拟合的 Delphi/Pascal 实现?

html - 打印时为每页添加边框,没有任何边框中断

r - 打印数据框时如何不重复相同的值?

ios - Delphi XE4 iOS无法连接PAServer

mysql - 如何最好地在 MySql 中存储日期/时间?

javascript - 在 ASP.NET 中打印由分页符分隔的所有页面

python - 类型错误 : unsupported operand type(s) in "print >> ..." statement

javascript - 使用 javascript 从浏览器中的流进行打印

delphi - Delphi 中用于命令提示符的管道