如果打印到PRN文件,为什么扩展属性会丢失

时间:2019-02-12 20:36:33

标签: windows printing driver print-spooler-api

如果直接打印到打印机,则打印机设置对话框的所有扩展属性都将起作用,例如装订,缩放到50%或在文档上加水印。它们对于打印机修整器按预期工作非常重要。

但是,如果我先打印到文件,然后将文件复制到打印机,则所有扩展属性在HP Laserjet(PCL)上都会丢失。

为了重现这一点,我也在Delphi中使用非常简单的代码对其进行了模拟。 在按预期正常打印到打印机后,我仅将DocInfo中的lpszOutput更改为“ ... \ test.prn”(不多!),并且生成了prn文件。 然后,我以二进制模式打开文件并将其写入同一台打印机(“ StartDocPrinter”,“ WritePrinter”,“ EndDocPrinter”)。 然后正确打印了文档,但是扩展属性中的所有设置都丢失了,没有缩放比例,没有水印。

我认为,打印机应该获得完全相同的二进制数据流,但是请问可能是什么原因,很明显,驱动程序将不同的内容写入prn文件,而将不同的内容写入打印机? 还是有一些必须通过代码设置的标志或命令?这是HP的特定问题吗? 谢谢你。

1 个答案:

答案 0 :(得分:0)

在这两种情况下,您是否都调用PrintDlgEx或PageSetupDlg?

属性位于打印作业的DEVMODE结构中,驱动程序在渲染作业时会使用该结构。听起来好像在设置lpszOutput时未正确设置DEVMODE或将其忽略。您看到的行为与取消选中打印机的“启用高级打印功能”复选框时非常相似。

有一些有关使用print dialog with lpszOutput here的信息。