首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制pdf的打印选项

控制pdf的打印选项
EN

Stack Overflow用户
提问于 2012-11-06 16:58:04
回答 3查看 1K关注 0票数 1

可能重复: 如何设置pdf页面设置打印属性对话框?

我正在使用SSRS或使用HTML到PDF组件生成许多PDF。对于每个文档,我要做的是将要打印的第一页设置为托盘1和后续页。

有这样的事吗?System.Drawing.Printing和System.Printing似乎是很好的候选人,但它们似乎对PDF没有用(我可能错了)。乍一看,Adobe似乎也没有这样的粒度。

EN

回答 3

Stack Overflow用户

发布于 2012-11-07 13:45:06

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

票数 2
EN

Stack Overflow用户

发布于 2012-11-07 14:39:15

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

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

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

MSDN中的这篇文章可能有助于:

如何使用DocumentProperties()函数修改打印机设置

在Amyuni中,可以在调用Document.Print方法之前将DEVMODE结构设置为document对象。

代码语言:javascript
复制
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格式,然后在打印它之前指定每个页面的托盘,但据我所知,最后一部分是特定于设备的(我可能错了)。

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 09:40:34

这在PDF中是不能解决的,因为PDF是硬件无关的。

JDF是为此开发的,但只有印刷公司才能处理这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13255770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档