Open RickStrahl opened 7 months ago
As a side note - it looks like the WebView also ignores the extra command line parameter (likely because the actual print operation doesn't occur in the original host process but in a DevTools instance?)
This has no effect:
protected async void InitializeAsync()
{
// must create a data folder if running out of a secured folder that can't write like Program Files
var environment = await CoreWebView2Environment.CreateAsync(
userDataFolder: HtmlToPdfHost.WebViewEnvironmentPath,
options: new CoreWebView2EnvironmentOptions {
AdditionalBrowserArguments = "--generate-pdf-document-outline"
}
);
If this is a feature in CDP, you should be able to follow this to access it? https://learn.microsoft.com/en-us/microsoft-edge/webview2/how-to/chromium-devtools-protocol
Perhaps - but that's a bit more complicated to do than having it work through the published API that you're providing. This feature is clearly available in Chromium (and through the command line in Edge) - why not expose that through your API as it's very useful and one of the big missing features IMHO.
Just for kicks I gave the DevTools protocol extension a try and that unfortunately does not work at all - any call the PrintToPDFAsync()
results in a null exception inside of the runtime. I call this from the same place that I call the WebView2.PrintToPdfAsycn()
method which works so I know that the document is ready etc.
I also noticed that that API's return value has funky types for things like the Stream being typed as string
. I doubt that anybody has actually tested this API in any meaningful way.
Point remains - we really shouldn't need to go through this separate API/NuGet Package and its dependencies just to make one extra PDF print option that is available in the runtime work.
@monica-ch could you help see if this flag --generate-pdf-document-outline
can be used through CDP?
In the meantime, I will point out that we do not typically release APIs for experimental browser features, as it could leave us maintaining a feature that the browser eventually deprecates.
... and yet you support the command line for the feature for CLI startup. :smile: Unlikely that that feature will go away.
I'm not sure whether PrintToPdf is actually using the Developer Tools API or something else to print to PDF?
@RickStrahl In Chromium, the --generate-pdf-document-outline
flag was introduced to enable printing a PDF in headless mode. The CDP PrintToPDF API exclusively in headless mode, so this behavior aligns with expectations.
Regarding WebView2, the PrintToPDFAsync API does not rely on the CDP DevTools API for PDF printing. However, I understand your request, and I’ll add it to our backlog as a feature request for WebView2.
Describe the feature/enhancement you need
Chromium now has support for generating an optional document outline as part of the PDF generation process. This works in Edge and Chromium/Chrome via command line. It would be really nice if this was supported via the print options as an optional feature because adding a TOC after the fact is really resource intensive.
Here are docs of the Chromium API which includes that option (although marked as experimental)
https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
Also works from the command line:
The scenario/use case where you would use this feature
I've created a generic library that wraps the HtmlToPdf printing from the WebView that is headless and can run in non-UI environments. It works great and it would be nice if TOC generation could be integrated natively. As it is I provided that functionality externally but it requires several additional libraries (bloating distribution size) and easily doubles generation overhead as we basically have to intercept the HTML, parse out headers and painfully map them to PDF pages (which can be error prone).
https://github.com/RickStrahl/WestWind.WebView.HtmlToPdf
How important is this request to you?
Impactful. My app's user experience would be significantly compromised without it.
Suggested implementation
No response
What does your app do? Is there a pending deadline for this request?
I have several applications that render HTML and allow printing and output to PDF. Specifcally a markdown editor which allows PDF output from generated HTML text.
AB#50281146