2017-04-19 41 views
2

我設法旋轉文檔中的單個頁面,但我無法使用任何方式刷新頁面以使其工作。我必須重新導航到頁面才能看到旋轉的效果。不是我們用戶的理想場景。pdfnet:單頁旋轉後沒有刷新

MyPDFView代碼:

public void RotatePage(int page) 
    { 
     Page.Rotate originalRotation = m_PdfDocument.GetPage(page).GetRotation(); 
     Page.Rotate rotation; 

     switch (originalRotation) 
     { 
      case Page.Rotate.e_0: rotation = Page.Rotate.e_90; break; 
      case Page.Rotate.e_90: rotation = Page.Rotate.e_180; break; 
      case Page.Rotate.e_180: rotation = Page.Rotate.e_270; break; 
      case Page.Rotate.e_270: rotation = Page.Rotate.e_0; break; 
      default: rotation = Page.Rotate.e_0; break; 
     } 

     m_PdfDocument.GetPage(page).SetRotation(rotation); 
    } 

frmMain代碼:

private void btnTurnView_ItemClick(object sender, ItemClickEventArgs e) 
    { 
     if (CurrentForm != null) 
     { 
      CurrentForm.p_m_oPDFViewCtrl.RotatePage(CurrentForm.p_m_oPDFViewCtrl.p_PageInfo.p_PageNumber); 
     } 
    } 

事情我至今嘗試過:無效(),刷新(),更新()的文檔/視圖的不同部分。我可以運行頁面分析(類似於頁面更改時發生的情況),這可能會解決問題,但會帶來不必要的開銷,如果有更有效的方法,我寧願依賴它。

回答

1

原始代碼實際上有兩個錯誤。

第一個是丟失的UpdatePageLayout。

第二,缺少concurrency locking,因爲您正在修改一個線程上的文檔,而後臺線程正在讀取文檔。最後,在最新版本中,現在有用於調整旋轉的輔助函數,因此可以避免整個開關塊。

因此,在PDFViewCtrl中查看它時,永久旋轉單個頁面的更安全的方法如下。

​​

請注意,文件鎖定。由於您直接訪問文檔,因此需要將其鎖定(讀取或寫入鎖定),以便後臺線程暫停。 PDFViewCtrl本身的任何調用已經處理了這個。這document進入更多的細節。

+0

謝謝瑞恩。我明天再加鎖。由於我們仍然使用舊的SDK版本,所以我將無法實現幫助器功能,但是當我們更新到最新版本(應該很快)時,我會將其留作提醒。 –

+0

我能夠完全實現整個事情,包括幫助函數。再次感謝 ! :) –

1

已經找到它了,有一個方法UpdatePageLayout()它確實做到了。