我們可以生成條形碼並將其添加到 PDF 文檔,如我的 上一篇文章 中所述。在某些情況下,我們可能需要以編程方式檢測和讀取嵌入到 PDF 文檔中的條形碼。它有助於從 PDF 文檔(如發票、收據或報告)中解碼條形碼和二維碼形式的嵌入式信息。在本文中,我們將學習如何使用 C# 從 PDF 文檔讀取條形碼。
文章應涵蓋以下主題:
從 PDF 讀取條碼的 C# API
我們將按照兩步程序從 PDF 文檔中讀取條形碼。首先,我們將使用 Aspose.PDF for .NET API 加載 PDF 文檔,然後將其頁面呈現為光柵圖像。之後,我們將使用 Aspose.BarCode for .NET API 從渲染圖像中讀取條形碼。
請 下載 API 的 DLL 或使用 NuGet 安裝它。
PM> Install-Package Aspose.BarCode
PM> Install-Package Aspose.PDF
使用 C# 從 PDF 讀取條形碼
Aspose.PDF API 的 Document 類表示 PDF 文檔。 API 的 ConvertToPNGMemoryStream() 函數將 PDF 頁面呈現為 PNG 內存流。 Aspose.BarCode API 的 BarCodeReader 類使我們能夠執行 ReadBarCodes 操作來檢測條形碼。 BarCodeResult類存儲檢測到的條碼信息,如條碼類型、條碼文本、區域等參數。
我們可以按照以下步驟讀取嵌入在 PDF 文檔任何頁面上的條形碼圖像:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,遍歷所有頁面並將它們渲染到內存流。
- 然後,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 ReadBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
下面的代碼示例展示瞭如何使用 C# 從 PDF 文檔中讀取條形碼。
// 此代碼示例演示如何使用 C# 從 PDF 文檔讀取條形碼。
// 文檔的路徑
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);
// 從第 1 頁開始處理所有 PDF 頁面
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 文檔 本博文中使用的。
使用 C# 將 PDF 轉換為圖像並讀取條形碼
我們可以通過使用 PdfConverter 類將 PDF 頁面轉換為圖像來從 PDF 文檔中讀取條形碼。它允許將 PDF 文件的每一頁轉換為圖像,然後我們將從轉換後的圖像中讀取條形碼信息。
我們可以按照以下步驟從轉換後的 PDF 頁面中讀取條碼:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 PdfConverter 類的一個實例。
- 或者,設置渲染選項,例如 BarcodeOptimization。
- 然後,設置圖像分辨率。
- 接下來,指定 StartPage 和 EndPage 以將一系列頁面呈現為圖像。
- 然後,調用 DoConvert() 方法將選定的頁面呈現為圖像。
- 接下來,將圖像保存到循環流中。
- 然後,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 ReadBarCodes() 方法獲取 BarCodeResult 對象。
- 最後顯示條碼信息。
下面的代碼示例展示瞭如何使用 C# 將 PDF 頁面轉換為圖像並讀取條碼。
// 下面的代碼示例展示瞭如何使用 PDF Convertor 將 PDF 頁面轉換為圖像並使用 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("-------------------------------");
}
}
在 C# 中使用 PngDevice 從 PDF 讀取條形碼
這是另一種類似於前一種方法的方法。唯一不同的是,在此方法中,我們將使用 API 的 PngDevice 類將 PDF 文檔的頁面轉換為圖像。它允許將 PDF 文檔的頁面轉換為 PNG 圖像。
我們可以按照以下步驟將轉換後的 PDF 頁面中的條碼讀取為 PNG 圖像:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 PngDevice 類的實例。
- 然後,遍歷所有頁面並調用 Process() 方法以呈現到流中。
- 接下來,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 ReadBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
下面的代碼示例展示瞭如何使用 C# 將 PDF 頁面轉換為 PNG 圖像並讀取條碼。
// 下面的代碼示例展示瞭如何使用 PngDevice 將 PDF 頁面轉換為圖像並使用 C# 讀取條碼。
// 文檔的路徑
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);
// 使用 300 dpi 標準分辨率創建 PNG 設備
Aspose.Pdf.Devices.PngDevice pngDevice = new Aspose.Pdf.Devices.PngDevice(new Aspose.Pdf.Devices.Resolution(300));
// 從第 1 頁開始處理所有 PDF 頁面
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("-------------------------------");
}
}
使用 C# 從 PDF 中提取和讀取條形碼
我們還可以使用 PdfExtractor 類識別嵌入在 PDF 頁面上的條形碼圖像。它允許從PDF中提取圖像,然後我們將從提取的圖像中讀取條碼信息。
我們可以按照以下步驟從提取的圖像中讀取條形碼:
- 首先,創建 PdfExtractor 類的實例。
- 接下來,使用 BindPdf() 方法綁定輸入的 PDF 文檔。
- 然後,設置圖像提取的頁面範圍。
- 接下來,調用 ExtractImage() 方法來提取圖像。
- 然後,將圖像保存到循環流中。
- 接下來,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 ReadBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
下面的代碼示例展示瞭如何使用 C# 從 PDF 文檔中提取和讀取條形碼圖像。
// 下面的代碼示例展示瞭如何使用 PdfExtractor 將 PDF 頁面轉換為圖像並使用 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("-------------------------------");
}
}
使用 C# 從 PDF 中查找和讀取條碼圖像
我們還可以使用 ImagePlacementAbsorber 類從 PDF 文檔中查找和提取條形碼圖像。它表示圖像放置對象的吸收器對象。它執行圖像使用搜索,並通過 ImagePlacements 集合提供對搜索結果的訪問。此方法有助於識別具有原始分辨率的條形碼。它可能無法正確識別矢量格式。
我們可以按照以下步驟從 PDF 文檔中查找和讀取條形碼:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 ImagePlacementAbsorber 類的一個實例。
- 然後,循環調用每個頁面的 Visit() 方法。
- 接下來,遍歷在 ImagePlacements 集合中找到的所有圖像。
- 然後,將圖像保存到內存流中。
- 接下來,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 ReadBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
以下代碼示例展示瞭如何使用 C# 從 PDF 中查找和讀取條碼圖像。
// 此代碼示例演示如何使用 ImagePlacementAbsorber 從 PDF 文檔讀取條形碼。
// 文檔的路徑
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();
// 從第 1 頁開始處理文檔中的所有 PDF 頁面
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("-------------------------------");
}
}
}
獲得免費許可證
您可以 獲得免費的臨時許可證 來試用這些庫,而沒有評估限制。
結論
在本文中,我們學習瞭如何使用 C# 從 PDF 文檔中讀取條形碼。我們還看到了從 PDF 文檔中提取圖像並以編程方式解碼嵌入的條形碼的各種途徑和方法。此外,您可以使用 Aspose.BarCode 文檔 和 Aspose.PDF 文檔 了解有關 API 的更多信息。如有任何疑問,請隨時在我們的 論壇 上與我們聯繫。