java - 相同的表格,相同的条形码(128),Zxing仅读取一个条形码(来自2个文档)

标签 java pdf barcode zxing

我正在编写一个简单的程序,从图像中提取条形码。

我尝试过zxing。效果很好。直到我发现了一些奇怪的东西。

我工作的组织发布表格。相同的表格(我从

的两个地方获得

org)具有相同的条形码,我在同一台机器中扫描它们(也相同的结果)到

pdf 格式。

zxing 在第一张图像上做得非常好,并返回了条形码。没有运气

第二张图片..尝试提取条形码时出现 com.google.zxing.NotFoundException

来自第二张图片。更多形式的组织都会出现此问题)。

这是Zxing无法识别的图像。

http://s000.tinyupload.com/?file_id=12080994969485224486

这是他认得的。

http://s000.tinyupload.com/?file_id=30365671784453283753

这是我的代码:

private String handlePdf(File pdfFile) throws Exception { 


    StringBuilder sb = new StringBuilder();  


    PDDocument pdDoc = PDDocument.load(pdfFile);  


    int size = pdDoc.getDocumentCatalog().getAllPages().size();  


    for (int i = 0; i < size; i++) {    


        PDPage page = (PDPage) pdDoc.getDocumentCatalog().getAllPages().get(i); 


        PDResources resources = page.getResources();  


        Map images = resources.getImages();  


           if (images != null) {  


            Iterator<String> imageIter = images.keySet().iterator();  


                   while (imageIter.hasNext()) {  


                  String key = (String) imageIter.next();  


                  PDXObjectImage image = (PDXObjectImage) images.get(key);  


                  String barcode = null ;  


                  barcode = extraceBarcodeFromImage(image.getRGBImage());  


                if(barcode!= null){  


                   sb.append(barcode);  


                   sb.append(",");  


                }  


               }  


         }  

    }  


     return sb.capacity() > 0 ? sb.toString().substring(0, sb.length()-1) : 
                                  "no barcode was found";


}    



private String extraceBarcodeFromImage(BufferedImage image)  


            throws NotFoundException {  


    String finalResult;  


    if (image == null)  


        throw new IllegalArgumentException("Could not decode image.");  


    Map<DecodeHintType, Object> HINTS;  


    HINTS = new EnumMap(DecodeHintType.class);  


    HINTS.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);  


    HINTS.put(DecodeHintType.POSSIBLE_FORMATS,  


            EnumSet.allOf(BarcodeFormat.class));  


    Map<DecodeHintType, Object> HINTS_PURE;  


    HINTS_PURE = new EnumMap<DecodeHintType, Object>(HINTS);  


    HINTS_PURE.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);  


    LuminanceSource source = new BufferedImageLuminanceSource(image);  


    BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(  


            source));  


    MultiFormatReader barcodeReader = new MultiFormatReader();   


    Result result;  


    result = barcodeReader.decode(bitmap, HINTS_PURE);   


    finalResult = String.valueOf(result.getText());  


    return finalResult;  


}  

感谢您在这种情况下提供的任何帮助。

最佳答案

问题只是图像质量相当低。

在一定的放大倍率下查看工作条形码:

magnified working bar code

质量不是很好,但也够好了。

现在将其与不起作用的条形码进行比较:

magnified not working bar code

它有些旋转,并且(可能是由于旋转)条形非常有流苏。流苏太多,zxing 无法识别条形码。

我用调试器完成了这个过程,甚至让它查看图像的每一行(不进行操作,它只查看 256 个均匀间隔的行),它没有找到任何可以成功读取为条形的行代码。

因此,您要么必须提高扫描质量(更高的分辨率,确保文档不旋转,...),要么必须寻找一个条形码阅读器库,它不仅仅查看图像列或单独行,而是尝试识别更大的结构。我对这些东西还不够深入,无法推荐任何东西。

关于java - 相同的表格,相同的条形码(128),Zxing仅读取一个条形码(来自2个文档),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696118/

相关文章:

java - JPA 继承映射多个实现

java - Spring Data Elasticsearch - 找不到能够从类型 [java.lang.Long] 转换为类型 [java.time.Instant] 的转换器

c# - 从签名的 PDF 文件中删除字节顺序标记?

android - flutter : How to get the format of the scanned barcode using flutter?

java - 无法在 RStudio 中加载 rJava

java - 在 Java 中实现多路复用(并发)

java - iText7 setValue 方法不起作用

python - ReportLab 段落和文本格式

java - 条形码生成服务器端还是客户端?

javascript - 条形码阅读器在我的表单中调用提交功能