我们可以生成条形码并将其添加到 PDF 文档中,如我的 previous post 中所述。在某些情况下,我们可能需要以编程方式检测和读取嵌入到 PDF 文档中的条形码。它有助于解码 PDF 文档(如发票、收据或报告)中的条形码和二维码形式的嵌入信息。在本文中,我们将学习如何使用 C# 从 PDF 文档中读取条形码。
文章应涵盖以下主题:
- 从 PDF 读取条形码的 C# API
- 从 PDF 读取条形码
- 将 PDF 转换为图像并读取条形码
- 使用 PngDevice 从 PDF 读取条形码
- 从 PDF 中提取和读取条形码
- 从 PDF 中查找和读取条形码图像
C# API 从 PDF 读取条形码
我们将按照两步程序从 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 Converter 将 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 的更多信息。如有任何歧义,请随时在我们的 论坛 上与我们联系。