我需要有关从 PDF 文件中读取条形码(不是条纹)下的数字的帮助。我的想法是将页面转换为图像,然后阅读它。
这是位于 PDF 文档右上角的条形码示例。 (https://i.sstatic.net/jtJl89rF.png)
我尝试使用 ZXing 尝试读取条形码下的数字,至少从图像中读取,但我没有运气。
public static string ReadBarcodeFromImage(string filePath)
{
BarcodeReader barcodeReader = new BarcodeReader()
{
AutoRotate = true,
Options =
{
TryHarder = true,
TryInverted = true,
}
};
var bitmap = (Bitmap)Image.FromFile(filepath);
var result = barcodeReader.Decode(bitmap);
return result?.Text;
}
然后我尝试使用 PdfiumViewer 将 pdf 页面转换为图像,并阅读它,但也没有成功:
public string ReadBarcodeFromPdf(string pdfPath)
{
using (var document = PdfiumViewer.PdfDocument.Load(pdfPath))
{
// Render the first page
using (var image = document.Render(0, 300, 300, true))
{
//ZXing
BarcodeReader barcodeReader = new BarcodeReader()
{
AutoRotate = true,
Options =
{
TryHarder = true,
TryInverted = true,
}
};
var result = barcodeReader.Decode((Bitmap)image);
return result?.Text;
}
}
}
欢迎来到SO。
您可以使用开源 OCR 库 Tesseract 读取数字。
https://tesseract-ocr.github.io/tessdoc/Installation.html
根据所使用的语言模型和参数,您可能会得到略有不同的结果,但如果您只期望数字作为结果,您可以进一步解析/处理。 下面的命令行结果使用您的图像作为输入。 使用 ENG 和 DEU Fast 语言模型。快速、正常、最佳模型位于 https://github.com/tesseract-ocr
C:\Program Files\Tesseract-OCR>tesseract "d:\temp\jtJl89rF.png" stdout --tessdata-dir "C:\Program Files\Tesseract-OCR\tessdata" --psm 3 -l eng
(0123456789
C:\Program Files\Tesseract-OCR>tesseract "d:\temp\jtJl89rF.png" stdout --tessdata-dir "C:\Program Files\Tesseract-OCR\tessdata" --psm 3 -l deu
0123456789
提醒。 我并不建议这是最好的方法。 OCR 比读取条形码不太可靠,因为条形码有内部校验和。
提示#1:
您提到您首先要将 PDF 转换为图像。如果您的 PDF 是矢量文件(不是扫描文件),我相当确定提取文本并解析文本结果将提供更准确、更快的结果。如果您愿意分享具有代表性的 PDF,请随时
提示#2:
如果您可以控制条形码本身,请优先选择 QR 码。 ZXing 库可以比您的示例中的 1 个方向条形码更快、更可靠地检测和读取 QR 码。