使用WPF渲染PDF



我需要编写自己的PDF查看器(UserControl(。我为此使用pdfium.dll。它的包装器是pdfiumservice。此服务可以渲染到BitMapsource。pdfviewer在scrollviewer中的virtualizingstackpanel中显示页面。有什么想法如何为PDF做懒惰的渲染?问题是,如果PDF约为20MB(1000页(,则渲染页约为2GB RAM。

虚拟化stackpanel可以帮助我吗?我没有找到任何"开始虚拟化"或其他事件的事件。有什么简单的方法可以知道现在显示什么项目?

也许这样的东西:

  1. 计算一次可以立即显示多少页。
  2. 请参阅ScrollViewer的偏移。
  3. 计算页面的索引现在正在显示。
  4. 当前旁边的5页渲染。

是否有任何准备解决方案,一些提示或想法?

好吧,我用书中的图像做了一些。...麻烦并不是您放置位图的GUI,而是从库中获取图像的方式。..一个一个一个,顺序或随机的?

实际上,如果您使用虚拟化stackpanel,它将只能管理GUI元素来创建或破坏,但是如果您在内存中有完整的位图集合,则您已死。

一种方法是创建页面对象,并在需要时创建图像 添加一个计时器,该计时器将清除所有"最古老的图像"

我在CBR中做类似的事情;我使用自定义控件显示页面

private BitmapImage _Image = null;
    /// <summary>
    /// the image 
    /// </summary>
    public BitmapImage Image
    {
        get
        {
            if (_Image == null)
                _Image = (DocumentFactory.Instance.GetService(Parent) as BookService).GetImageFromStream(Parent.FilePath, FilePath);
            ImageLastAcces = DateTime.Now;
            return _Image;
        }
        set { _Image = value; }
    }

最新更新