QR-код zxing 3 - com.google.zxing.NotFoundException на отсканированной странице - PullRequest
0 голосов
/ 11 декабря 2018

Я использую java 8 и zxing 3.3: чтобы протестировать свой процесс java, я составил большой документ pdf, объединив несколько документов pdf следующим образом:

doc1.pdf + separateur.pdf + doc2.pdf + separateur.pdf + doc3.pdf.

separateur.pdf содержит только QR-код

Мой Java-процесс должен обнаружить этот QR-код, чтобы разделить большой документ.

Он отлично работает ...

Но в реальной жизни клиенты составляют свои PDF-файлы.при сканировании документов и в этом случае QR-код не обнаруживается .....

Здесь код (метод «декодирования» не распознает QR-код на отсканированной странице):

if (data instanceof ImageRenderInfo) {
    logger.debug("data instanceof ImageRenderInfo"); 
    ImageRenderInfo imageRenderInfo = (ImageRenderInfo) data;
    logger.debug("ImageRenderInfo ok "); 
    byte[] bytes = imageRenderInfo.getImage().getImageBytes();
    logger.debug("bytes ok"); 
    String pngName = coreServices.getSplitFolderTemp() +"/Page-" + currentPage[0] +  "_Image-" + index + ".png";
    logger.debug("pngName: " + pngName);
    File image = new File(pngName);
    try {
        // le QR code KLINCK est stocké dans la première image de la feuille de séparation. 
        //if (index == 1) {
        // ZXING - > Read Data from QR Code
            logger.info("index: " + index);
            Files.write(new File(pngName).toPath(), bytes);
            logger.info("write ok");
            BufferedImage bufferedImg = ImageIO.read(image);
            LuminanceSource source = new BufferedImageLuminanceSource(bufferedImg);
            logger.info("source ok");
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            logger.info("bitmap ok");
            Result result = new MultiFormatReader().decode(bitmap);
            logger.info("decode ok");
            logger.debug("result.getBarcodeFormat().toString() : " + result.getBarcodeFormat().toString());
            logger.debug("result.getText().toString():  " + result.getText().toString());
            if (result.getText().toString().equals("SEPARATEURZEENDOC") || 
                result.getBarcodeFormat().toString().equals("DATA_MATRIX")) {
                // on stocke les numéros de pages des QR Code Klinck
                pageList.add(currentPage[0]);
                logger.debug("QR code Klinck trouvé en page: " + currentPage[0]);
            }
        //}
        }
         catch (Exception e) {
            logger.error("l'image détectée n'est pas le QR Code Klinck : " + ExceptionUtils.getStackTrace(e));
         }
         if (image.delete())
                logger.debug("image supprimée");
         }

Я пытался изменить размер изображения ( com.google.zxing.NotFoundException Исключение возникает, когда выполняется основная Java-программа? )

путем обновления кода следующим образом:

BufferedImage bufferedImg = ImageIO.read(image);
logger.info(bufferedImg);
BufferedImage cropedImage = bufferedImg.getSubimage(0, 0, 228, 228);
logger.info("crop ok: " + cropedImage);
LuminanceSource source = new BufferedImageLuminanceSource(cropedImage);
logger.info("source ok");

но ничего не меняется.

Поэтому я попытался использовать DecodeHintType

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
logger.info("bitmap ok");
Map < DecodeHintType, Object > tmpHintsMap = new EnumMap < DecodeHintType, Object > (                                                           DecodeHintType.class);                                              tmpHintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
Result result = new MultiFormatReader().decode(bitmap, tmpHintsMap);

idem

Я получил объекты BufferedImage в журнале

  • тестовый документ (работы):

    BufferedImage@71b26d51: type = 5  ColorModel:      #pixelBits = 24   numComponents = 3 color space = java.awt.color.ICC_ColorSpace@a91ddb2 transparency = 1                   has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 228 height = 228   #numDataElements 3 dataOff[0] = 2
    
  • отсканированный документ (тотне работает):

    BufferedImage@6052f653: type = 12 IndexColorModel: #pixelBits = 1    numComponents = 3 color space = java.awt.color.ICC_ColorSpace@a91ddb2 transparency = 1 transIndex   = -1 has alpha = false isAlphaPre = false BytePackedRaster:      width = 2542 height = 3518 #channels 1 xOff = 0 yOff = 0
    

Как я могу это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...