PDA

View Full Version : سوال: بستن فایل pdf که خطا دارد



ali-se
یک شنبه 08 آذر 1394, 11:52 صبح
سلام دوستان
من یه برنامه کوچیک با vba نوشتم که فایلهای PDF رو باز و بعدش می بندتشون
اما برنامه وقتی یک فایل خراب رو باز می کنه باید حتما کاربر روی error اوکی کنه تا برنامه به کارش ادامه بده؟
چه کاری میشه انجام داد که یا فایل PDF رو قبل از بازکردن چک کرد که خراب نباشه یا خطا رو به کاربر نشون نده؟
با تشکر

vbhamed
یک شنبه 08 آذر 1394, 18:15 عصر
سلام
باید چک کنید اگر پنجره خطا باز شده اون رو ببندید
به روشهای مختلفی مثل چک کردن عنوان پنجره خطا و ... می‌تونید بفهمید باز شده، اما اینکه نشون نده به نرم افزار نمایش pdf بستگی داره که چنین امکانی داره یا نه، بعضی نرم افزارها رو میشه با پارامترهایی اجرا کرد که به نحو خاصی اجرا بشن

alirezabahrami
یک شنبه 08 آذر 1394, 23:14 عصر
سلام دوستان
من یه برنامه کوچیک با vba نوشتم که فایلهای PDF رو باز و بعدش می بندتشون
اما برنامه وقتی یک فایل خراب رو باز می کنه باید حتما کاربر روی error اوکی کنه تا برنامه به کارش ادامه بده؟
چه کاری میشه انجام داد که یا فایل PDF رو قبل از بازکردن چک کرد که خراب نباشه یا خطا رو به کاربر نشون نده؟
با تشکر
سلام
با کنترل خطا در روال اجرای فایل pdf میتوانید از اجرا و باز شدن فایل خراب جلوگیری کنید .
یا علی

ali-se
دوشنبه 09 آذر 1394, 07:16 صبح
ممنون
ولی مشکل اینجاست که خطا داخل acrobat اتفاق میفته
و برنامه vb هیچ خطایی نداره که کد خطاشو بررسی کنم
هیچ روشی نیست که بدون باز کردن فایل PDF از سالم بودن اون مطمئن شد؟

vbhamed
دوشنبه 09 آذر 1394, 09:10 صبح
سلام
یکسری کامپوننتها برای باز کردن فایلهای pdf هستن مثل pdfViewerX
احتمالا می‌تونید با اونها تست کنید، اینطوری دیگه شاید اصلا نیاز به آکروبات هم نداشته باشید

meys34
دوشنبه 09 آذر 1394, 18:26 عصر
حتما کاربر روی error اوکی کنه تا برنامه به کارش ادامه بده؟


سلام

ببخشید از چه دستوری استفاده میکنید که برنامه گیر میکنه؟

ali-se
دوشنبه 16 آذر 1394, 15:20 عصر
سلام
از این کد استفاده می کنم:


Dim objAcroApp As Acrobat.AcroApp

Dim objAcroAVDoc As Acrobat.AcroAVDoc
Dim objAcroPDDoc As Acrobat.AcroPDDoc
Dim objJSO As Object
Dim boResult As Boolean
Dim ExportFormat As String
Dim NewFilePath As String




Set objAcroApp = CreateObject("AcroExch.App")


Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")

Application.DisplayAlerts = False
'Open the PDF file.

boResult = objAcroAVDoc.Open(PDFPath, "")


وقتی Error میده چطوری ببندمش؟

meys34
دوشنبه 16 آذر 1394, 20:50 عصر
سلام

ببینید ایده ای که برای کار شما به ذهنم رسید رو قبلا برای یه مورد دیگه استفاده کردم که خیلی خوب جواب داد....

http://barnamenevis.org/showthread.php?316715-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-sendkey-%DA%86%D8%B7%D9%88%D8%B1%D9%8A-%D9%85%D8%AA%D9%86-%D8%B1%D9%88-%D9%83%D9%BE%D9%8A-%D9%88-%D9%BE%D8%B3%D8%AA-%D9%83%D9%86%D9%85-%D8%9F&p=1390586&viewfull=1#post1390586


1- ببینید اصل قضیه اینه که قبل از اجرای فایل pdf تابع SetWindowsHookEx(WH_CBT,...) رو اجرا میکنم

2- این تابع اجرا شدن پنجره های جدید زیرمجموعه برنامه ما رو خبر میده و ما میتونیم هندل اون پنجره رو بدست بیاریم

3- از روی هندل پنجره میتونیم بررسی کنیم که آیا پنجره جدید همون پیغام خطا هست یا نه... و درصورت لزوم اون پنجره رو ببندیم


کافیه فایل Module1 رو به برنامه تون اضافه کنید و دستور زیر رو اجرا کنید...

MessageBoxH Form1.hWnd
boResult = objAcroAVDoc.Open(PDFPath, "")

Timer1.Enabled = True


یه تایمر هم اضافه میکنیم که توی اون تایمر بتونیم دستور مربوط به چک کردن پنجره و بستن اون رو اجرا کنیم

Private Sub Timer1_Timer()
If IsWindowEnabled(hwndMsgBox) = 0 Then Exit Sub

SendMessage hwndMsgButton, WM_CLOSE, 0&, 0&
End Sub


البته کد های بالا به صورت فرضی هست که خودتون میتونید اصلاحش کنید...