【问题标题】:How to programmatically print files and web pages to PDF through "Microsoft print to PDF"?如何通过“Microsoft 打印到 PDF”以编程方式将文件和网页打印到 PDF?
【发布时间】:2020-02-22 01:48:56
【问题描述】:

我正在开发一个用 c# 编写的 UWP 应用程序,我需要转换为 pdf: - 办公文件(doc、docx、xls、xlsx、ppt、pptx) - 图片 - 网页

应用程序必须在 x86、x64、ARM、ARM64 架构中工作。

我知道市场上有第三方转换器库,但只有少数可以在 ARM64 环境或 UWP 中工作。

我的想法是使用(在 Windows 10 中)允许用户将大多数文件格式保存为 PDF 的“Microsoft 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 文件,我应该将其转换为字节数组并将其设置在某处吗?

提前谢谢你。

【问题讨论】:

标签: c# pdf uwp converters virtual-printer


【解决方案1】:

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

如何打印网页

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

如何打印文件

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

【讨论】:

  • 感谢您的建议。我测试了它并且它有效。然而,我们真正需要的是一种“静默”的转换。这意味着用户应该只单击“导入按钮”而无需任何其他交互。似乎无法打印避免 ShowPrintUIAsync 请求者的文档。你能确认一下吗?
  • 是的,ShowPrintUIAsync 在 uwp 中是必需的。我已经多次看到这个要求。但是目前,我们在uwp平台上没有这样的api,所以请随时在UserVoice中发布您的需求。您还可以使用FullTrustProcessLauncher 启动win32 应用程序,然后静默打印文件。
【解决方案2】:

使用 PrintDocument 类时,您应该将尝试打印的文件读取到文件流中,如下例所示:https://docs.microsoft.com/en-us/dotnet/api/system.drawing.printing.printdocument?view=netframework-4.8

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

【讨论】:

  • 是win32类吗?
  • 提供的示例仅打印纯文本 - 打印 PDF 是一个几乎完全不同的问题。普通测试使用 DrawString(),但什么可以用于 PDF,如果是 DrawImage(),如何将文件的内容转换为图像以使其工作等
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2012-12-19
  • 2011-02-22
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多