可能重复:
how to set pdf page settings to print properties dialog?
我使用SSRS或使用HTML到PDF组件生成大量PDF。我想为每个文档做的是将第一页设置为打印到纸盘1和后续页面。
有没有这样做? System.Drawing.Printing和System.Printing似乎是很好的候选者,但它们似乎对PDF没有用(我可能错了)。 Adobe sdk乍一看似乎没有这种级别的粒度。
答案 0 :(得分:2)
您是否尝试在要打印的机器上的打印选项中创建配置文件?您可以为第1页和后续页面指定不同的纸张来源。在我看来,这正是你正在寻找的。 p>
答案 1 :(得分:1)
据我所知,您无法在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格式,然后在打印前为每个页面指定托盘,但就我而言知道这最后一部分是特定于设备的(我可能错了)。
答案 2 :(得分:0)
这在PDF中无法解决,因为PDF与硬件无关。
JDF就是为此而开发的,但只有印刷厂能够处理它。