LoadFile() Phương thức của đối tượng AxAcroPDFLib.AxAcroPDF không thể sử dụng để tải các tệp PDF đã mở

lập trình


Tôi đã tạo một ứng dụng máy tính để bàn Windows (bằng C#), trong đó tôi sử dụng điều khiển AxAcroPDF để hiển thị tệp pdf trên biểu mẫu khi người dùng đưa ra đường dẫn của pdf và nhấp vào nút. Tệp Pdf nằm trong một thư mục tệp chia sẻ trên mạng nơi nhiều người dùng có thể truy cập tệp đó.
(Tôi sử dụng Phương thức LoadFile() của đối tượng AxAcroPDFLib.AxAcroPDF)

Điều này đang hoạt động tốt. Nhưng khi cùng một tệp pdf mà ứng dụng của tôi cố mở đã được mở bằng Adobe Reader thì ứng dụng của tôi không thể mở cùng một tệp pdf.

Nếu PC mà ứng dụng của tôi đã cài đặt có Adobe reader 7 thì ứng dụng sẽ đưa ra thông báo lỗi là “System.ApplicationException Failed Loading PDF Sample” và ứng dụng bị treo.

Và nếu ứng dụng chạy trên PC có cài đặt Adobe Reader X thì sẽ không xuất hiện lỗi nhưng màn hình tải sẽ xuất hiện mãi mãi.

Nhưng việc mở cùng một bản pdf trong hai hoặc nhiều PC bằng ứng dụng của tôi hoạt động hoàn hảo.

Ai đó có thể giúp tôi về vấn đề này?

Giải pháp 1

Tôi không thể tìm thấy giải pháp thích hợp như tôi mong đợi. Nhưng để tránh chương trình bị lỗi, tôi đã kiểm tra trước khi tải bản pdf.

C#
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());

Nếu biến Boolean ‘PDFAvailable’ trả về true, tôi sẽ tải tệp PDF như bên dưới. Khác một thông điệp thích hợp được ném.

C#
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);
                           
                       }

Giải pháp 2

Tôi tìm thấy một cách giải quyết trong việc này bưu kiện

Thay vì LoadFile() chúng ta có thể sử dụng thuộc tính “src” của điều khiển.

Giải pháp 4

sử dụng thuộc tính src để xác định đường dẫn cũng có thể gây ra lỗi nếu đường dẫn quá dài.
Một giải pháp là sao chép tệp sang tệp đường dẫn ngắn hơn rồi sửa đổi src bằng đường dẫn mới này.

File.Copy(iRec.Path, “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”,true);
Thread.Sleep(500);
axAcroPDF1.src = “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”;

Có giải pháp nào khác không?

コメント

タイトルとURLをコピーしました