我在无头模式下使用 MSEdge.exe 将 C# 应用程序中的一些 HTML 输出转换为 PDF。我正在使用的代码的相关部分如下:
string processExe = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";
string processArgs = $"--headless --run-all-compositor-stages-before-draw --virtual-time-budget=6000 --no-pdf-header-footer --print-to-pdf-no-header --print-to-pdf=\"{outputFilePath}\" \"{inputFilePath}\"";
var printPDF = Process.Start(processExe, processArgs);
printPDF.WaitForExit();
这在过去一年左右的时间里效果很好,直到今天! Edge 中的某些内容似乎已更新,现在我收到“退出代码 21”(当然没有 PDF),但我找不到任何相关文档。
有人知道吗?
谢谢
确认 Chromiums 和 Edge v128 中当前存在一些回归。要处理此页面,您需要使用
--headless=old
后退打印引擎
失败
msedge.lnk --headless=new --print-to-pdf="l:\test.pdf" "https://stackoverflow.com/questions/78912977/msedge-headless-printing-exit-code-21"
有效
msedge.lnk --headless=old --print-to-pdf="l:\test.pdf" "https://stackoverflow.com/questions/78912977/msedge-headless-printing-exit-code-21"
该问题似乎与 Chromium 将无头和非无头合并到单个 exe 中有关,现在当 gui 版本打开时无头退出。 Microsoft Edge 版本 128.0.2739.42 出现了此更改。
该问题在 Edge 中更为严重,因为某些副驾驶集成似乎会阻止 Edge 在您关闭窗口时关闭其进程。
一个肮脏的解决方法是使用:
--headless=old
这会强制无头模式使用独立无头 exe 的先前行为,即使 Edge gui 窗口打开或已经打开,该模式也将起作用。
但是,应该注意的是,这个解决方案只能短期有效,因为这种旧的无头模式很快就会被删除。从调试输出来看,当使用旧的无头模式时:
旧的 Headless 模式很快就会从 Chrome 二进制文件中删除。请使用新的 Headless 模式 (https://permanently-removed.invalid/docs/chromium/new-headless) 或 chrome-headless-shell,它是旧 Headless 模式的独立实现 (https://永久删除.invalid/blog/chrome-headless-shell).