C# WPF - 将网页打印为 PDF(使用 Microsoft Print to PDF Printer)

问题描述 投票:0回答:2

这几天我一直在努力解决一个看似微不足道的问题。 我的应用程序(C#、.NET6、WPF)将 HTML 输出创建到硬盘上的本地文件夹中。这是完美的工作。

我希望能够从中自动创建 PDF。 “Microsoft Print to PDF”打印机似乎生成了一个完全可以接受的 PDF(当我手动打开 HTML 文件并手动打印时)。

我知道我需要先渲染 HTML 才能获得一个 PDF,它不仅仅显示来自 HTML 的源标记。所以我想到了使用“WebBrowser”控件,然后使用“PrintDocument”从那里打印内容,但似乎 WPF WebBrowser 控件没有像 WinForms 版本那样的“.Print()”方法。

感觉我拥有所有的积木,但我就是不能把它们放在一起。

有人能指出我正确的方向吗?

c# wpf printing html-to-pdf
2个回答
0
投票

为此有很多付费选项,但也有这个图书馆:

https://github.com/ArthurHub/HTML-Renderer

有段时间没更新了,但不代表没用

注意它在自述文件中提到:
广泛的 HTML 4.01 和 CSS 2 级规范支持

因此您的 HTML 需要限制在该规范内。


0
投票

使用原生系统做HTML另存为PDF理论上和ONE SHELL LINE一样简单

msEdge.exe --headless --print-to-pdf="c:\wherever\filename.pdf "file:///myHTML.HTML"

带有 Acrobat 渲染的 edge III 的默认位置是

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"

“input.htm”和“output.pdf”的编程语法非常迂腐,必须是“absolute”,否则很可能是空白。此外,您可能需要其他开关来添加延迟,有时在渲染需要时(有两个有帮助)。

删除打印机页脚和页眉添加

--print-to-pdf-no-header
也考虑
--run-all-compositor-stages-before-draw
你可能需要调整脚本运行的时间使用
--virtual-time-budget=1000
开始说5或6000并减少一半失败然后加倍再次为那个硬件。

>curl -o this.htm https://stackoverflow.com/questions/76168410/c-sharp-wpf-print-web-page-to-pdf-using-microsoft-print-to-pdf-printer

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  141k    0  141k    0     0   374k      0 --:--:-- --:--:-- --:--:--  376k

>"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --headless --print-to-pdf="%cd%\demo.pdf" --print-to-pdf-no-header "file:///%cd%/this.htm"
>demo.pdf
>

附言您实际上可以运行 webview.exe --headless 但它通常需要准确地平衡 --switches ,所以请使用 MS Edge 的可靠方法,因为它不再像以前那样需要其他启动器包装器。

© www.soinside.com 2019 - 2024. All rights reserved.