Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 很少有条形码被扫描,但很少没有使用Zxing_Java_Barcode_Zxing_Bufferedimage_Pdfbox - Fatal编程技术网

Java 很少有条形码被扫描,但很少没有使用Zxing

Java 很少有条形码被扫描,但很少没有使用Zxing,java,barcode,zxing,bufferedimage,pdfbox,Java,Barcode,Zxing,Bufferedimage,Pdfbox,我使用zxing扫描条形码并将其拆分为pdf格式。 但大多数条形码都经过扫描,很少没有。虽然所有的条形码都是正确可见的,我可以用android应用程序扫描它们。 我的代码是 Boolean flag = Boolean.FALSE; PDDocument pdfDoc = null; Result prevResult = null; try{ pdfDoc = PDDocument.load(new File(pathToReadPdf));

我使用zxing扫描条形码并将其拆分为pdf格式。 但大多数条形码都经过扫描,很少没有。虽然所有的条形码都是正确可见的,我可以用android应用程序扫描它们。 我的代码是

    Boolean flag = Boolean.FALSE;
    PDDocument pdfDoc = null;
    Result prevResult = null;
    try{
        pdfDoc = PDDocument.load(new File(pathToReadPdf));
        log.debug("Total pdf pages : "+pdfDoc.getNumberOfPages());

        Reader reader = new MultiFormatReader();
        List<PDPage> pages = pdfDoc.getDocumentCatalog().getAllPages();
        for(PDPage page : pages) {
            PDResources resources = page.getResources();
            // Identify images from pdf
            Map images = resources.getImages();
            if( images != null ){
                Iterator imageIter = images.keySet().iterator();
                while( imageIter.hasNext()){
                    String key = (String)imageIter.next();
                    PDXObjectImage image = (PDXObjectImage)images.get( key );
                    if (image.getRGBImage()!=null){
                    Hashtable<DecodeHintType, Object> decodeHints = new Hashtable<DecodeHintType, Object>(3);
                    Vector<BarcodeFormat> barcodeFormats = new Vector<BarcodeFormat>();
                    barcodeFormats.add(BarcodeFormat.CODE_128);
                    decodeHints.put(DecodeHintType.POSSIBLE_FORMATS, barcodeFormats);
                    decodeHints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
                    decodeHints.put(DecodeHintType.PURE_BARCODE, true);
                    //decodeHints.put(DecodeHintType.CHARACTER_SET, "ISO-8859-1");
                    LuminanceSource source = new BufferedImageLuminanceSource(image.getRGBImage(), 0, 0, image.getWidth(), image.getHeight());
                    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
                    Result result = null;

                    try{
                        result = reader.decode(bitmap, decodeHints);
                        splitPdf(page, result, loanApplicationId);
                        prevResult= result;
                        flag = Boolean.TRUE;
                    }catch(NotFoundException nfe){
                        if(prevResult!=null){
                            mergePDF(page, prevResult, loanApplicationId);
                        }
                        continue;
                    }
                    log.debug("Barcode text is " + result.getText());
                    }
                }
            }
        }
    }catch(Exception e){
        e.printStackTrace();
        log.error("Error while splitting PDF : " + e.getMessage(), e);
    }
    finally {
        try{
            if(pdfDoc != null){
                pdfDoc.close();
            }
        }catch (IOException ioe){
            ioe.printStackTrace();
            log.error("Error while closing PDF : " + ioe.getMessage(), ioe);
        }
    }
    return flag;` 
我正在使用以下依赖项:

 <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>fontbox</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>2.2</version>
    </dependency>

com.google.zxing
核心
2.3.0
org.apache.pdfbox
方盒
1.8.0
org.apache.pdfbox
pdfbox
1.8.0
com.google.zxing
基础
2.2
我的java版本是6,因此不支持zxing版本3


请提出解决方案。

正如您所说,有些条形码正在扫描,有些则没有。请检查该格式是否为Zxing列表支持的格式

  • 二维码
  • 数据矩阵
  • 爱国者联盟
  • UPC_A
  • EAN_8
  • EAN_13
  • UPC\U EAN\U扩展
  • 代码128
  • 代码39

  • 您可以在这里给出代码和测试

    查看了OP提供的示例文件后,我发现zxing可以扫描的条形码和它不能扫描的条形码之间没有真正的区别。它们似乎都以300 dpi的速度扫描并以相同的方式嵌入

    但是,放大图像可以看到,就条形码识别而言,扫描质量相当差:

    扫描的条形码轮廓没有锐利的切割,并且有一些锯齿图案。这使得条在不同的扫描线上看起来具有不同的宽度

    我想你很幸运能识别这些代码


    我建议更改扫描属性,可能是黑白而不是灰度,可能是不同的分辨率…

    我首先创建条形码,并将条形码保存为CODE_128格式。然后我将这些条形码固定在pdf中,然后扫描该pdf。在26个pdf中,我可以读取15个。请共享一个提取失败的pdf示例。这样我们就可以告诉你你的案子出了什么问题。不过,一般来说,条形码不需要使用位图嵌入。相反,您可以使用条形码字体。在这种情况下,条形码的编码方式与普通书写方式相同。我们的图片可能以矢量图形的形式绘制。我在这个链接中使用我的代码共享了部分pdf。第一个条形码是可扫描的,但其他的不能。感谢您的出色回复。是的,我正在以300 dpi的速度创建它。我已经粘贴了有关创建的逻辑。您能建议我如何创建吗it?请解释您的文档的生命周期。是否先创建条形码,然后打印,然后扫描?还是先打印,然后扫描,然后应用条形码?首先我们从Ui(我们的应用程序)创建条形码还有打印功能。我们从那里打印条形码,并将条形码固定在不同的文档上,然后扫描这些文档。根据条形码,我们有映射,并执行某些操作。在这种情况下,我认为您应该检查扫描这些文档的步骤的详细信息;我假设最初使用的条形码看起来不错,只有在扫描时才会出现问题。
     <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>2.2</version>
        </dependency>