aspose - 使用 Aspose 读取条形码
问题描述
我有一个包含条形码页面的 PDF 文件。条形码最初是使用 DecodeType.Code128 创建的,
我使用 ASPOSE.PDF 和 Aspose.Barcode 来查找条形码和页码。
var barcodePageNumbers = new List<int>();
var currentPageNumber = 0;
using (PdfConverter converter = new PdfConverter())
{
converter.BindPdf(sourcefilePath);
converter.RenderingOptions.BarcodeOptimization = true;
converter.DoConvert();
while (converter.HasNextImage())
{
currentPageNumber++;
using (var ms = new MemoryStream())
{
converter.GetNextImage(ms);
ms.Seek(0L, SeekOrigin.Begin);
BarCodeReader reader = new BarCodeReader(ms, DecodeType.Code128);
while (reader.Read())
{
var text = reader.GetCodeText();
if (text == _barcodeTextToMatch)
{
barcodePageNumbers.Add(currentPageNumber);
}
}
}
}
}
我们时不时会收到质量差的条形码 pdf,就像随附的那样。(注意附件的 PDF 有 3 页。我使用工具创建了第 1 页和第 3 页。带有条形码的第 2 页来自原始 PDF。)
只要条码质量好,上面的代码就可以工作。但如果质量不好,则无法识别其条形码。
这里可以使用哪些其他优化技术?
解决方案
首先,您使用的是什么版本的 Aspose.PDF 和 Aspose.Barcode?因为我在最后一个 Aspose.Barcode(develop version) 上尝试了 pdf 文件,所以它被很好地识别。
string lFileName = @"d:\save\rec\merged.pdf";
var currentPageNumber = 0;
var barcodePageNumbers = new List<int>();
using (Aspose.Pdf.Facades.PdfConverter converter = new Aspose.Pdf.Facades.PdfConverter())
{
converter.BindPdf(lFileName);
converter.RenderingOptions.BarcodeOptimization = true;
converter.DoConvert();
while (converter.HasNextImage())
{
currentPageNumber++;
using (var ms = new MemoryStream())
{
converter.GetNextImage(ms);
ms.Seek(0L, SeekOrigin.Begin);
BarCodeReader reader = new BarCodeReader(ms, DecodeType.Code128);
while (reader.Read())
{
var text = reader.GetCodeText();
barcodePageNumbers.Add(currentPageNumber);
}
}
}
}
MessageBox.Show(string.Join(";", barcodePageNumbers.ToArray()));
以下是从 pdf 文件中提取的图像: page_2.tiff - 完整图像 page2_cut.png - 剪切图像。两者都得到了很好的认可。
您可以在图像上看到的图像失真是盐和纸张的问题。我们在大多数情况下在识别模块中解决了这个问题,但是目前的条码位置检测模块可以将盐分和纸张失真如此之强的条码标记为非条码区域。目前我们没有对此进行优化,但我们正在开发 SVM(支持向量机)检测器,它可以更好地检测条形码区域,并且还可以选择优化这些问题的识别。SVM 条码区域检测器将在 2020 年第一季度添加到 Aspose.Barcode。
当前的解决方法:如果您知道可能的条形码区域,您可以使用 SetBarCodeImage(Bitmap value, Rectangle area) 设置条形码识别区域,这有助于当前的梯度检测器检测到如此嘈杂的区域。
推荐阅读
- jquery - jQuery .remove 不适用于动态字段 - 它只是将字段附加到末尾
- ruby - 内部服务器错误 ruby 未定义方法
- .net - 你可以在字符串的同一部分有两个命名组吗?
- laravel - Laravel 5.6 中的外部 API。通过排队作业、使用模型、控制器或其他方式将数据同步到我自己的数据库?
- android - AndroidX:Appcompat I:艺术错误 android.view.View$OnUnhandledKeyEventListener
- emacs - Emacs org-capture 行开头的模板扩展
- ios - 无法在图表上显示响应数据
- python - counting surrounding true's in numpy matrix (python)
- mysql - MySQL:从连接表中获取每个最新条目
- azure - 使用 ARM 模板创建 Azure 存储队列