[ad_1]
ユーザーがPDFのパスを指定してボタンをクリックしたときに、AxAcroPDFコントロールを使用してフォーム上にPDFファイルを表示するWindowsデスクトップアプリケーション(C#で)を作成しました。 PDF ファイルは、複数のユーザーがアクセスできる 1 つのネットワーク共有ファイル フォルダーに配置されます。
(オブジェクト AxAcroPDFLib.AxAcroPDF の LoadFile() メソッドを使用します)
これは正常に動作しています。 しかし、アプリケーションが開こうとしている同じ PDF ファイルが Adobe Reader を使用してすでに開かれている場合、アプリケーションは同じ PDF ファイルを開くことができません。
アプリケーションがインストールされている PC に Adobe Reader 7 が搭載されている場合、アプリケーションは「System.ApplicationException Failed Loading PDF Template」というエラー メッセージをスローし、アプリケーションがフリーズします。
また、PC で実行されているアプリケーションに Adobe Reader X がインストールされている場合、エラーは表示されませんが、読み込み画面が永遠に表示されます。
しかし、私のアプリケーションを使用して 2 台以上の PC で同時に同じ PDF を開くと、完璧に機能します。
誰かこの問題について助けてくれませんか?
解決策 1
期待していたような適切な解決策は見つかりませんでした。 ただし、プログラムがクラッシュするのを避けるために、PDFをロードする前にチェックを入れました。
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());
ブール変数「PDFAvailable」が true を返した場合、以下のように PDF をロードします。 それ以外の場合は、適切なメッセージがスローされます。
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString()); if (PDFAvailable == true) { axAcroPDF1.LoadFile(PDFPath.ToString()); axAcroPDF1.setShowToolbar(false); //disable pdf toolbar. axAcroPDF1.Enabled = true; } else { MessageBox.Show("Selected PDF Template Is Locked By Another Application.", ""Test Application"", MessageBoxButtons.OK, MessageBoxIcon.Information); }
解決策 2
これで回避策を見つけました 役職
LoadFile() の代わりに、コントロールの「src」プロパティを使用できます。
解決策 4
src プロパティを使用してパスを定義すると、パスが長すぎる場合にもエラーが発生する可能性があります。
解決策の 1 つは、ファイルをより短いパス ファイルにコピーし、この新しいパスで src を変更することです。
File.Copy(iRec.Path, “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”,true);
スレッド.スリープ(500);
axAcroPDF1.src = “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”;
他の解決策はありますか?
[ad_2]
コメント