Чтение штрих-кода из PDF на С#

Мы можем генерировать и добавлять штрих-коды в документы PDF, как описано в моем предыдущем посте. В некоторых случаях нам может потребоваться программно обнаруживать и считывать штрих-коды, встроенные в PDF-документы. Это помогает декодировать встроенную информацию в виде штрих-кодов и QR-кодов из документов PDF, таких как счета, квитанции или отчеты. В этой статье мы узнаем, как читать штрих-код из PDF-документа с помощью C#.

Статья должна охватывать следующие темы:

  1. API C# для чтения штрих-кода из PDF
  2. Чтение штрих-кода из PDF
  3. Преобразование PDF в изображение и чтение штрих-кодов
  4. Чтение штрих-кодов из PDF с помощью PngDevice
  5. Извлечь и прочитать штрих-код из PDF
  6. Найти и прочитать изображение штрих-кода из PDF

С# API для чтения штрих-кода из PDF

Мы будем следовать двухэтапной процедуре чтения штрих-кодов из PDF-документов. Во-первых, мы будем использовать API Aspose.PDF для .NET для загрузки PDF-документа, затем мы будем отображать его страницы в растровые изображения. После этого мы будем считывать штрих-код с визуализированных изображений с помощью API Aspose.BarCode for .NET.

Пожалуйста, загрузите DLL API или установите его с помощью NuGet.

PM> Install-Package Aspose.BarCode
PM> Install-Package Aspose.PDF

Чтение штрих-кода из PDF с помощью С#

Класс Document API Aspose.PDF представляет PDF-документ. Функция ConvertToPNGMemoryStream() API преобразует страницу PDF в поток памяти PNG. Класс BarCodeReader API Aspose.BarCode позволяет нам выполнять операции ReadBarCodes для обнаружения штрих-кодов. Класс BarCodeResult хранит обнаруженную информацию о штрих-коде, такую как тип штрих-кода, текст кода, регион и другие параметры.

Мы можем прочитать изображения штрих-кода, встроенные в любую из страниц PDF-документа, выполнив следующие шаги:

  1. Во-первых, загрузите документ PDF, используя класс Document.
  2. Затем прокрутите все страницы и отобразите их в потоке памяти.
  3. Затем создайте экземпляр класса BarCodeReader с объектом потока.
  4. После этого вызовите метод ReadBarCodes(), чтобы получить объект BarCodeResult.
  5. Наконец, покажите информацию о штрих-коде.

В следующем примере кода показано, как считать штрих-код из документа PDF с помощью C#.

// В этом примере кода показано, как считывать штрих-код из документа PDF с помощью C#.
// Путь к документу
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Загрузите PDF-документ
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Перейти ко всем страницам PDF, начиная со страницы 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Рендеринг страницы PDF в поток
    MemoryStream ms = pdfDoc.Pages[i].ConvertToPNGMemoryStream();
    ms.Position = 0;

    // Распознавать штрих-коды из визуализированного изображения страницы
    BarCodeReader reader = new BarCodeReader(ms);
    
    // Показать результаты
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}
Codetext found: Aspose.Barcode Pdf417 Example
Symbology: Pdf417
-------------------------------
Codetext found: Aspose.Barcode QR Example
Symbology: QR
-------------------------------
Codetext found: Aspose.Barcode DataMatrix Example
Symbology: DataMatrix
-------------------------------

Пожалуйста, загрузите исходный PDF-документ со штрих-кодами, использованный в этом сообщении блога.

Преобразование PDF в изображение и чтение штрих-кодов с помощью C#

Мы можем считывать штрих-коды из PDF-документа, конвертируя PDF-страницы в изображения с помощью класса PdfConverter. Это позволяет преобразовать каждую страницу PDF-файла в изображение, а затем мы будем считывать информацию о штрих-коде из преобразованного изображения.

Мы можем считывать штрих-коды с преобразованных страниц PDF, выполнив следующие действия:

  1. Во-первых, загрузите документ PDF, используя класс Document.
  2. Затем создайте экземпляр класса PdfConverter.
  3. При необходимости установите параметры рендеринга, такие как BarcodeOptimization.
  4. Затем установите разрешение изображения.
  5. Затем укажите StartPage и EndPage, чтобы преобразовать диапазон страниц в изображения.
  6. Затем вызовите метод DoConvert(), чтобы преобразовать выбранные страницы в изображения.
  7. Затем сохраните изображение для потоковой передачи в цикле.
  8. Затем создайте экземпляр класса BarCodeReader с объектом потока.
  9. После этого вызовите метод ReadBarCodes(), чтобы получить объект BarCodeResult.
  10. Наконец, покажите информацию о штрих-коде.

В следующем примере кода показано, как преобразовывать страницы PDF в изображения и считывать штрих-коды с помощью C#.

// В следующем примере кода показано, как преобразовать PDF-страницы в изображения с помощью PDF Converter и считывать штрих-коды с помощью C#.
// Путь к документу
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Загрузите PDF-документ
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Инициализировать PdfConvertor
Aspose.Pdf.Facades.PdfConverter pdfConverter = new Aspose.Pdf.Facades.PdfConverter(pdfDoc);

// Установить оптимизацию штрих-кода
pdfConverter.RenderingOptions.BarcodeOptimization = true;

// Установить разрешение страницы
// 300 dpi — стандартное разрешение
pdfConverter.Resolution = new Aspose.Pdf.Devices.Resolution(300);

// Установите все страницы для отображения в изображения
pdfConverter.StartPage = 1; //starts from page 1
pdfConverter.EndPage = pdfConverter.Document.Pages.Count;

// Преобразование выбранных страниц в изображения
pdfConverter.DoConvert();
while (pdfConverter.HasNextImage())
{
    // Отобразить текущую страницу в изображение потока памяти
    MemoryStream ms = new MemoryStream();
    pdfConverter.GetNextImage(ms, ImageFormat.Png);
    ms.Position = 0;

    // Распознавать штрих-коды из визуализированного изображения страницы
    BarCodeReader reader = new BarCodeReader(ms);
    
    // Показать результаты
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

Чтение штрих-кодов из PDF с помощью PngDevice в C#

Вот еще один способ, похожий на предыдущий. Единственное отличие состоит в том, что в этом методе мы будем преобразовывать страницы PDF-документа в изображения с помощью класса PngDevice API. Он позволяет преобразовывать страницы документа PDF в изображения PNG.

Мы можем считывать штрих-коды с преобразованных страниц PDF в виде изображений PNG, выполнив следующие действия:

  1. Во-первых, загрузите документ PDF, используя класс Document.
  2. Затем создайте экземпляр класса PngDevice.
  3. Затем прокрутите все страницы и вызовите метод Process() для рендеринга в поток.
  4. Затем создайте экземпляр класса BarCodeReader с объектом потока.
  5. После этого вызовите метод ReadBarCodes(), чтобы получить объект BarCodeResult.
  6. Наконец, покажите информацию о штрих-коде.

В следующем примере кода показано, как преобразовывать страницы PDF в изображения PNG и считывать штрих-коды с помощью C#.

// В следующем примере кода показано, как преобразовать страницы PDF в изображения с помощью PngDevice и считывать штрих-коды с помощью C#.
// Путь к документу
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Загрузите PDF-документ
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Создайте устройство PNG со стандартным разрешением 300 dpi
Aspose.Pdf.Devices.PngDevice pngDevice = new Aspose.Pdf.Devices.PngDevice(new Aspose.Pdf.Devices.Resolution(300));

// Перейти ко всем страницам PDF, начиная со страницы 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Рендеринг страницы PDF в поток
    MemoryStream ms = new MemoryStream();
    pngDevice.Process(pdfDoc.Pages[i], ms);
    ms.Position = 0;

    // Распознать штрих-код из визуализированного изображения страницы
    BarCodeReader reader = new BarCodeReader(ms);

    // Показать результаты
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

Извлечение и чтение штрих-кода из PDF с помощью C#

Мы также можем распознавать изображения штрих-кода, встроенные в страницы PDF, с помощью класса PdfExtractor. Это позволяет извлекать изображения из PDF, а затем мы читаем информацию о штрих-коде из извлеченного изображения.

Мы можем прочитать штрих-коды из извлеченных изображений, выполнив следующие шаги:

  1. Во-первых, создайте экземпляр класса PdfExtractor.
  2. Затем свяжите входной PDF-документ с помощью метода BindPdf().
  3. Затем установите диапазон страниц для извлечения изображения.
  4. Затем вызовите метод ExtractImage() для извлечения изображений.
  5. Затем сохраните изображение для потоковой передачи в цикле.
  6. Затем создайте экземпляр класса BarCodeReader с объектом потока.
  7. После этого вызовите метод ReadBarCodes(), чтобы получить объект BarCodeResult.
  8. Наконец, покажите информацию о штрих-коде.

В следующем примере кода показано, как извлечь и прочитать изображение штрих-кода из документа PDF с помощью C#.

// В следующем примере кода показано, как преобразовать страницы PDF в изображения с помощью PdfExtractor и прочитать штрих-коды с помощью C#.
// Путь к документу
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Привязать PDF-документ
Aspose.Pdf.Facades.PdfExtractor pdfExtractor = new Aspose.Pdf.Facades.PdfExtractor();
pdfExtractor.BindPdf(file);

// Установить диапазон страниц для извлечения изображения
pdfExtractor.StartPage = 1;
pdfExtractor.EndPage = 3;

// Извлеките изображения
pdfExtractor.ExtractImage();

// Сохраняйте изображения для потоковой передачи в цикле
while (pdfExtractor.HasNextImage())
{
  // Сохранить изображение в поток
  MemoryStream imageStream = new MemoryStream();
  pdfExtractor.GetNextImage(imageStream);
  imageStream.Position = 0;

  // Распознайте штрих-коды из потока изображений выше
  BarCodeReader reader = new BarCodeReader(imageStream);
  foreach (BarCodeResult result in reader.ReadBarCodes())
  {
      Console.WriteLine("Codetext found: " + result.CodeText);
      Console.WriteLine("Symbology: " + result.CodeType);
      Console.WriteLine("-------------------------------");
  }
}

Поиск и чтение изображений штрих-кода из PDF с помощью C#

Мы также можем находить и извлекать изображения штрих-кода из PDF-документов с помощью класса ImagePlacementAbsorber. Он представляет собой объект-поглотитель объектов размещения изображения. Он выполняет поиск использования изображений и предоставляет доступ к результатам поиска через коллекцию ImagePlacements. Этот метод помогает распознавать штрих-коды с исходным разрешением. Он может неправильно распознавать векторные форматы.

Мы можем найти и прочитать штрих-коды из документов PDF, выполнив следующие действия:

  1. Во-первых, загрузите документ PDF, используя класс Document.
  2. Затем создайте экземпляр класса ImagePlacementAbsorber.
  3. Затем вызовите метод Visit() для каждой страницы в цикле.
  4. Затем прокрутите все изображения, найденные в коллекции ImagePlacements.
  5. Затем сохраните изображение в поток памяти.
  6. Затем создайте экземпляр класса BarCodeReader с объектом потока.
  7. После этого вызовите метод ReadBarCodes(), чтобы получить объект BarCodeResult.
  8. Наконец, покажите информацию о штрих-коде.

В следующем примере кода показано, как найти и прочитать изображения штрих-кода из PDF-файла с помощью C#.

// В этом примере кода показано, как считывать штрих-код из документа PDF с помощью ImagePlacementAbsorber.
// Путь к документу
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Загрузите PDF-документ
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Инициализировать ImagePlacementAbsorber
Aspose.Pdf.ImagePlacementAbsorber imagePlacementAbsorber = new Aspose.Pdf.ImagePlacementAbsorber();

// Обработать все страницы PDF в документе, начиная со страницы 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Посетите страницу создания экстрактора изображений
    imagePlacementAbsorber.Visit(pdfDoc.Pages[i]);

    // Извлечь все изображения со страницы PDF
    foreach (Aspose.Pdf.ImagePlacement imagePlacement in imagePlacementAbsorber.ImagePlacements)
    {
        // Преобразование изображения со страницы PDF в поток
        MemoryStream ms = new MemoryStream();
        imagePlacement.Save(ms, ImageFormat.Png);
        ms.Position = 0;

        // Распознать штрих-код из извлеченного изображения страницы
        BarCodeReader reader = new BarCodeReader(ms);

        // Показать результаты
        foreach (BarCodeResult result in reader.ReadBarCodes())
        {
            Console.WriteLine("Codetext found: " + result.CodeText);
            Console.WriteLine("Symbology: " + result.CodeType);
            Console.WriteLine("-------------------------------");
        }
    }
}

Получить бесплатную лицензию

Вы можете получить бесплатную временную лицензию, чтобы опробовать библиотеки без ограничений на пробную версию.

Вывод

В этой статье мы узнали, как читать штрих-коды из PDF-документов на C#. Мы также видели различные подходы и методы для извлечения изображений из PDF-документа и программного декодирования встроенных штрих-кодов. Кроме того, вы можете узнать больше об API, используя документацию для Aspose.BarCode и документацию для Aspose.PDF. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем форуме.

Смотрите также