这几天我一直在纠结一个看似微不足道的问题。我的应用程序(C#,.NET6,WPF)将HTML输出创建到硬盘上的本地文件夹中。这是完美的工作。
我希望能够从这个自动创建一个PDF。“Microsoft Print to PDF”打印机似乎可以生成完全可以接受的PDF(当我手动打开HTML文件并手动打印时)。
我知道我需要首先呈现HTML,以便获得一个不仅仅显示HTML中的源标记的PDF。所以我想使用一个'WebBrowser'控件,然后使用'PrintDocument'打印内容,但似乎WPF WebBrowser控件没有像WinForms版本那样的'.Print()'方法。
感觉就像我有所有的积木,但我就是不能把它们放在一起。
有人能给我指个方向吗?
2条答案
按热度按时间gz5pxeao1#
有很多付费选项,但也有这个库:
https://github.com/ArthurHub/HTML-Renderer
它已经有一段时间没有更新了,但这并不意味着它不起作用。
请注意,它确实在自述文件中提到:
因此,您的HTML将需要限制到该规范。
bvk5enib2#
使用本机系统做HTML保存为PDF,这在理论上就像一个 shell 线一样简单
使用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,然后减少一半以失败,然后再次为该硬件增加一倍。P.S.你实际上可以运行webview.exe --headless,但它经常需要精确地平衡--开关,所以使用MS Edge的可靠方法,因为它不再需要其他启动器 Package 器,就像以前一样。