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

mxg2im7a  于 2023-05-08  发布在  C#
关注(0)|答案(2)|浏览(359)

这几天我一直在纠结一个看似微不足道的问题。我的应用程序(C#,.NET6,WPF)将HTML输出创建到硬盘上的本地文件夹中。这是完美的工作。
我希望能够从这个自动创建一个PDF。“Microsoft Print to PDF”打印机似乎可以生成完全可以接受的PDF(当我手动打开HTML文件并手动打印时)。
我知道我需要首先呈现HTML,以便获得一个不仅仅显示HTML中的源标记的PDF。所以我想使用一个'WebBrowser'控件,然后使用'PrintDocument'打印内容,但似乎WPF WebBrowser控件没有像WinForms版本那样的'.Print()'方法。
感觉就像我有所有的积木,但我就是不能把它们放在一起。
有人能给我指个方向吗?

gz5pxeao

gz5pxeao1#

有很多付费选项,但也有这个库:
https://github.com/ArthurHub/HTML-Renderer
它已经有一段时间没有更新了,但这并不意味着它不起作用。
请注意,它确实在自述文件中提到:

  • 广泛的HTML 4.01和CSS级别2规范支持 *

因此,您的HTML将需要限制到该规范。

bvk5enib

bvk5enib2#

使用本机系统做HTML保存为PDF,这在理论上就像一个 shell 线一样简单

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

使用Acrobat渲染器时,边缘III的默认位置为"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
编程语法在“input.htm”和“output.pdf”上是高度迂腐的,必须是“绝对的”,否则很可能是空白的。此外,您可能需要其他开关来添加延迟,有时在渲染需要时(有两个开关可以提供帮助)。
要删除打印机页脚和页眉,请在--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
>

P.S.你实际上可以运行webview.exe --headless,但它经常需要精确地平衡--开关,所以使用MS Edge的可靠方法,因为它不再需要其他启动器 Package 器,就像以前一样。

相关问题