如何通过“ Microsoft打印为PDF”以编程方式将文件和网页打印为PDF?

时间:2019-10-25 17:23:52

标签: c# pdf uwp converters virtual-printer

我正在使用C#编写的UWP应用程序,我需要转换为pdf:  -办公文件(doc,docx,xl​​s,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文件,是否应该将其转换为字节数组并将其设置在某个地方?

谢谢。

2 个答案:

答案 0 :(得分:0)

在使用PrintDocument类时,应按照以下示例将要打印的文件读入文件流:https://docs.microsoft.com/en-us/dotnet/api/system.drawing.printing.printdocument?view=netframework-4.8

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

答案 1 :(得分:0)

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

  

如何打印网页

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

  

如何打印文件

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