LoadFile() طريقة الكائن AxAcroPDFLib. لا يمكن استخدام AxAcroPDF لتحميل ملفات PDF المفتوحة بالفعل

برمجة


لقد قمت بإنشاء تطبيق لسطح مكتب Windows (في C #) حيث أستخدم عنصر التحكم AxAcroPDF لعرض ملف pdf في نموذج عندما يقوم المستخدم بإعطاء مسار ملف pdf والنقر فوق زر. يوجد ملف Pdf في مجلد ملفات مشترك على الشبكة حيث يمكن لعدة مستخدمين الوصول إليه.
(أستخدم طريقة LoadFile() للكائن AxAcroPDFLib.AxAcroPDF)

هذا يعمل بشكل جيد. ولكن عندما يكون ملف pdf نفسه الذي تحاول تطبيقاتي فتحه مفتوحًا بالفعل باستخدام Adobe Reader، فإن تطبيقي لا يمكنه فتح نفس ملف pdf.

إذا كان جهاز الكمبيوتر الذي قمت بتثبيته يحتوي على برنامج Adobe Reader 7، فسيقوم التطبيق برمي رسالة الخطأ كـ “System.ApplicationException Failed Loading PDF Template” وتجميد التطبيق.

وإذا تم تثبيت برنامج Adobe Reader X على التطبيق الذي يقوم بتشغيل جهاز كمبيوتر، فلن يظهر أي خطأ ولكن ستظهر شاشة التحميل إلى الأبد.

لكن فتح نفس ملف pdf في وقت واحد على جهازي كمبيوتر أو أكثر باستخدام تطبيقي يعمل بشكل مثالي.

هل يمكن لأحد أن يساعدني في هذه المسألة؟

الحل 1

لم أتمكن من إيجاد الحل المناسب كما كنت أتوقع أن أجده. ولكن لتجنب تعطل البرنامج، قمت بوضع علامة اختيار قبل تحميل ملف pdf.

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

إذا عاد المتغير المنطقي “PDFAvailable” إلى القيمة الحقيقية، فسوف أقوم بتحميل ملف 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 لتحديد المسار أيضًا إلى حدوث خطأ إذا كان المسار طويلًا جدًا.
أحد الحلول هو نسخ الملف إلى ملف مسار أقصر ثم تعديل src بهذا المسار الجديد.

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”;

أي حل آخر؟

コメント

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