簡體   English   中英

使用WPF渲染pdf

[英]Render pdf using wpf

我需要編寫自己的pdf查看器(UserControl)。 我為此使用pdfium.dll。 它的包裝是PdfiumService。 該服務可以將頁面呈現到BitmapSource。 PdfViewer在ScrollViewer的VirtualizingStackPanel中顯示頁面。 有什么想法我該怎么做pdf的惰性渲染? 問題是,如果pdf約為20mb(1000頁),則呈現的頁面大約需要2gb RAM。

VirtualizingStackPanel可以幫助我嗎? 我沒有找到任何有關“ BeginVirtualizing”或其他事件的事件。 有什么簡單的方法可以知道現在正在顯示什么項目?

也許是這樣的:

  1. 計算一次可以顯示多少頁。
  2. 請參見ScrollViewer的偏移量。
  3. 計算頁面索引現在正在顯示。
  4. 在當前內容旁邊渲染5頁。

有任何現成的解決方案,一些技巧或想法嗎?

好吧,我從書本上得到了一些圖像。...問題的根源實際上並不是放置位圖的gui,而是從庫中獲取圖像的方式...是逐個,順序地還是隨機地?

實際上,如果使用VirtualizingStackPanel,它將僅管理gui元素來創建或銷毀,但是如果內存中有完整的位圖集合,那么您將死光。

一種方法是創建不包含位圖的Page對象,並在需要時創建圖像+添加計時器以清除所有“最舊的圖像”

我在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; }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM