示例#1
0
        public void SaveToFileSystem(PdfReader documentReader, Twain32 scannedPages, string filePath, bool addToExistingFile)
        {
            var doc = new Document(PageSize.A4);

            doc.SetMargins(0, 0, 0, 0);
            var writer = PdfWriter.GetInstance(doc, new FileStream(filePath, FileMode.Create));

            doc.Open();
            if (addToExistingFile)
            {
                for (int pageNumber = 1; pageNumber <= documentReader.NumberOfPages; pageNumber++)
                {
                    PdfImportedPage page = writer.GetImportedPage(documentReader, pageNumber);
                    writer.DirectContent.AddTemplate(page, 0, 0);
                    doc.NewPage();
                }
            }

            for (int i = 0; i < scannedPages.ImageCount; i++)
            {
                Image pdfImage = Image.GetInstance(scannedPages.GetImage(i), System.Drawing.Imaging.ImageFormat.Jpeg);
                pdfImage.ScaleAbsolute(600f, 820f);
                doc.Add(pdfImage);
                doc.NewPage();
            }

            doc.Close();
            doc.Dispose();
        }
示例#2
0
 private void _twain32_AcquireCompleted(object sender, EventArgs e)
 {
     if (_twain32.ImageCount > 0)
     {
         OnImageReceiver(_twain32.GetImage(0));
     }
 }
示例#3
0
        private void SetupTwain()
        {
            _twain32 = new Twain32 ();
            _twain32.OpenDSM();

            _twain32.AcquireCompleted+=(object sender,EventArgs e) => {
                TotalImages = _twain32.ImageCount;
                for(int i = 0; i < _twain32.ImageCount; i++)
                {
                    Pixbuf CurImg = WinImageToPixbuf(_twain32.GetImage(i));
                    if(ImageTransfer == null)
                    {// Записываем во внутренний массив
                        Images.Add(CurImg);
                    }
                    else
                    {// Передаем через событие
                        ImageTransferEventArgs arg = new ImageTransferEventArgs();
                        arg.AllImages = TotalImages;
                        arg.Image = CurImg;
                        ImageTransfer(this, arg);
                    }
                }
                Console.WriteLine("DataTransferred");
            };
        }
示例#4
0
        private void AcquireCompleted()
        {
            //logger.Debug("AcquireCompleted()");
            if (twain.ImageCount > 0)
            {
                var img = twain.GetImage(0);

                var eventArg = new ImageChangedEventArgs(img);
                eventArg.IsScanLayoutSet = IsLayoutSet;

                ImageChanged(this, eventArg);
                Completed(this, new HWCompletedEventArgsEventArgs(""));
            }
            else
            {
                Error(this, new HWErrorEventArgs("Ошибка сканирования"));
            }
            //logger.Debug("AcquireCompleted() end");
        }
示例#5
0
 private void _twain32_AcquireCompleted(object sender, EventArgs e)
 {
     logger.Debug("Acquire Completed");
     //FIXME Если не будет использоваться нативный режим событие не нужно.
     TotalImages = _twain32.ImageCount;
     for (int i = 0; i < _twain32.ImageCount; i++)
     {
         System.Drawing.Image WinImg = _twain32.GetImage(i);
         Pixbuf CurImg = WinImageToPixbuf(WinImg);
         WinImg.Dispose();
         if (ImageTransfer == null)
         {                // Записываем во внутренний массив
             Images.Add(CurImg);
         }
         else
         {                // Передаем через событие
             ImageTransferEventArgs arg = new ImageTransferEventArgs();
             arg.AllImages = TotalImages;
             arg.Image     = CurImg;
             ImageTransfer(this, arg);
         }
     }
     logger.Debug("Data Transferred");
 }
示例#6
0
        //public static bool _isDataSourceOpen = false;

        //public static void _twain_TwainStateChanged(object sender, Twain32.TwainStateEventArgs e)
        //{
        //    try
        //    {
        //        // ...
        //        _isDataSourceOpen = (e.TwainState & Twain32.TwainStateFlag.DSOpen) != 0;
        //        // ...
        //        MessageBox.Show("twain 상태가 변경되었습니다.");
        //    }
        //    catch (Exception ex)
        //    {
        //        // ...
        //    }
        //}

        //public static void timer1_Tick(object sender, EventArgs e)
        //{
        //    using (Twain32 PLOCRtwain = new Twain32())
        //    {
        //        try
        //        {
        //            // MessageBox.Show("타이머 작동 확인용 창");
        //            //     if (_isDataSourceOpen)
        //            //     {
        //            // ...
        //            var _isFeederLoaded = (bool)PLOCRtwain.GetCurrentCap(TwCap.FeederLoaded);
        //            // ...
        //            MessageBox.Show("처방전이 올려졌습니다.");
        //            //      }
        //        }
        //        catch (Exception ex)
        //        {
        //            // ...
        //        }
        //    }
        //}


        public static Bitmap scanImage()
        {
            Bitmap scanedImage = null;

            try
            {
                using (Twain32 PLOCRtwain = new Twain32())
                {
                    PLOCRtwain.IsTwain2Enable = true;   // DSM(data source manager 를 열기 전에 twain 2.0 버전이상을 쓰겠다고 지정해야함
                    //  PLOCRtwain.Dispose();   // OpenDSM() 에서 보호된 메모리 쓰려고 하는 오류가 생겨서.... 원인을 찾아보고 이 코드는 안 쓰는 방향으로 해야함.
                    PLOCRtwain.OpenDSM();

                    //    PLOCRtwain.SourceIndex = 0;

                    PLOCRtwain.OpenDataSource();

                    //       PLOCRtwain.GetResolutions();

                    PLOCRtwain.Capabilities.XResolution.Set(300f);      // 스캔 해상도 300dpi 로 지정하고, float 로 넣어야 하므로 300f 로 입력
                    PLOCRtwain.Capabilities.YResolution.Set(300f);

                    PLOCRtwain.ShowUI = false;  // twain 사용자 인터페이서를 보이지 않도록 하고

                    try
                    {
                        if ((PLOCRtwain.IsCapSupported(TwCap.AutoScan) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.AutoScan, false);       // 한장씩 처리하기 위해 aucoscan 을 false 로 세팅
                        }

                        if ((PLOCRtwain.IsCapSupported(TwCap.AutoFeed) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.AutoFeed, false);       // 한장 처리하고 대기하기 위해 autofed 를 false 로 세팅
                        }

                        if ((PLOCRtwain.IsCapSupported(TwCap.DuplexEnabled) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.DuplexEnabled, true);
                        }

                        PLOCRtwain.AcquireCompleted += (sender, e) =>   // 이 부분이 Acquire 보다 먼저 나와야 함, 한참 헤멨음
                        {
                            // scanImage();
                            // string _file_name = string.Format("{0}\\ScanImage.jpg", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
                            scanedImage = (Bitmap)PLOCRtwain.GetImage(0);
                            File.Delete(@"C:\Program Files\PLOCR\prescription.png");
                            scanedImage.Save(@"C:\Program Files\PLOCR\prescription.png");
                        };

                        if ((PLOCRtwain.IsCapSupported(TwCap.FeederEnabled) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.FeederEnabled, true);

                            //        MessageBox.Show("feederenabled");
                            var _isFeederLoaded = false;

                            while (_isFeederLoaded == false)        // 처방전이 ADF 트레이에 올라올 때까지 무한루프를 돌리며 대기, 좋은 방법은 아닌 것 같음
                            {
                                //           MessageBox.Show("feederloaded 루프 안");

                                _isFeederLoaded = (bool)PLOCRtwain.GetCurrentCap(TwCap.FeederLoaded); // 반복해서 현재 feederloaded 상태를 감시

                                if (_isFeederLoaded == true)                                          // 처방전이 올라왔으면 바로 읽어들이기 시작
                                {
                                    /////////////////// 처방전 스캔 시작 ///////////////////////////
                                    //splashPres fmPres = new splashPres();
                                    //fmPres.Owner = DataEdit.ActiveForm;  // child form 을 알리고
                                    //fmPres.Show();       // 스캔중 화면을 띄우고

                                    PLOCRtwain.Acquire();

                                    //fmPres.Close(); // 스캔중 화면 닫고
                                    ///////////////// 처방전 스캔 끝 ///////////////////////////

                                    //  PLOCRtwain.Dispose();      // twain 닫고
                                    //    PLOCRtwain.CloseDataSource();
                                    //    PLOCRtwain.CloseDSM();
                                }
                                else if (_isFeederLoaded == false)
                                {
                                }
                            }
                        }

                        //    PLOCRtwain.Acquire();
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("스캐너 옵션을 가져오지 못했습니다.");
                        System.Diagnostics.Process.GetCurrentProcess().Kill();      // 프로그램 강제 종료
                    }

                    //PLOCRtwain.CloseDataSource();
                    //PLOCRtwain.CloseDSM();
                }
            }
            catch (TwainException)
            {
                Console.WriteLine("스캔 오류가 발생했습니다.");
                System.Diagnostics.Process.GetCurrentProcess().Kill();      // 프로그램 강제 종료
            }

            return(scanedImage);
        }
