2017-04-19 110 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()它确实做到了。