wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何等待WebViewBrush.Redraw()完成(UWP打印)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个基本的UWP应用程序,内嵌WebView呈现相当大的 HTML文档(最多500个字母大小的打印页面). 我想添加对HTML文档打印的支持.这是我的方法: >为了支持分页,我使用< div style =“height:100vh”>生成第二个分成“页面”的HTML文档.对于每个“页面”,最多500个. >我将“分页”HTML加载到XAML页面上的第二个隐藏的WebView中,我根据用户选择
我有一个基本的UWP应用程序,内嵌WebView呈现相当大的 HTML文档(最多500个字母大小的打印页面).

我想添加对HTML文档打印的支持.这是我的方法

>为了支持分页,我使用< div style =“height:100vh”>生成第二个分成“页面”的HTML文档.对于每个“页面”,最多500个.
>我将“分页”HTML加载到XAML页面上的第二个隐藏的WebView中,我根据用户选择的页面大小调整大小以适合一页.
>我等待WebView完成加载……
>现在为每个“页面”:

>我将WebView的scrollY设置为仅使用JavaScript显示当前页面:window.scrollTo(0,-pageOffset)
>然后我使用WebViewBrush捕获WebView中当前页面的快照
>对所有剩余页面重复此操作…

问题:

我可以生成所有500页的打印预览,但有时预览会丢失页面而其他页面会多次显示.

我怀疑这是因为我使用WebViewBrush.Redraw()来捕获滚动的WebView的快照,但文档说Redraw()是异步发生的.我可以滚动浏览当前页面,然后WebViewBrush有机会重绘,因此意外捕获下一页.

如何确保WebViewBrush已捕获WebView以便我可以滚动到下一页

我的代码生成一个页面

private async Task<Rectangle> MakePage(WebView webView,Size pageSize,double pageOffset)
    {
        // Scroll to next page:
        await webView.EvaluateJavaScriptSnippetAsync(
                             $"window.scrollTo(0,{pageOffset})");

        var brush = new WebViewBrush();
        brush.Stretch = Stretch.Uniform;
        brush.Setsource(webView);
        brush.Redraw(); // XXX Need to wait for this,but there's no API

        // Add a delay hoping Redraw() finishes... I think here is the problem.
        await Task.Delay(150);

        var rectangle = new Rectangle()
        {
            Width = pageSize.Width,Height = pageSize.Height
        };

        rectangle.Fill = brush;
        brush.Stretch = Stretch.UniformToFill;
        brush.AlignmentY = AlignmentY.Top;

        return rectangle;
    }

注意:如果有使用WebViewBrush打印500页的替代方法,我可以提供建议.我尝试为每个页面使用单独的WebView,但应用程序在200页后耗尽内存.

BOUNTY:我开始向任何可以弄清楚如何打印500页的人提供100分的赏金.

根据 WebViewBrush remarks的重要部分:

这样你就可以在WebView.LoadCompleted之后调用WebViewBrush的Setsource方法.

大佬总结

以上是大佬教程为你收集整理的如何等待WebViewBrush.Redraw()完成(UWP打印)?全部内容,希望文章能够帮你解决如何等待WebViewBrush.Redraw()完成(UWP打印)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。