示例#7
0
文件: scan.cs 项目: linuxbank/PLOCR
        public static Bitmap scanImage()
        {
            Bitmap scanedImage = null;
            try
            {
                using (Twain32 PLOCRtwain = new Twain32())
                {
                    PLOCRtwain.IsTwain2Enable = true;   // DSM(data source manager 를 열기 전에 twain 2.0 버전이상을 쓰겠다고 지정해야함
                  //  PLOCRtwain.Dispose();   // OpenDSM() 에서 보호된 메모리 쓰려고 하는 오류가 생겨서.... 원인을 찾아보고 이 코드는 안 쓰는 방향으로 해야함.
                    PLOCRtwain.OpenDSM();

                    //    PLOCRtwain.SourceIndex = 0;

                    PLOCRtwain.OpenDataSource();

                    //       PLOCRtwain.GetResolutions();

                    PLOCRtwain.Capabilities.XResolution.Set(300f);      // 스캔 해상도 300dpi 로 지정하고, float 로 넣어야 하므로 300f 로 입력
                    PLOCRtwain.Capabilities.YResolution.Set(300f);

                    PLOCRtwain.ShowUI = false;  // twain 사용자 인터페이서를 보이지 않도록 하고

                    try
                    {
                        if ((PLOCRtwain.IsCapSupported(TwCap.AutoScan) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.AutoScan, false);       // 한장씩 처리하기 위해 aucoscan 을 false 로 세팅
                        }

                        if ((PLOCRtwain.IsCapSupported(TwCap.AutoFeed) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.AutoFeed, false);       // 한장 처리하고 대기하기 위해 autofed 를 false 로 세팅
                        }

                        if ((PLOCRtwain.IsCapSupported(TwCap.DuplexEnabled) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.DuplexEnabled, true);
                        }

                        PLOCRtwain.AcquireCompleted += (sender, e) =>   // 이 부분이 Acquire 보다 먼저 나와야 함, 한참 헤멨음
                        {
                           // scanImage();
                            // string _file_name = string.Format("{0}\\ScanImage.jpg", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
                            scanedImage = (Bitmap)PLOCRtwain.GetImage(0);
                            File.Delete(@"C:\Program Files\PLOCR\prescription.png");
                            scanedImage.Save(@"C:\Program Files\PLOCR\prescription.png");
                        };

                        if ((PLOCRtwain.IsCapSupported(TwCap.FeederEnabled) & TwQC.Set) != 0)
                        {
                            PLOCRtwain.SetCap(TwCap.FeederEnabled, true);

                    //        MessageBox.Show("feederenabled");
                            var _isFeederLoaded = false;

                            while (_isFeederLoaded == false)        // 처방전이 ADF 트레이에 올라올 때까지 무한루프를 돌리며 대기, 좋은 방법은 아닌 것 같음
                            {
                                //           MessageBox.Show("feederloaded 루프 안");

                                _isFeederLoaded = (bool)PLOCRtwain.GetCurrentCap(TwCap.FeederLoaded);   // 반복해서 현재 feederloaded 상태를 감시

                                if (_isFeederLoaded == true)    // 처방전이 올라왔으면 바로 읽어들이기 시작
                                {
                                    ///////////////// 처방전 스캔 시작 ///////////////////////////
                                    splashPres fmPres = new splashPres();
                                    fmPres.Owner = DataEdit.ActiveForm;  // child form 을 알리고
                                    fmPres.Show();       // 스캔중 화면을 띄우고

                                    PLOCRtwain.Acquire();

                                    fmPres.Close(); // 스캔중 화면 닫고
                                    ///////////////// 처방전 스캔 끝 ///////////////////////////

                                 //  PLOCRtwain.Dispose();      // twain 닫고
                                    //    PLOCRtwain.CloseDataSource();
                                    //    PLOCRtwain.CloseDSM();
                                }
                                else if (_isFeederLoaded == false)
                                {
                                }
                            }
                        }

                    //    PLOCRtwain.Acquire();

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("스캐너 옵션을 가져오지 못했습니다.");
                        System.Diagnostics.Process.GetCurrentProcess().Kill();      // 프로그램 강제 종료
                    }

                    //PLOCRtwain.CloseDataSource();
                    //PLOCRtwain.CloseDSM();
                }
            }
            catch (TwainException)
            {
                Console.WriteLine("스캔 오류가 발생했습니다.");
                System.Diagnostics.Process.GetCurrentProcess().Kill();      // 프로그램 강제 종료
            }

            return scanedImage;
        }