识别 PDF 和 TIFF 文档中的条形码





2.00/5 (1投票)
多页商业文档和报告有时会使用条形码来帮助路由和索引。使用 DotImage .NET PDF 阅读器、.NET TIFF 编解码器和条形码识别 for .NET 插件,可以轻松读取条形码并使用它们来自动化工作流程或在存储库中查找这些文档。
多页商业文档和报告有时会使用条形码来帮助自动化路由和索引。使用 DotImage .NET PDF 阅读器、.NET TIFF 编解码器和 条形码识别 for .NET 插件,可以轻松读取这些条形码中编码的数据,并使用它们来自动化工作流程或在存储库中查找这些文档。
从 PDF 读取页面
通常,PDF 中的页面要么是图像页面(可能来自扫描仪),要么由各种元素(文本、绘图、图像等)组成。如果是图像页面,我们希望以存储的分辨率从 PDF 中提取该页面。如果是组合页面,我们需要将页面栅格化为单个图像,并确保以高分辨率执行此操作,以保持条形码的质量。
这是一个 C# 函数,可以以最佳分辨率从 PDF 中检索页面以进行条形码读取
private AtalaImage GetPdfPage(Stream stream, int pageNum)
{
AtalaImage img = null;
// check to see if this page is an image
using (Document pdfDoc = new Document(stream))
{
Page pdfPage = pdfDoc.Pages[pageNum];
if (pdfPage.SingleImageOnly)
{
// if it's an image, extract it from the PDF at its
// stored resolution
img = pdfPage.ExtractImages()[0].Image;
}
}
// if the page is not an image, rasterize it at high enough
// resolution to read the barcodes
if (img == null)
{
PdfDecoder pdfReader = new PdfDecoder();
pdfReader.Resolution = 300;
stream.Position = 0;
img = pdfReader.Read(stream, pageNum, null);
}
return img;
}
这是 VB.NET 中的函数
Private Function GetPdfPage(ByVal stream As Stream,
ByVal pageNum As Integer) As AtalaImage
Dim img As AtalaImage = Nothing
' check to see if this page is an image
Using pdfDoc As New Document(stream)
Dim pdfPage As Page = pdfDoc.Pages(pageNum)
If pdfPage.SingleImageOnly Then
' if it's an image, extract it from the PDF at its
' stored resolution
img = pdfPage.ExtractImages()(0).Image
End If
End Using
' if the page is not an image, rasterize it at high enough
' resolution to read the barcodes
If img Is Nothing Then
Dim pdfReader As New PdfDecoder()
pdfReader.Resolution = 300
stream.Position = 0
img = pdfReader.Read(stream, pageNum, Nothing)
End If
Return img
End Function
从 TIFF 读取页面
从 TIFF 读取页面更容易,因为它已经以特定分辨率栅格化。在 DotImage 中,我们只需要构造一个 AtalaImage 对象,传递带有编码图像的流和页码。顺便说一句,这适用于任何栅格图像类型,而不仅仅是 TIFF。此 C# 函数检测文件是否为 PDF,如果是,则调用之前的函数。如果不是 PDF,它只需读取页面并返回它。
private AtalaImage GetDocumentPage(string file, int pageNum)
{
AtalaImage img = null;
PdfDecoder pdfReader = new PdfDecoder();
using (Stream stream = File.OpenRead(file))
{
if (pdfReader.IsValidFormat(stream))
{
stream.Position = 0;
img = GetPdfPage(stream, pageNum);
}
else
{
stream.Position = 0;
img = new AtalaImage(stream, pageNum, null);
}
}
return img;
}
这是 VB.NET 中的函数
Private Function GetDocumentPage(ByVal fileName As String,
ByVal pageNum As Integer) As AtalaImage
Dim img As AtalaImage = Nothing
Dim pdfReader As New PdfDecoder()
Using stream As Stream = File.OpenRead(fileName)
If pdfReader.IsValidFormat(stream) Then
stream.Position = 0
img = GetPdfPage(stream, pageNum)
Else
stream.Position = 0
img = New AtalaImage(stream, pageNum, Nothing)
End If
End Using
Return img
End Function
从图像中读取条形码
一旦你有了 AtalaImage,DotImage 就可以轻松地从中读取任何条形码。这是 C# 代码
private BarCode[] ReadBarcodesFromPage(AtalaImage img)
{
BarCodeReader reader = new BarCodeReader(img);
ReadOpts opts = new ReadOpts();
opts.Symbology = Symbologies.All;
return reader.ReadBars(opts);
}
这是 VB.NET 中的代码
Private Function ReadBarcodesFromPage(ByVal img As AtalaImage)
As BarCode()
Dim reader As New BarCodeReader(img)
Dim opts As New ReadOpts()
opts.Symbology = Symbologies.All
Return reader.ReadBars(opts)
End Function
ReadOpts 类允许你以多种方式控制条形码读取。你可以指定要查找的条形码的类型(符号体系)、它应该在页面上显示的方向、你期望存在的条形码数量。任何这些选项都可以通过让阅读器减少工作来加速识别。此代码只是尝试在任何方向上查找任何条形码。
处理条形码
一旦你有了 BarCode 对象数组,你只需要循环遍历它们并从中获取识别的文本。这是 C# 中的代码
// Get the page and read the barcodes
AtalaImage img = GetDocumentPage(fileName, pageNum);
BarCode[] bars = ReadBarcodesFromPage(img);
// show the barcodes in the list
foreach (BarCode bar in bars)
{
Console.WriteLine(bar.DataString);
}
这是 VB.NET 中的代码
' Get the page and read the barcodes
Dim img As AtalaImage = GetDocumentPage(fileName, pageNum)
Dim bars As BarCode() = ReadBarcodesFromPage(img)
' show the barcodes in the list
For Each bar As BarCode In bars
Console.WriteLine(bar.DataString)
Next
DotImage
DotImage .NET 图像 SDK 包含读取文档图像格式以及识别其中的条形码所需的一切。下载 30 天评估版。
Archives(归档)
- 简化 TIFF 编辑
- 使用自定义序列化器构建 Visual Studio 调试器可视化工具
- ThinDoc:零占用空间,全屏 PDF 查看器
- 从图像生成网站配色方案
- 将扫描文档图像转换为可搜索 PDF(使用 OCR)
- 案例研究:使用 AJAX 将 WinForms 控件引入 Web
- “嘿!那是我的车吗?如何使用 DotImage 锐化 QuickBird 卫星图像”
- 使用 DotImage 将文档扫描到云端
- 使用 DotImage 进行光学标记识别
- 使用 Atalasoft 的 DotTwain SDK 轻松实现 ActiveX Twain 扫描
- TIFF 和 PDF:有什么区别以及如何在这两者之间转换
- 识别 PDF 和 TIFF 文档中的条形码