如何通过"Microsoft print to PDF"以编程方式将文件和网页打印成PDF?

4
我正在开发一款使用C#编写的UWP应用程序,并且需要将以下内容转换为PDF格式: - Office文档(doc、docx、xls、xlsx、ppt、pptx) - 图片 - 网页
该应用程序需要在 x86、x64、ARM 和 ARM64 架构中运行。
市场上有许多第三方转换库,但只有少数适用于 ARM64 上下文或 UWP。
我的想法是(在 Windows 10 中)使用“Microsoft PDF 打印机”,允许用户将大多数文件格式保存为 PDF。
我找到了很多关于同样问题的帖子,但没有一个真正包含有用的答案。
我找到并测试了以下代码:
PrintDocument doc = new PrintDocument()
{
//DocumentName = safeDir + fileName,
    PrinterSettings = new PrinterSettings()
    {
        // set the printer to 'Microsoft Print to PDF'
        PrinterName = "Microsoft Print to PDF",

        // tell the object this document will print to file
        PrintToFile = true,


        // set the filename to whatever you like (full path)
        PrintFileName = safeDir + fileName,
    }
};
doc.Print();

上述代码生成了一个有效但空的pdf。 我应该如何设置原始文件内容?

例如,如果我有一个名为myreport.docx的Word文件,我应该将其转换为字节数组并在某个地方进行设置吗?

提前谢谢您。


随着即将到来的WinUI,您将能够在Win32应用程序模型上运行UWP使用的UI。这将使各种PDF操作更加容易。请查看#MSIgnite,保存日期:https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE3TlM8 - Tony
2个回答

1

这是一个Win32类吗? - lindexi
提供的示例仅打印纯文本 - 打印PDF几乎是完全不同的问题。纯文本使用DrawString(),但如果是PDF,可以使用什么,如果是DrawImage(),如何将文件内容转换为图像以使其工作等。 - PandaWood

0
在 UWP 中,我们使用 PrintDocument 来打印 UIElement。这是官方的 tutorial。这是代码 sample

如何打印网页

在打印之前,我们需要先获取 WebViewBrush。请参考此案例 reply 获取网页内容。然后查看上面的代码示例,将 WebViewBrush 打印到 PDF 中。我已经回复了类似的案例,您可以 参考

如何打印文件

UWP的PrintDocument只支持打印UIElement,因此我们需要使用UWP控件来展示文件内容,然后再进行打印。具体步骤请参考官方代码示例场景4。

1
谢谢你的建议。我已经测试过它,它可以工作。但是,我们真正需要的是一种“静默”的转换方式。也就是说,用户只需单击“导入按钮”,无需进行其他交互。似乎无法避免ShowPrintUIAsync请求器并打印文档。你能确认一下吗? - Enzo Failla
是的,在UWP中需要使用 ShowPrintUIAsync。我已经多次看到这个要求。但目前在UWP平台上没有这样的API,所以请随意在UserVoice上发布您的需求。您也可以使用 FullTrustProcessLauncher 启动Win32应用程序,然后静默打印文件。 - Nico Zhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接