Windowsのc#アプリケーションがあり、フォームに追加されたacrobatcomオブジェクトにWebサーバー上にあるpdfファイルを表示したいと思います。
pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")
私のPDFは大きいので、ファイル全体がロードされるまでアプリケーションがハングしているようです。
アプリケーションがハングしているとユーザーに認識されることなく、大きなファイルを読みたい。
私は次のことをします:
3つの提案。
1 つ目は、一部のオンライン ブックのように、分割して一度に 1 ページずつロードすることです。これは少し面倒ですが、ロード時間を節約できます。ItextSharp にはこれを行うための機能があると思います。
2 回目の圧縮を試みます。繰り返しますが、itextsharpにはこれを可能にするツールがあります
私の 3 番目の提案は、このスレッドをチェックすることです。オタクっぽいローディング フレーズをいくつか選択し、アニメーション GIF を使用して、長いローディング時間からクライアントの注意をそらします。明らかにこれは最後の手段ですが、役に立つ可能性があります。
ワーカー スレッドを使用します。(たとえば、BackgroundWorker) BackgroundWorker への
MSDN リンク
PDF.LoadFile を UI スレッドから実行する必要がある場合は、HttpWebRequest を使用して BackgroundWorker でファイルをダウンロードし、ローカルに保存してから、呼び出した (UI スレッド) 関数で pdf.loadfile() を呼び出すことができます。
明らかに、バックグラウンド スレッドを使用して読み込みを行うことができれば、準備は完了です。
Pdf pdf;
void ShowPdf() {
if (this.InvokeRequired) {
this.Invoke(() => this.ShowPdf());
}
// give pdf a window...
}
void LoadPdf() {
System.Threading.ThreadPool.QueueUserWorkItem(() => {
pdf.LoadFile("http://example.com/somelarge.pdf");
this.ShowPdf();
});
}
そこで発生する可能性のある問題(Acrobat の COM PDF ビューアーを使用したことはありません) は、PDF オブジェクトが UI スレッド上にあることを想定していることです。その場合、問題が発生します。