c# - 使用 System.Print 在 "Microsoft Print to PDF"打印机

我想保存一个IDocumentPaginatorSource,例如FixedDocumentXpsDocument,使用虚拟打印机“Microsoft Print to PDF”作为 PDF:

var printServer = new System.Printing.PrintServer();
var queue = printServer.GetPrintQueue("Microsoft Print to PDF");
var writer = System.Printing.PrintQueue.CreateXpsDocumentWriter(queue);
writer.Write(Document.DocumentPaginator); // Document = IDocumentPaginatorSource

这有效,但会使打印机打开一个文件保存对话框。我想以编程方式设置文件名,然后完全取消此对话框或至少在对话框中设置初始文件名。这可能吗?

我知道,这可以在使用 System.Drawing.Printing.PrintDocument 时通过设置 PrinterSettings.PrintFileNamePrinterSettings.PrintToFile 来完成(参见 1 、 2 ),但这是不支持 IDocumentPaginatorSource 的旧打印框架。

我检查了 System.Printing 命名空间中的所有类,但没有找到任何方法来设置这两个设置。也许可以通过 extending the print schema 将这些设置改造成 PrintTicket ?如果是这样,您具体会怎么做?

最佳答案

我没有使用“Microsoft 打印到 PDF 打印机”的解决方案,但如果您切换到使用 Win2PDF打印机驱动程序,您可以通过注册表以编程方式设置文件名。为此,请参阅 "PDFFileName" or "PDFDefaultFileName" 的文档注册表设置。

关于c# - 使用 System.Print 在 "Microsoft Print to PDF"打印机中设置文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291023/

相关文章:

angular - 在 Azure 应用服务上部署多个 Angular 单页应用程序

c# - Mac OS 上的 unity 3d build 问题

vue.js - 如何使用 vue.js 和 element-ui 的文件上传组件在上传到服务器之前

django-rest-framework - 是否可以将搜索过滤器与查找表达式不是 `exact`

airflow - 无法在 GCP 上创建 Composer 环境

reactjs - 为什么脚本评估需要这么长时间?

python - 在数据框中查找特定元素的列名

python - Python 3 中的 XMPP 线程接收器

flutter - 如何在Flutter中真正使用SizeTransition?

unit-testing - 在作为 Prop 传递的函数上调用 Jest spyOn