可能重复: 如何设置pdf页面设置打印属性对话框?
我正在使用SSRS或使用HTML到PDF组件生成许多PDF。对于每个文档,我要做的是将要打印的第一页设置为托盘1和后续页。
有这样的事吗?System.Drawing.Printing和System.Printing似乎是很好的候选人,但它们似乎对PDF没有用(我可能错了)。乍一看,Adobe似乎也没有这样的粒度。
发布于 2012-11-07 13:45:06
您是否尝试在正在打印的机器上创建打印选项中的配置文件?您可以为第1页及其后的页指定不同的纸张来源。在我看来,这正是你要找的。
发布于 2012-11-07 14:39:15
据我所知,您不能在PDF文件本身中指定这类信息。您在打印应用程序中确实有几个选项:
选项1:使用P/Invoke和商业库Amyuni创造者ActiveX (通常适用免责声明)
对于带有自定义配置的静默打印,可以尝试使用Win32 API。您需要创建一个DEVMODE结构,并在打印过程中使用它。
MSDN中的这篇文章可能有助于:
如何使用DocumentProperties()函数修改打印机设置
在Amyuni中,可以在调用Document.Print方法之前将DEVMODE结构设置为document对象。
byte[] devmode = GetMyDevModeAsByteArray();
pdfCreator1.Document.AttributeByName(”PrinterDevMode”).Value = devmode;我必须说,我还没有测试过这个。在“PrinterDevMode”属性上使用的DEVMODE结构是由ActiveX控件本身通过显示打印设置对话框来生成的,但是我认为如果它是通过其他方法获得的,那么它是安全的,因为在所有情况下最终定义结构的都是打印机驱动程序。如果我有时间的话,我可以稍后再测试这个。
还可以根据PDF文件中为每个页面指定的页面大小选择一个纸盘。因此,如果这是您真正想要实现的,您可以使用"FormToBinMap“文档属性来配置您想要用于每个页面大小的托盘。在这种情况下,您不需要自定义DEVMODE结构。
选项2:使用WPF的:
如果您使用WPF,并且目标打印机提供XPS驱动程序,则可以使用PrintTicket.InputBin执行此操作。
来自MSDN:
PrintTicket.InputBin属性:
获取或设置一个值,该值指示要使用的输入框(纸盘)。
您可以使用.Net或ActiveX将您的PDF文件转换为XPS。
或者,如果GPL许可证适合您的需要,您可以使用鬼脚本将文件转换为光栅图像,然后使用用XPS文件包装。
选项3:
如果您的目标打印机是PostScript打印机,您可以将文件拆分为1页文件,然后使用幽灵脚本将每个文件转换为PostScript格式,然后在打印它之前指定每个页面的托盘,但据我所知,最后一部分是特定于设备的(我可能错了)。
发布于 2012-11-07 09:40:34
这在PDF中是不能解决的,因为PDF是硬件无关的。
JDF是为此开发的,但只有印刷公司才能处理这个问题。
https://stackoverflow.com/questions/13255770
复制相似问题