您可以使用 Microsoft Print to PDF 打印机将 XPS 转换为 PDF 文件吗?

Posted

技术标签:

【中文标题】您可以使用 Microsoft Print to PDF 打印机将 XPS 转换为 PDF 文件吗?【英文标题】:Could you use Microsoft Print to PDF printer to convert an XPS to a PDF file? 【发布时间】:2021-06-06 10:26:56 【问题描述】:

我正在尝试使用 Microsoft Print to PDF 打印机将 XPS 转换为 PDF。

我尝试使用 GhostReader 通过命令行转换我的 XPS 文件,还尝试使用 PdfSharp.Xps。这两个都太慢了,一个 10 页的 XPS 文件需要 30 多秒。现在我的问题是,当我使用 Microsoft 打印到 PDF 时,是否可以设置打印的输入和输出文件/路径

string fileGuid = Guid.NewGuid().ToString();
string xpsFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"fileGuid.Print.xps");
string pdfFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"fileGuid.Print.pdf");

PrintDocument doc = new PrintDocument()

    DocumentName = xpsFile,
                
    PrinterSettings = new PrinterSettings()
    
            PrinterName = "Microsoft Print to PDF",
            PrintToFile = true,
            PrintFileName = pdfFile,
    
                
;
doc.Print();

这是我尝试过的。但这会创建一个我无法使用的空 .PDF 文件

【问题讨论】:

【参考方案1】:

您可以查看LEADTOOLS SDK(免责声明:我是该供应商的员工),它实际上支持在 C# 中加载和保存 XPS 文件,因此您无需使用打印机进行转换,您可以简单地做它直接在你的应用程序中:https://www.leadtools.com/sdk/formats#document

因此,您可以使用该工具包简单地加载 XPS 并使用以下代码和 nuget 包将其保存为 PDF:

Install-Package Leadtools.Document.Sdk -Version 21.0.0.2

using (DocumentConverter documentConverter = new DocumentConverter())
    
    documentConverter.SetDocumentWriterInstance(new DocumentWriter();

    foreach (var filename in inputFiles)
    
        var jobData = new DocumentConverterJobData();
        jobData.InputDocumentFileName = "input.xps";
        jobData.DocumentFormat = DocumentFormat.Pdf;
        jobData.OutputDocumentFileName = "output.pdf");

        var job = documentConverter.Jobs.CreateJob(jobData);
        documentConverter.Jobs.RunJobAsync(job);
    

这里有一个关于如何实现这一点的完整教程:https://test.leadtools.com/help/sdk/v21/tutorials/documents/cross-platform/dotnet-core/convert-files-with-the-document-converter.html

如果您更愿意使用打印机来执行该功能,还有支持 XPS -> PDF 转换的虚拟打印机驱动程序: https://www.leadtools.com/help/sdk/v21/tutorials/virtual-printer/windows/dotnet/print-to-file-using-the-virtual-printer-driver.html

【讨论】:

以上是关于您可以使用 Microsoft Print to PDF 打印机将 XPS 转换为 PDF 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 Microsoft Print to PDF 打印机驱动程序何时完成?

Microsoft print to pdf 现在打印的pdf无法复制搜索怎么回事

如何使用 Windows 10 附带的 Microsoft Print To PDF 打印机以编程方式打印到 PDF 文件而不提示 C# 中的文件名

打印一个反应功能组件

全平台免费通用的Microsoft To Do使用教程

您在 Scope 中发送的内容是不是决定您是不是可以使用 Azure AD V2 终结点使用 Microsoft 帐户登录