WebView2 bug with pdfs
Hello, I have QuestPdf code that generates a PDF file and displays it using WebView2, every ~second run it breaks and displays a see through output where I can see my desktop, is there any solution to this bug?
async Task Main() { QuestPDF.Settings.License = LicenseType.Community; var s = new MemoryStream(); Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(0, Unit.Centimetre); page.PageColor(Colors.White); page.Content().AlignCenter().Image(File.ReadAllBytes(@"...\test.png")); }); container.Page(page => { page.Size(PageSizes.A4); page.Margin(0, Unit.Centimetre); page.PageColor(Colors.White); page.Content().AlignCenter().Image(File.ReadAllBytes(@"...\test.png")); }); }) //.GeneratePdf(s); .GeneratePdf("foo.pdf"); var webView = new WebView2(); await webView.EnsureCoreWebView2Async(); webView.Dump(); webView.Source = new Uri($"file://{Path.GetFullPath("foo.pdf").DumpTell()}"); } public class InvoiceDocument : IDocument { /* code omitted */ void ComposeContent(IContainer container) { container.PaddingVertical(40).Column(column => { column.Spacing(5); column.Item().Element(ComposeTable); }); } void ComposeTable(IContainer container) { container .Height(250) .Background(Colors.Grey.Lighten3) .AlignCenter() .AlignMiddle() .Text("Table").FontSize(16); } void ComposeComments(IContainer container) { container.Background(Colors.Grey.Lighten3).Padding(10).Column(column => { column.Spacing(5); column.Item().Text("Comments").FontSize(14); }); } public DocumentMetadata GetMetadata() { throw new NotImplementedException(); } public void Compose(IDocumentContainer container) { throw new NotImplementedException(); } } // <NuGetReference Version="1.0.2535.41">Microsoft.Web.WebView2</NuGetReference> // <NuGetReference Version="2024.3.10">QuestPDF</NuGetReference>
Comments
I managed to reproduce this once, but not again, so it's really hard to diagnose. You can work around it by adding
Util.NewProcess = true;
to your query - this ensures a clean environment for the next run.Also, a word of warning: this will crash on the non-xcopy version of LINQPad because WebView2 will try to write temporary files to the folder where LINQPad is installed in %programfiles%. To work around this, you must specify a writable data folder for WebView2. You can pick a random folder, or use LINQPad's helper methods: