تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مساعدة في برنامج سكنر
#1
تحية طيبة . . .

ارجو مساعدتي في برنامج سكنر 
احتاج الى برنامج يقوم بسحب الصور من الاسكنر وحفظها كملف PDF
الرد }}}
تم الشكر بواسطة:
#2
(10-02-16, 11:04 AM)عدنان الشمري كتب : تحية طيبة . . .

ارجو مساعدتي في برنامج سكنر 
احتاج الى برنامج يقوم بسحب الصور من الاسكنر وحفظها كملف PDF
السلام عليكم ورحمة الله وبركاته

يمكنك الإعتماد على مكتبة WIA المقدمة ضمن حزمة نظام التشغيل Windows للتكامل مع وحدات الماسح الضوئي Scanners أما بخصوص استخراج الملف على شكل صيغة PDF ففي تلك الحالة يمكنك الإعتماد على مكتبة ITextSharp وهي مكتبة مفتوحة المصدر تُمكنك من تحقيق أحلامك فيما يخص التعامل مع ملفات PDF بكل جدارة.

فالتالي فئة تُمكنك من التكامل و سحب الصور من أجهزة الماسح الضوئي:


PHP كود :
public class Scanner
    
{
 
       string DeviceID;

 
       const string wiaFormatBMP "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";
 
       const string wiaFormatPNG "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
 
       const string wiaFormatGIF "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}";
 
       const string wiaFormatJPEG "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
 
       const string wiaFormatTIFF "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}";
 
       class WIA_DPS_DOCUMENT_HANDLING_SELECT
        
{
 
           public const uint FEEDER 0x00000001;
 
           public const uint FLATBED 0x00000002;
 
       }

 
       class WIA_DPS_DOCUMENT_HANDLING_STATUS
        
{
 
           public const uint FEED_READY 0x00000001;
 
       }

 
       class WIA_PROPERTIES
        
{
 
           public const uint WIA_RESERVED_FOR_NEW_PROPS 1024;
 
           public const uint WIA_DIP_FIRST 2;
 
           public const uint WIA_DPA_FIRST WIA_DIP_FIRST WIA_RESERVED_FOR_NEW_PROPS;
 
           public const uint WIA_DPC_FIRST WIA_DPA_FIRST WIA_RESERVED_FOR_NEW_PROPS;
 
           //
 
           // Scanner only device properties (DPS)
 
           //
 
           public const uint WIA_DPS_FIRST WIA_DPC_FIRST WIA_RESERVED_FOR_NEW_PROPS;
 
           public const uint WIA_DPS_DOCUMENT_HANDLING_STATUS WIA_DPS_FIRST 13;
 
           public const uint WIA_DPS_DOCUMENT_HANDLING_SELECT WIA_DPS_FIRST 14;
 
       }

 
       class WIA_ERRORS
        
{
 
           public const uint BASE_VAL_WIA_ERROR 0x80210000;
 
           public const uint WIA_ERROR_PAPER_EMPTY BASE_VAL_WIA_ERROR 3;
 
       }

 
       public void ADFScan()
 
       {
 
           if (!Directory.Exists(Application.StartupPath + @"\\Workarea\\"))
 
           {
 
               Directory.CreateDirectory(Application.StartupPath + @"\\Workarea\\");
 
           }
 
           else
            
{
 
               string[] files Directory.GetFiles(Application.StartupPath + @"\\Workarea\\");
 
               for (int i 0files.Lengthi++)
 
               {
 
                   File.Delete(files[i]);
 
               }
 
           }

 
           //Choose Scanner
 
           CommonDialogClass class1 = new CommonDialogClass();
 
           Device d class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceTypetruefalse);
 
           if (!= null)
 
           {
 
               this.DeviceID d.DeviceID;
 
           }
 
           else
            
{
 
               //no scanner chosen
 
               return;
 
           }



 
           WIA.CommonDialog WiaCommonDialog = new CommonDialogClass();

 
           bool hasMorePages true;
 
           int x 0;
 
           int numPages 0;
 
           while (hasMorePages)
 
           {
 
               //Create DeviceManager
 
               DeviceManager manager = new DeviceManagerClass();
 
               Device WiaDev null;
 
               foreach (DeviceInfo info in manager.DeviceInfos)
 
               {
 
                   if (info.DeviceID == this.DeviceID)
 
                   {
 
                       WIA.Properties infoprop null;
 
                       infoprop info.Properties;

 
                       //connect to scanner
 
                       WiaDev info.Connect();


 
                       break;
 
                   }
 
               }



 
               //Start Scan

 
               WIA.ImageFile img null;
 
               WIA.Item Item WiaDev.Items[1] as WIA.Item;

 
               try
                
{

 
                   img = (WIA.ImageFile)WiaCommonDialog.ShowTransfer(ItemwiaFormatJPEGfalse);


 
                   //process image:
 
                   //one would do image processing here
 
                   //

 
                   //Save to file
 
                   string varImageFileName  @"C:\Image" x.ToString() + ".jpg";
 
                   img.SaveFile(varImageFileName);



 
               }
 
               catch (Exception ex)
 
               {
 
                   //MessageBox.Show("Error: " + ex.Message);
 
               }
 
               finally
                
{
 
                   Item null;
 
                   //determine if there are any more pages waiting
 
                   Property documentHandlingSelect null;
 
                   Property documentHandlingStatus null;
 
                   foreach (Property prop in WiaDev.Properties)
 
                   {
 
                       if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_SELECT)
 
                           documentHandlingSelect prop;
 
                       if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS)
 
                           documentHandlingStatus prop;


 
                   }

 
                   hasMorePages false//assume there are no more pages
 
                   if (documentHandlingSelect != null)
 
                   //may not exist on flatbed scanner but required for feeder
 
                   {
 
                       //check for document feeder
 
                       if ((Convert.ToUInt32(documentHandlingSelect.get_Value()) & WIA_DPS_DOCUMENT_HANDLING_SELECT.FEEDER) != 0)
 
                       {
 
                           hasMorePages = ((Convert.ToUInt32(documentHandlingStatus.get_Value()) & WIA_DPS_DOCUMENT_HANDLING_STATUS.FEED_READY) != 0);
 
                       }
 
                   }
 
                   x++;
 
               }
 
           }

 
       }
 
   


بواسطة إستعداء الإجراء ADFScan سوف تحصل على صورة او مجموعة صورة -بناءا على عدد صفحات الملف المُمرر إلى جهاز الماسح الصوئي- في المسار C:\ImageX.jpg.

وفالتالي كود يوضح كيفية إنشاء ملف PDF بإستخدام itextsharp وإضافة الصورة المراد تمريرها إلى الملف:

PHP كود :
private void CreatePDF()
 
       {
 
           string work_file  @"C:\mypdf.pdf";
 
           iTextSharp.text.Document PdfDoc = new iTextSharp.text.Document();
 
           iTextSharp.text.pdf.PdfWriter PdfWriter iTextSharp.text.pdf.PdfWriter.GetInstance(PdfDoc, new FileStream(work_fileFileMode.Create));
 
           PdfDoc.Open();
 
           // start the loop of the images already scanned
 
            iTextSharp.text.Image pic iTextSharp.text.Image.GetInstance(Image.FromFile(MY_IMAGE_FILENAME_HERE), System.Drawing.Imaging.ImageFormat.Jpeg);

 
                   if (pic.Height pic.Width)
 
                   {
 
                       //Maximum height is 800 pixels.
 
                       float percentage 0.0f;
 
                       percentage 700 pic.Height;
 
                       pic.ScalePercent(percentage 100);
 
                   }
 
                   else
                    
{
 
                       //Maximum width is 600 pixels.
 
                       float percentage 0.0f;
 
                       percentage 540 pic.Width;
 
                       pic.ScalePercent(percentage 100);
 
                   }

 
                   pic.Border iTextSharp.text.Rectangle.BOX;
 
                   pic.BorderColor iTextSharp.text.Color.BLACK;
 
                   pic.BorderWidth 3f;
 
                   PdfDoc.Add(pic);
 
                   PdfDoc.NewPage();
 
           //end of the scanned images loop
 
           PdfDoc.Close();
 
           PdfWriter.Close();
 
       


فقط إبداء بحلقة تكرارية تقوم بتحميل الصورة المتواجدة داخل مجلد سحب الصور -المسار -C:\ImageX.jpg- على سبيل المثال المُحدد داخل الفئة الخاصة بسحب الصور وعوض عن المتغير MY_IMAGE_FILENAME_HERE المتواجد بالكود السابق بمسار الصورة الحالية ضمن الحلقة وسوف يتم إنشاء ملف PDF بإسم mypdf.pdf داخل المسار C:\mypdf.pdf فور الإنتهاء من الإجراء CreatePDF.

المكتبتين بالمرفقات.


الملفات المرفقة
.zip   Interop.WIA.zip (الحجم : 14.67 ك ب / التحميلات : 270)
.zip   itextsharp.zip (الحجم : 1.19 م ب / التحميلات : 400)
الرد }}}
تم الشكر بواسطة: عدنان الشمري , عدنان الشمري
#3
السلام عليكم ورحمة الله وبركاتة

