代码之家  ›  专栏  ›  技术社区  ›  LP13

使用Aspose读取条形码

  •  0
  • LP13  · 技术社区  · 5 年前

    我有一个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页。第二页的条形码来自原始的PDF。)

    Sample File

    这里还可以使用什么其他优化技术?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Alifesoft    5 年前

    首先,您使用什么版本的Aspose.PDF和Aspose.Barcode?因为我在上一个Aspose.Barcode(开发版本)上尝试过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()));
    

    page_2.tiff -完整图像 page2_cut.png -剪切图像。 两者都得到了很好的认可。



    当前的解决方法:如果你知道可能的条形码区域,你可以用SetBarCodeImage(位图值,矩形区域)设置条形码识别区域,这有助于当前的梯度检测器检测到如此嘈杂的区域。

    推荐文章