【问题标题】:Controlling the print options of a pdf [duplicate]控制 pdf 的打印选项 [重复]
【发布时间】:2012-10-26 16:27:15
【问题描述】:

可能重复:
how to set pdf page settings to print properties dialog?

我正在使用 SSRS 或 HTML 到 PDF 组件制作大量 PDF。我想要为每个文档做的是将要打印的第一页设置到纸盘 1 和后续页面。

有没有办法做到这一点? System.Drawing.Printing 和 System.Printing 似乎是不错的候选者,但它们似乎对 PDF 没有用(我可能错了)。 Adobe sdk 乍一看似乎也没有那种粒度级别。

【问题讨论】:

  • 我感觉 GhostScript 可以解决我的问题。

标签: .net pdf printing


【解决方案1】:

您是否尝试在要打印的机器上的打印选项中创建配置文件?您可以为第 1 页和后续页面指定不同的纸张来源。在我看来,这正是您想要的。

【讨论】:

  • 您能否提供一个代码示例,说明如何以编程方式执行此操作?
【解决方案2】:

据我所知,您无法在 PDF 文件本身中指定此类信息。 打印应用程序确实有几个选项:

选项 1:使用 P/Invoke 和商业库 Amyuni PDF Creator ActiveX(通常适用免责声明)

对于使用自定义配置的静默打印,您可以尝试使用 Win32 API。您需要创建一个 DEVMODE 结构,并在打印过程中使用它。

MSDN 中的这篇文章可能会有所帮助:
How To Modify Printer Settings with the DocumentProperties() Function

在 Amyuni PDF Creator ActiveX 中,您可以在调用 Document.Print 方法之前为文档对象设置 DEVMODE 结构。

byte[] devmode = GetMyDevModeAsByteArray();
pdfCreator1.Document.AttributeByName(”PrinterDevMode”).Value = devmode;

我必须说我没有测试过这个。 “PrinterDevMode”属性上使用的 DEVMODE 结构是由 ActiveX 控件本身通过显示打印设置对话框生成的,但我认为可以安全地假设它可以通过其他方式获得,因为在所有情况下,最终定义结构的是打印机驱动程序。 如果我有时间,我可以稍后测试。

Amyuni PDF Creator 还可以根据为 PDF 文件中的每个页面指定的页面大小选择纸盘。因此,如果这是您真正想要实现的目标,您可以使用"FormToBinMap" document attribute 来配置您要为每个页面尺寸使用的托盘。在这种情况下,您不需要自定义 DEVMODE 结构。

选项 2: 使用 WPF:

如果您使用 WPF,并且如果目标打印机提供 XPS 驱动程序,那么您可以使用 PrintTicket.InputBin 执行此操作

来自 MSDN:

PrintTicket.InputBin 属性:

获取或设置一个值,指示要使用的进纸槽(纸盘)。

您可以使用 Amyuni PDF Creator .Net 或 ActiveX 将您的 PDF 文件转换为 XPS。
或者,如果 GPL 许可证适合您的需要,您可以使用 ghostscript 将您的文件转换为光栅图像,然后 wrap that in XPS files

选项 3:

如果您的目标打印机是 PostScript 打印机,您可以将文件拆分为 1 页文件,然后使用 ghostscript 将每个文件转换为 PostScript 格式,然后在打印之前为每页指定托盘,但据我所知知道最后一部分是特定于设备的(我可能错了)。

【讨论】:

    【解决方案3】:

    这在 PDF 中无法解决,因为 PDF 与硬件无关。

    JDF 是为此而开发的,但只有印刷厂才能处理。

    【讨论】:

    • 有没有办法设置默认打印选项
    猜你喜欢
    • 2017-07-27
    • 2017-12-16
    • 2017-06-04
    • 2013-07-01
    • 2012-10-18
    • 1970-01-01
    • 2015-08-23
    • 2013-11-07
    相关资源
    最近更新 更多