شكراً لمساعدتي
اخي العزيز تظهر مشكلة عند استدعاء ADFScan
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in Scanner WIA.exe

Additional information: Exception from HRESULT: 0x80210015

سؤال اخر اذا امكن
في حال عندي اكثر من سكنر كيف يمكنني تحديد سكنر معين لاخذ الصور منه


الملفات المرفقة
.rar   Scanner WIA.rar (الحجم : 1.97 م ب / التحميلات : 381)
الرد }}}
تم الشكر بواسطة:
#4
(19-02-16, 05:39 PM)عدنان الشمري كتب : السلام عليكم ورحمة الله وبركاتة

شكراً لمساعدتي
اخي العزيز تظهر مشكلة عند استدعاء ADFScan
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in Scanner WIA.exe

Additional information: Exception from HRESULT: 0x80210015

سؤال اخر اذا امكن
في حال عندي اكثر من سكنر كيف يمكنني تحديد سكنر معين لاخذ الصور منه

تم التعديل, بخصوص تعدد أجهزة السكانر التي يمكن أن تكون مُتصلة بالحاسب فلا تقلق سوف يخيرك الكلاس بينهم.

وفقك الله,
نسألكم الدعاء بالمغفرة.


الملفات المرفقة
.zip   Scanner WIA.zip (الحجم : 2.57 م ب / التحميلات : 465)
الرد }}}
تم الشكر بواسطة: عدنان الشمري , عدنان الشمري
#5
جزاك الله الف خير
اتعبتك معي
البرنامج لا يكتشف وجود السكنر المعرف على الحاسبة
علماً حولت الكود Device d = class1.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false);
الى
Device d = class1.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, true, false);
كونة يختص بجلب اجهزة السكنر على حسب علمي
جهاز السكنر المعرف على الحاسبة هو من نوع GENX
الرد }}}
تم الشكر بواسطة:
#6
(21-02-16, 06:38 PM)عدنان الشمري كتب : جزاك الله الف خير
اتعبتك معي
البرنامج لا يكتشف وجود السكنر المعرف على الحاسبة
علماً حولت الكود Device d = class1.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false);
الى
           Device d = class1.ShowSelectDevice(WiaDeviceType.ScannerDeviceType, true, false);
كونة يختص بجلب اجهزة السكنر على حسب علمي
جهاز السكنر المعرف على الحاسبة هو من نوع GENX

قم بتغيير قيمة الوحدة النمطية WiaDeviceType إلى Unspecified بدلاً من Camera و Scanner وابلغني بالنتيجة.
الرد }}}
تم الشكر بواسطة:
#7
لم يعمل بعد التحويل الى Unspecified
الرد }}}
تم الشكر بواسطة:
#8
(21-02-16, 10:53 PM)عدنان الشمري كتب : لم يعمل بعد التحويل الى  Unspecified

حمل الملف المرفق.


الملفات المرفقة
.rar   ScanToPDF.rar (الحجم : 1.41 م ب / التحميلات : 503)
الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم وحمة الله وبركاتة
اشكرك اخي العزيز Programmation
البرنامج يعمل بعد تجربة على سكانر من نوع HP ولكن لا يعمل مع السكنر الخاص بي GENX
هل توجد مكتبة اخرى ممكن ان تساعدني فيها بدل من WIA
واني وجدت برنامج Scanner Pro SDK ActiveX ويمكن استخدامة مع ال C# ولكن غير مجاني (تجريبي)
الرد }}}
تم الشكر بواسطة:



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


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