عرض حقل من نوع Blob يحتوى ملف PDF
#1
السلام عليكم ،لدي مشكل لم أجد له حل رغم بحثي الكثير
لدي قاعدة معطيات اكسس تحتوي على عدة حقول من بينها حقل صور( blob(pdf و علي ادماجها في برنامج دلفي يعني قاعدة المعطيات هذه كانت موجودة من قبل و كان يتم ادخال البيانات من خلال اكسس و طلب مني عمل برنامج دلفي لادارة هذه القاعدة ، المشكل اني بمجرد أن أقوم بأي عملية حتى و لو كانت بحث يظهر message كالتالي : "bitmap image is not valid "
لا اله الا انت سبحانك اني كنت من الظالمين
الرد
#2
و عليكم السلام و رحمة الله

تلك الرسالة تدل على أن البيانات المتعامل معها ليست من نوع bitmap

إقتباس : صور( blob(pdf
تقصد ملفات pdf ؟

معلومة:
الحقول من نوع blob ـ (binary large object ) هو مجموعة من البيانات الثنائية يمكن تكون صور ، أصوات ،ملفات ...

بالتوفيق
الرد
#3
شكرا أخي على التوضيح ، و لكن في هذه الحالة كيف يتم التعامل مع هذا النوع من البيانات و كيف يمكن حل هذا المشكل.
لا اله الا انت سبحانك اني كنت من الظالمين
الرد
#4
السلام عليكم و رحمة الله

مثال بإستخدام LoadFromFile 'توجد طرق أخرى بإستخدام Stream ':

لجلب و حفظ الملفات في هذا الحقل :
كود :
if OpenDialog1.Execute then begin ADODataSet1.Edit ; TBlobField(ADODataSet1.FieldByName('YourBlobField')).LoadFromFile(OpenDialog1.FileName ); ADODataSet1.post ; end;
لإستخراجها إلى ملف خارجي و فتحه مثال حول pdf
كود :
if SaveDialog1.Execute then TBlobField(ADODataSet1.FieldByName('YourBlobField')).savetofile(SaveDialog1.FileName+'.pdf' ); ShellExecute(Handle, 'open', pchar((SaveDialog1.FileName+'.pdf' )), nil, nil, SW_SHOWNORMAL) ;
بالتوفيق
الرد
#5
السلام عليكم
شكرا أخي على الاقتراح و لكن **** أن أشرح لك أكثر المشكل في برنامجي لانني ربما لم أوصل الفكرة كما يجب:
لدي قاعدة بيانات اكسس من الشكل :
N° NOM PRENOM DATE ENVOI DOCUMENT
1 X Y 01/11/2010 Adobe Acrobat Document
2 MOHAMED ALI 02/11/2010 Adobe Acrobat Document
3 AHMED MOHAMED 03/11/2010 Adobe Acrobat Document

علما ان البيانات تم ادخالها سابقا عن طرق الاكسس و علي المحافظة على البيانات القديمة كما هي و استغلالها عن طريق برنامج دلفي يعني التعامل مع البيانات سيكون من خلال برنلمج دلفي و ليس اكسس.
قمت بربط قاعدة البيانات مع دلفي بواسطة ado ثم بدأت العمل عليها و قمت بعمل فورم للبحث عن في الجدول عن طريق الرقم ( N°) كالتالي :
كود :
procedure TForm1.Edit1Exit(Sender: TObject); begin if edit1.Text<>'' then begin DMa.adotab1.Filtered:=false; DMa.adotab1.Filter:='N°= '+ QuotedStr(edit1.Text); DMa.adotab1.Filtered:=true; end else DMa.adotab1.Filtered:=false; end;
و لكن عند التنفيذ يظهر المسج التالي : " BITMAP IMAGE IS NOT VALID" بالنسبة للحقول(document) التي تحتوي على ملف pdf .
لا اله الا انت سبحانك اني كنت من الظالمين
الرد
#6
وعليكم السلام و رحمة الله

ذكرت سابقا
كود :
تلك الرسالة تدل على أن البيانات المتعامل معها ليست من نوع bitmap
أي إنك تحاول التعامل مع الحقل على أنه bitmap .
لا يكمن عرض Pdf في المكون DBImage

عليك إستخراجه و فتحه كما ذكرت سابقا أو بإستخدام الـ Stream ( لم أستخدمها من قبل )

شيئ آخر وضح أكثر !

بالتوفيق
الرد
#7
شكرا أخي على الإجابة و سأوضح لك أكثر :
أنا لم أستخدم dbimage أصلا و كل ما عملته بحث في الجدول فقط لاظهار بيانات ليست blob كالاسم و التاريخ عن طريق dbedit يعني لم أصل حتى الى عرض الحقل من نوع blob و لكن أعتقد ان الحل في ال stream كما قلت و لكن انا لا اعرف ما هو الstream أصلا و لا كيفية التعامل معه.
لا اله الا انت سبحانك اني كنت من الظالمين
الرد
#8
السلام عليكم

العفو ، لكن لحد الآن لم تظهر سبب المشكل أرفق المحاولة .

بالنسبة للعمل بالطريقة الأخرى

بإستعمال TMemoryStream
كود :
var MemStream: TMemoryStream; begin MemStream := TMemoryStream.Create; try TBlobField(ADODataSet1.FieldByName('YourBlobF')).SaveToStream(MemStream); MemStream.Position :=0; [COLOR=DarkGreen] Image1.Picture.Bitmap.LoadFromStream(MemStream);[/COLOR] finally MemStream.Free; end;
هذا مثال لإستخراج صور Bmp و إظهارها في Image1

بالنسبة للـ Pdf إستخدم أحد المكونات التي تحتوى على الدالة
LoadFromStream بنفس الطريقة طبق !
و مكتبة AcroPDF لا تحتوي عليها و على حد علمي لا توجد مكونات مجانية تحتوي عليها

بالتوفيق
الرد
#9
السلام عليكم
إقتباس :بالنسبة للـ Pdf إستخدم أحد المكونات التي تحتوى على الدالة LoadFromStream
بإستخدام مكونات pdftoolkit ( مكونات تجارية )
كود :
gtPDFDocument1.LoadFromStream(MemStream) ; gtPDFViewer1.Active :=true;
[صورة: pdfview.jpg]

ملاحظة لا تدمر الـ MemStream بعد الفتح ( دمره بعد الإنتهاء من قراءة الملف مثلا .. ) و إلا واجهت مشكل Generic Error

بالتوفيق
الرد
#10
السلام عليكم.
بارك الله فيك أخي ،سأجرب الاقتراح ثم أخبرك بالنتيجة.
لا اله الا انت سبحانك اني كنت من الظالمين
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم