Đọc mã vạch từ PDF trong C#

Chúng tôi có thể tạo và thêm mã vạch vào tài liệu PDF như được mô tả trong bài đăng trước của tôi. Trong một số trường hợp nhất định, chúng tôi có thể cần phát hiện và đọc mã vạch được nhúng vào tài liệu PDF theo chương trình. Nó giúp giải mã thông tin nhúng dưới dạng mã vạch và mã QR từ các tài liệu PDF như hóa đơn, biên lai hoặc báo cáo. Trong bài viết này, chúng ta sẽ học cách đọc mã vạch từ tài liệu PDF bằng C#.

Bài báo sẽ bao gồm các chủ đề sau:

  1. API C# để đọc mã vạch từ PDF
  2. Đọc mã vạch từ PDF
  3. Chuyển đổi PDF sang hình ảnh và đọc mã vạch
  4. Đọc mã vạch từ PDF bằng PngDevice
  5. Trích xuất và đọc mã vạch từ PDF
  6. Tìm và đọc hình ảnh mã vạch từ PDF

C# API để đọc mã vạch từ PDF

Chúng tôi sẽ làm theo quy trình hai bước để đọc mã vạch từ tài liệu PDF. Trước tiên, chúng tôi sẽ sử dụng API Aspose.PDF for .NET để tải tài liệu PDF, sau đó chúng tôi sẽ hiển thị các trang của tài liệu đó thành hình ảnh raster. Sau đó, chúng tôi sẽ đọc mã vạch từ các hình ảnh được hiển thị bằng cách sử dụng API Aspose.BarCode for .NET.

Vui lòng tải xuống DLL của API hoặc cài đặt nó bằng NuGet.

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

Đọc mã vạch từ PDF bằng C#

Lớp Tài liệu của API Aspose.PDF đại diện cho một tài liệu PDF. Hàm ConvertToPNGMemoryStream() của API hiển thị trang PDF thành luồng bộ nhớ PNG. Lớp BarCodeReader của API Aspose.BarCode cho phép chúng tôi thực hiện các hoạt động ReadBarCodes để phát hiện mã vạch. Lớp BarCodeResult lưu trữ thông tin mã vạch được phát hiện như loại mã vạch, văn bản mã, khu vực và các thông số khác.

Chúng tôi có thể đọc hình ảnh mã vạch được nhúng trên bất kỳ trang nào của tài liệu PDF bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
  2. Tiếp theo, lặp qua tất cả các trang và hiển thị chúng vào luồng bộ nhớ.
  3. Sau đó, tạo một thể hiện của lớp BarCodeReader với một đối tượng luồng.
  4. Sau đó, gọi phương thức ReadBarCodes() để lấy đối tượng BarCodeResult.
  5. Cuối cùng, hiển thị thông tin mã vạch.

Ví dụ mã sau đây cho thấy cách đọc mã vạch từ tài liệu PDF bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ tài liệu PDF bằng C#.
// Đường dẫn đến tài liệu
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Tải tài liệu PDF
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Tiếp tục tất cả các trang PDF bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Hiển thị trang PDF sang luồng
    MemoryStream ms = pdfDoc.Pages[i].ConvertToPNGMemoryStream();
    ms.Position = 0;

    // Nhận dạng mã vạch từ hình ảnh được hiển thị của trang
    BarCodeReader reader = new BarCodeReader(ms);
    
    // Hiển thị kết quả
    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
-------------------------------

Vui lòng tải xuống tài liệu PDF đầu vào có Mã vạch được sử dụng trong bài đăng blog này.

Chuyển đổi PDF sang hình ảnh và đọc mã vạch bằng C#

Chúng tôi có thể đọc mã vạch từ tài liệu PDF bằng cách chuyển đổi các trang PDF thành hình ảnh bằng cách sử dụng lớp PdfConverter. Nó cho phép chuyển đổi từng trang của tệp PDF thành hình ảnh, sau đó chúng ta sẽ đọc thông tin mã vạch từ hình ảnh được chuyển đổi.

Chúng tôi có thể đọc mã vạch từ các trang PDF được chuyển đổi bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
  2. Tiếp theo, tạo một thể hiện của lớp PdfConverter.
  3. Theo tùy chọn, hãy đặt các tùy chọn kết xuất như BarcodeOptimization.
  4. Sau đó, đặt độ phân giải hình ảnh.
  5. Tiếp theo, chỉ định StartPage và EndPage để hiển thị một loạt các trang thành hình ảnh.
  6. Sau đó, gọi phương thức DoConvert() để hiển thị các trang đã chọn thành hình ảnh.
  7. Tiếp theo, lưu hình ảnh để phát trực tiếp trong một vòng lặp.
  8. Sau đó, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
  9. Sau đó, gọi phương thức ReadBarCodes() để lấy đối tượng BarCodeResult.
  10. Cuối cùng, hiển thị thông tin mã vạch.

Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh và đọc mã vạch bằng C#.

// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh bằng PDF Convertor và đọc mã vạch bằng C#.
// Đường dẫn đến tài liệu
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Tải tài liệu PDF
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Khởi tạo PdfConvertor
Aspose.Pdf.Facades.PdfConverter pdfConverter = new Aspose.Pdf.Facades.PdfConverter(pdfDoc);

// Đặt tối ưu hóa mã vạch
pdfConverter.RenderingOptions.BarcodeOptimization = true;

// Đặt độ phân giải trang
// 300 dpi là độ phân giải tiêu chuẩn
pdfConverter.Resolution = new Aspose.Pdf.Devices.Resolution(300);

// Đặt tất cả các trang để hiển thị thành hình ảnh
pdfConverter.StartPage = 1; //starts from page 1
pdfConverter.EndPage = pdfConverter.Document.Pages.Count;

// Hiển thị các trang đã chọn vào hình ảnh
pdfConverter.DoConvert();
while (pdfConverter.HasNextImage())
{
    // Hiển thị trang hiện tại thành hình ảnh luồng bộ nhớ
    MemoryStream ms = new MemoryStream();
    pdfConverter.GetNextImage(ms, ImageFormat.Png);
    ms.Position = 0;

    // Nhận dạng mã vạch từ hình ảnh được hiển thị của trang
    BarCodeReader reader = new BarCodeReader(ms);
    
    // Hiển thị kết quả
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

Đọc mã vạch từ PDF bằng PngDevice trong C#

Đây là một phương pháp khác tương tự như phương pháp trước. Sự khác biệt duy nhất là trong phương pháp này, chúng tôi sẽ chuyển đổi các trang của tài liệu PDF thành hình ảnh bằng cách sử dụng lớp PngDevice của API. Nó cho phép chuyển đổi các trang của tài liệu PDF thành hình ảnh PNG.

Chúng tôi có thể đọc mã vạch từ các trang PDF được chuyển đổi dưới dạng hình ảnh PNG bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
  2. Tiếp theo, tạo một thể hiện của lớp PngDevice.
  3. Sau đó, lặp qua tất cả các trang và gọi phương thức Process() để hiển thị vào luồng.
  4. Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
  5. Sau đó, gọi phương thức ReadBarCodes() để lấy đối tượng BarCodeResult.
  6. Cuối cùng, hiển thị thông tin mã vạch.

Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh PNG và đọc mã vạch bằng C#.

// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh với PngDevice và đọc mã vạch bằng C#.
// Đường dẫn đến tài liệu
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Tải tài liệu PDF
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Tạo thiết bị PNG với độ phân giải chuẩn 300 dpi
Aspose.Pdf.Devices.PngDevice pngDevice = new Aspose.Pdf.Devices.PngDevice(new Aspose.Pdf.Devices.Resolution(300));

// Tiếp tục tất cả các trang PDF bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Hiển thị trang PDF sang luồng
    MemoryStream ms = new MemoryStream();
    pngDevice.Process(pdfDoc.Pages[i], ms);
    ms.Position = 0;

    // Nhận dạng mã vạch từ hình ảnh được hiển thị của trang
    BarCodeReader reader = new BarCodeReader(ms);

    // Hiển thị kết quả
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

Trích xuất và đọc mã vạch từ PDF bằng C#

Chúng tôi cũng có thể nhận dạng hình ảnh mã vạch được nhúng trên các trang PDF bằng cách sử dụng lớp PdfExtractor. Nó cho phép trích xuất hình ảnh từ PDF, và sau đó chúng ta sẽ đọc thông tin mã vạch từ hình ảnh được trích xuất.

Chúng tôi có thể đọc mã vạch từ các hình ảnh được trích xuất bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tạo một thể hiện của lớp PdfExtractor.
  2. Tiếp theo, liên kết tài liệu PDF đầu vào bằng phương thức BindPdf().
  3. Sau đó, đặt phạm vi trang để trích xuất hình ảnh.
  4. Tiếp theo, gọi phương thức ExtractImage() để trích xuất hình ảnh.
  5. Sau đó, lưu hình ảnh để phát trực tiếp trong một vòng lặp.
  6. Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
  7. Sau đó, gọi phương thức ReadBarCodes() để lấy đối tượng BarCodeResult.
  8. Cuối cùng, hiển thị thông tin mã vạch.

Ví dụ mã sau đây cho thấy cách trích xuất và đọc hình ảnh mã vạch từ tài liệu PDF bằng C#.

// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh bằng PdfExtractor và đọc mã vạch bằng C#.
// Đường dẫn đến tài liệu
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Ràng buộc tài liệu PDF
Aspose.Pdf.Facades.PdfExtractor pdfExtractor = new Aspose.Pdf.Facades.PdfExtractor();
pdfExtractor.BindPdf(file);

// Đặt phạm vi trang để trích xuất hình ảnh
pdfExtractor.StartPage = 1;
pdfExtractor.EndPage = 3;

// Trích xuất hình ảnh
pdfExtractor.ExtractImage();

// Lưu hình ảnh để phát trực tiếp trong một vòng lặp
while (pdfExtractor.HasNextImage())
{
  // Lưu hình ảnh vào luồng
  MemoryStream imageStream = new MemoryStream();
  pdfExtractor.GetNextImage(imageStream);
  imageStream.Position = 0;

  // Nhận dạng mã vạch từ luồng hình ảnh ở trên
  BarCodeReader reader = new BarCodeReader(imageStream);
  foreach (BarCodeResult result in reader.ReadBarCodes())
  {
      Console.WriteLine("Codetext found: " + result.CodeText);
      Console.WriteLine("Symbology: " + result.CodeType);
      Console.WriteLine("-------------------------------");
  }
}

Tìm và đọc hình ảnh mã vạch từ PDF bằng C#

Chúng tôi cũng có thể tìm và trích xuất hình ảnh mã vạch từ các tài liệu PDF bằng cách sử dụng lớp ImagePlacementAbsorber. Nó đại diện cho một đối tượng hấp thụ của các đối tượng vị trí hình ảnh. Nó thực hiện tìm kiếm cách sử dụng hình ảnh và cung cấp quyền truy cập vào kết quả tìm kiếm thông qua bộ sưu tập ImagePlacements. Phương pháp này giúp nhận ra mã vạch với độ phân giải gốc. Nó có thể không nhận dạng chính xác các định dạng vectơ.

Chúng tôi có thể tìm và đọc mã vạch từ các tài liệu PDF bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
  2. Tiếp theo, tạo một thể hiện của lớp ImagePlacementAbsorber.
  3. Sau đó, gọi phương thức Visit() cho mỗi trang trong một vòng lặp.
  4. Tiếp theo, lặp qua tất cả các hình ảnh được tìm thấy trong bộ sưu tập ImagePlacements.
  5. Sau đó, lưu hình ảnh vào luồng bộ nhớ.
  6. Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
  7. Sau đó, gọi phương thức ReadBarCodes() để lấy đối tượng BarCodeResult.
  8. Cuối cùng, hiển thị thông tin mã vạch.

Ví dụ mã sau đây cho thấy cách tìm và đọc hình ảnh mã vạch từ PDF bằng C#.

// Ví dụ mã này trình bày cách đọc mã vạch từ tài liệu PDF bằng ImagePlacementAbsorber.
// Đường dẫn đến tài liệu
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// Tải tài liệu PDF
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// Khởi tạo ImagePlacementAbsorber
Aspose.Pdf.ImagePlacementAbsorber imagePlacementAbsorber = new Aspose.Pdf.ImagePlacementAbsorber();

// Xử lý tất cả các trang PDF trong tài liệu bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // Truy cập trang tạo trình trích xuất hình ảnh
    imagePlacementAbsorber.Visit(pdfDoc.Pages[i]);

    // Trích xuất tất cả hình ảnh từ trang PDF
    foreach (Aspose.Pdf.ImagePlacement imagePlacement in imagePlacementAbsorber.ImagePlacements)
    {
        // Chuyển đổi hình ảnh từ trang PDF sang luồng
        MemoryStream ms = new MemoryStream();
        imagePlacement.Save(ms, ImageFormat.Png);
        ms.Position = 0;

        // Nhận dạng mã vạch từ hình ảnh trích xuất của trang
        BarCodeReader reader = new BarCodeReader(ms);

        // Hiển thị kết quả
        foreach (BarCodeResult result in reader.ReadBarCodes())
        {
            Console.WriteLine("Codetext found: " + result.CodeText);
            Console.WriteLine("Symbology: " + result.CodeType);
            Console.WriteLine("-------------------------------");
        }
    }
}

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử các thư viện mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, chúng ta đã học cách đọc mã vạch từ tài liệu PDF trong C#. Chúng tôi cũng đã thấy nhiều cách tiếp cận và phương pháp khác nhau để trích xuất hình ảnh từ tài liệu PDF và giải mã mã vạch nhúng theo chương trình. Bên cạnh đó, bạn có thể tìm hiểu thêm về các API bằng cách sử dụng tài liệu cho Aspose.BarCodetài liệu cho Aspose.PDF. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn của chúng tôi.

Xem thêm