LEADTOOLS (Lead Technology) была создана Моу Daher и Рич Литтл в 1990 году, со штаб-квартирой в городе Шарлотт, штат Северная Каролина. LEAD является создание г Даера на рынке цифровых технологий сжатия изображения в области изобретения ориентированного. В ходе развития в 29 лет, ПРИВЕСТИ свое владение в основных странах мира лидерство на рынке в области цифровых инструментов разработки изображения стало признанным мировым лидером. Разработка и релиз LEADTOOLS LEAD является разработка комплекта наград.
Штрих-код LEADTOOLS Pro содержит проявитель для обнаружения, чтения и записи более 100 различных типов штрих-кодов и подтипа 1D и 2D, таких как UPC, EAN, Code 128, QR-код, матрица данных и PDF417 и так далее. По сравнению с другими аналогичными видами технологий визуализации штрих-кодов на рынке, LEADTOOLS Barcode Pro является лучшим.
Интеллектуальный захват может означать несколько различных способов, чтобы захватить данные изображения или документа. В этой статье мы рассмотрим, как разумно захватить штрих-коды из отсканированных документов. LEADTOOLS TWAIN SDK и штрих-кодов SDK, разработчики могут легко использовать его для создания физических приложений для сканирования документов, а также для захвата и извлечения какой-либо штрих-код, найденный в базе данных.
AIIM Недавний опрос показал, что 32% респондентов используют технологию смарт захвата для извлечения штрих-кодов из PDF и других цифровых документов. Сказав это, давайте создадим приложение .NET на рабочем столе, он распознает отсканированное изображение штрих-кода. Для каждого штрих-код найден, мы будем извлекать данные, а затем сохранить данные в текстовый файл, а отсканированный документ в формате PDF.
Это приложение будет использовать только три кнопки. Сохранение PDF для выбора и выходного каталога TXT, для выбора сканера для сканирования, для выполнения другого сканирования и распознать штрих-код.
SelectDir_Click
// Изменение выходного каталога с помощью (FolderBrowserDialog DLG = новый FolderBrowserDialog ()) { dlg.ShowNewFolderButton = истина; если (dlg.ShowDialog (это) == DialogResult.OK) _outputDirectory = System.IO.Path.GetFullPath (dlg.SelectedPath); }
ScannerSelect_Click
// Выбираем сканер для использования _twainSession.SelectSource (NULL);
Scan_Read_Click
// Сканирование новой страницы (ы) _twainSession.Acquire (TwainUserInterfaceFlags.Show);
Теперь добавьте следующие переменные.
частный статический BarcodeEngine двигатель = новый BarcodeEngine (); частный статический читатель BarcodeReader = engine.Reader; // двойка сессия частных статических TwainSession _twainSession; // Каталог вывода для сохранения PDF - файлов личное статические строки _outputDirectory; // Команда обработки изображений , мы собираемся использовать для очистки отсканированных изображений частного статического списка <RasterCommand> _imageProcessingCommands; частный статические INT _scanCount; частный статический StringBuilder С.Б.;
В Form1_Load, добавьте код, чтобы установить лицензию, инициализировать новый сеанс Твена, подписаться TwainSession.Acquire событие, а затем инициализировать любую команду обработки изображений.
RasterSupport.SetLicense(@"", ""); _twainSession = new TwainSession(); _twainSession.Startup(this.Handle, "My Company", "My Product", "My Version", "My Application", TwainStartupFlags.None); _twainSession.AcquirePage += new EventHandler<TwainAcquirePageEventArgs>(_twainSession_AcquirePage); // Add as many as you like, here we will add Deskew and Despeckle _imageProcessingCommands = new List<RasterCommand>(); _imageProcessingCommands.Add(new DeskewCommand()); _imageProcessingCommands.Add(new DespeckleCommand());
在Form1_FormClosed中,结束TWAIN会话。
// End the twain session _twainSession.Shutdown();
最后添加Twain获取句柄的代码。
private void _twainSession_AcquirePage(object sender, TwainAcquirePageEventArgs e) { _scanCount++; // We have a page RasterImage image = e.Image; // First, run the image processing commands on it foreach (RasterCommand command in _imageProcessingCommands) { command.Run(image); } // Read all the barcodes in this image BarcodeData[] barcodes = reader.ReadBarcodes(e.Image, LeadRect.Empty, 0, null); // Print out the barcodes we found sb = new StringBuilder(); sb.AppendLine($"Contains {barcodes.Length} barcodes"); for (int i = 0; i < barcodes.Length; i++) { BarcodeData barcode = barcodes[i]; sb.AppendLine($" {i + 1} - {barcode.Symbology} - {barcode.Value}"); } // Save string builder to a text file System.IO.File.WriteAllText($@"{_outputDirectory}\barcodes{_scanCount}.txt", sb.ToString()); // Save image as PDF using (RasterCodecs codecs = new RasterCodecs()) { codecs.Save(e.Image, $@"{_outputDirectory}\ScannedImage{_scanCount}.pdf", RasterImageFormat.RasPdf, 0); } }