2017-04-19 5 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

実際には元のコードに2つのエラーがあります。

最初は不足しているUpdatePageLayoutです。

バックグラウンドスレッドがドキュメントを読み取っている間に、1つのスレッドでドキュメントを変更しているため、2番目のページにはconcurrency lockingがありません。最後に、最新のバージョンでは、回転を調整するためのヘルパー機能が追加され、スイッチブロック全体が回避されます。

したがって、個々のページを永久に回転させるより安全な方法を、PDFViewCtrlで表示しながら以下のように行うこともできます。

​​

注:文書のロック。ドキュメントに直接アクセスしているので、バックグラウンドスレッドが一時停止するように、ドキュメントをロックする必要があります(読み取りロックまたは書き込みロックのいずれか)。 PDFViewCtrl自体の呼び出しはすべてこれをすでに処理しています。このdocumentが詳細に入ります。

+0

ありがとうございました。私は明日追加ロックを追加します。私たちはまだ古いSDKバージョンを使用しているので、ヘルパー機能を実装することはできませんが、私たちが最新バージョンに更新する際には注意しておきます。 –

+0

私は完全にヘルパー機能を実装することができました。再度、感謝します ! :) –

1

既に見つかりました。正確にはUpdatePageLayout()という方法があります。

関連する問題