C# Webview2 页边距在打印功能中不起作用

发布于 2025-01-09 11:03:49 字数 2456 浏览 0 评论 0原文

我们要使用WebView2中的打印功能,Webview2的版本是1.0.1108.44。我们尝试将 HTML 打印为 PDF。我们的期望是图像从左上角开始,没有任何空格。因此,我们尝试在CoreWebView2PrintSettings中设置边距,但似乎对最终结果没有影响

 private async void InitializeAsync()
 {
       WebViewTest.NavigationCompleted += WebView_NavigationCompleted;
       await WebViewTest.EnsureCoreWebView2Async(null);
       WebViewEnvironment = await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync().ConfigureAwait(true);
 }

private async void WebView_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
{
    //WebViewTest.CoreWebView2.ExecuteScriptAsync("window.print();");        
    CoreWebView2PrintSettings lPrintSettings = WebViewEnvironment.CreatePrintSettings();
    lPrintSettings.MarginBottom = 0;
    lPrintSettings.MarginLeft = 0;
    lPrintSettings.MarginRight = 0;
    lPrintSettings.MarginTop = 0;
    lPrintSettings.ShouldPrintBackgrounds = true;
    lPrintSettings.ShouldPrintHeaderAndFooter = false;
    lPrintSettings.ShouldPrintSelectionOnly = false;
    await WebViewTest.CoreWebView2.PrintToPdfAsync(PathPDF, lPrintSettings);
}

,然后我们得到 结果,它的顶部和右侧仍然包含大量空格

预期的打印 结果是打印

WebViewTest.CoreWebView2.ExecuteScriptAsync("window.print();");       

它使用windows打印,边距可以设置为无,图像从左上角开始。

您能帮我们解决这个问题吗,也许我们设置有问题?先感谢您!

更新: 我原来的方法是使用 HTML 文件和 CoreWebView2 的导航功能。在这种情况下,边距不起作用

private string PathHTML = @"E:\Capture.html";
WebViewTest.CoreWebView2.Navigate(PathHTML);

现在我尝试 Haldo 中的代码,并将 capture.jpeg 放在文件夹 C:\inetpub\wwwroot 中,使用 img src 加载此 jpeg 并使用 NavigateToString,然后边距工作

WebViewTest.NavigateToString(GetHtml());
private string GetHtml()
    {
        return @"<html><body>
          <div>
            <p style=""color: red; font-weight: bold;"">Some text</p>
            <img src=""http://localhost/capture.JPG"" alt=""test image""/><br/>             
          </div>
        </html></body>";
    }

结果 pdf 屏幕截图是在这里,将边距设置为 0将边距设置为 1

但我仍然不知道,为什么在我的情况下边距不起作用

We want to use the print function in WebView2, the Version of Webview2 is 1.0.1108.44. We try to print HTML to PDF. Our expectation is that the image starting from top left without any spaces. Therefore, we try to set the margins in the CoreWebView2PrintSettings, but it seems like no effect on the final result

 private async void InitializeAsync()
 {
       WebViewTest.NavigationCompleted += WebView_NavigationCompleted;
       await WebViewTest.EnsureCoreWebView2Async(null);
       WebViewEnvironment = await Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync().ConfigureAwait(true);
 }

private async void WebView_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
{
    //WebViewTest.CoreWebView2.ExecuteScriptAsync("window.print();");        
    CoreWebView2PrintSettings lPrintSettings = WebViewEnvironment.CreatePrintSettings();
    lPrintSettings.MarginBottom = 0;
    lPrintSettings.MarginLeft = 0;
    lPrintSettings.MarginRight = 0;
    lPrintSettings.MarginTop = 0;
    lPrintSettings.ShouldPrintBackgrounds = true;
    lPrintSettings.ShouldPrintHeaderAndFooter = false;
    lPrintSettings.ShouldPrintSelectionOnly = false;
    await WebViewTest.CoreWebView2.PrintToPdfAsync(PathPDF, lPrintSettings);
}

and then we get the result, it still contains a lot of spaces on the top and right sides

The expected print result is print with

WebViewTest.CoreWebView2.ExecuteScriptAsync("window.print();");       

It uses windows print, and margins could be set to None, and image starts from top left.

Could you please help us to solve this problem, maybe we have set something wrong? Thank you in advance!

Update:
My original way is using HTML file and navigate function of CoreWebView2. In this case Margins doesn't work

private string PathHTML = @"E:\Capture.html";
WebViewTest.CoreWebView2.Navigate(PathHTML);

Now I try the code from Haldo, and put the capture.jpeg in the folder C:\inetpub\wwwroot, load this jpeg with img src and using NavigateToString, then Margins works

WebViewTest.NavigateToString(GetHtml());
private string GetHtml()
    {
        return @"<html><body>
          <div>
            <p style=""color: red; font-weight: bold;"">Some text</p>
            <img src=""http://localhost/capture.JPG"" alt=""test image""/><br/>             
          </div>
        </html></body>";
    }

The result pdf screenshot is here, set Margin to 0 and set Margin to 1

But I still don't know, why in my case the margins doesn't work

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文