C# 如何通过编程将文件和网页打印为PDF格式;“Microsoft打印到PDF?”;?

C# 如何通过编程将文件和网页打印为PDF格式;“Microsoft打印到PDF?”;?,c#,pdf,uwp,converters,virtual-printer,C#,Pdf,Uwp,Converters,Virtual Printer,我正在开发一个用c#编写的UWP应用程序,需要转换为pdf: -办公文件(doc、docx、xls、xlsx、ppt、pptx) -图像 -网页 该应用程序必须在x86、x64、ARM和ARM64体系结构中工作 我知道市场上有第三方转换器库,但只有少数在ARM64环境或UWP中工作 我的想法是(在Windows 10中)使用“Microsoft PDF打印机”,允许用户将大多数文件格式保存为PDF 我发现很多帖子都在问同一个问题,但没有一篇真正包含有用的答案 我发现并测试的代码如下: Print

我正在开发一个用c#编写的UWP应用程序,需要转换为pdf: -办公文件(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文件,我应该将其转换为字节数组并将其设置在某个地方吗


提前感谢您。

使用PrintDocument类时,您应该将要打印的文件读取到文件流中,如以下示例所示:

我个人更喜欢使用Word和Excel的Microsoft.Office.Interop库进行打印。使用这些工具,您只需加载文档,将打印机设置为“Adobe PDF”,然后保存文档。

在UWP中,我们用于打印
UIElement
。这是官方的。这是代码

如何打印网页

在打印之前,我们需要先获取
WebViewBrush
。请参考此案例以获取web内容。然后查看上面的代码示例,将
WebViewBrush
打印为pdf。我已经回答了类似的情况,你可以

如何打印文件


UWP
PrintDocument
只支持打印
UIElement
,因此我们需要使用UWP控件显示文件内容,然后打印。有关详细步骤,请参考官方代码示例场景4

使用即将推出的WinUI,您将能够在Win32应用程序模型上运行UWP上使用的UI。这将使所有类型的PDF操作变得更容易。查看#MSIgnite,保存日期:是win32类吗?谢谢你的建议。我对它进行了测试,效果良好。然而,我们真正需要的是“无声”的转换。这意味着用户只需点击“导入按钮”,无需任何其他交互。要打印文档似乎无法避开ShowPrintUIAsync请求程序。您能确认吗?是的,
ShowPrintUIAsync
在uwp中是必需的。这个要求我已经见过很多次了。但目前,我们在uwp平台上还没有这样的api,所以请随时在UserVoice中发布您的需求。您还可以使用
FullTrustProcessLauncher
启动win32应用程序,然后以静默方式打印文件。