如何使用Java中的zxing从手持式条形码扫描仪读取条形码

时间:2013-10-06 11:47:26

标签: java barcode zxing barcode-scanner barcode-printing

我正在使用名为' zxing '的开源Java库(Zebra Crossing)在java中。我的代码在这里

package eg.com.taman.bc.tut;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.google.zxing.qrcode.decoder.Mode;
import eg.com.tm.barcode.processor.BarcodeEngine;
import eg.com.tm.barcode.processor.config.DecodeConfig;
import eg.com.tm.barcode.processor.config.EncodeConfig;
import java.io.File;
import java.util.Map;


public class BarcodeApplication {

   public static void main(String[] args) {

      // File will be used for creating the QRCode barcode type.
      File qrCodeFile = new File("C:\\barcode\\QRCode.png");


      // Building the encoding configurations - using builder battern
      EncodeConfig encodeConfig =
              new EncodeConfig.Builder().createDirectories(Boolean.TRUE)
              .isQRCodeFormat(Boolean.TRUE)
              .withErrorCorrLevel(ErrorCorrectionLevel.M).build();

      // Generating the QRCode barcode

      String content = "This is the contents of the barcode. 7654321 (QRCode)";

      BarcodeEngine.encode(qrCodeFile, content, BarcodeFormat.QR_CODE, 200, 200, encodeConfig);

      encodeConfig =
              new EncodeConfig.Builder().createDirectories(Boolean.TRUE).
              withCharactersMode(Mode.ALPHANUMERIC).build();




      System.out.println("------------------- Begins Writing barcodes -------------------\n");
      System.out.println("Is QRCode Created? " + (qrCodeFile.exists() ? "Yes " : "Not not ") + "Created");
      System.out.println("\n------------------- Finished Writing barcodes -------------------");

      // Now we are going to decode (read) back contents of created barcodes

      // Building the decoding configurations - using builder battern
      DecodeConfig decodeConfig =
              new DecodeConfig.Builder()
              .withHumanBarcodes(Boolean.TRUE)
              .build();


      Map<BarcodeEngine.DecodeResults, Object> results = BarcodeEngine.decode(qrCodeFile, decodeConfig);

      String decodeText = (String) results.get(BarcodeEngine.DecodeResults.RESULT);
      String barcodeType = ((BarcodeFormat) results.get(BarcodeEngine.DecodeResults.BARCODE_FORMATE)).name();

      System.out.println("\n------------------- Begins reading barcodes -------------------\n");
      System.out.println("The decoded contents is: \"" + decodeText + "\", Barcode type is: " + barcodeType);



      System.out.println("The decoded contents is: \"" + decodeText + "\", Barcode type is: " + barcodeType);

      System.out.println("\n------------------- Finished reading barcodes -------------------");
      System.out.println("decode Text : "+decodeText);
      System.out.println("barcode Type : "+barcodeType);
   }
}

代码将Qr条形码读取为图像文件。现在我想使用手持式条形码扫描仪来读取条形码。任何帮助?????

我在java桌面应用程序中工作而不是Android。

3 个答案:

答案 0 :(得分:1)

听起来您正在寻找支持HID模式的扫描仪。

您的选项是Bluetooth scanner with HID mode或USB扫描仪(大部分都像键盘一样)。

一旦你选择了一个,HID模式在所有扫描仪上基本相同,你可以在Stackoverflow上找到许多关于捕获扫描仪输入并将其与普通键盘上的用户输入分开的问题。

答案 1 :(得分:0)

我的理解是zxing用于生成和处理QR代码 images ...就像在代码中一样。它不是用于驱动条形码扫描仪的API。如果你想要其中一个,你需要说一下你想要使用的设备。

答案 2 :(得分:0)

我已经研究了一下,在大多数情况下它工作正常。 我的代码是:

    InputStream barCodeInputStream = new FileInputStream("test.png");
    BufferedImage barCodeBufferedImage = ImageIO.read(barCodeInputStream);
    LuminanceSource source = new BufferedImageLuminanceSource(barCodeBufferedImage);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    Reader reader = new MultiFormatReader();
    Result result = reader.decode(bitmap);
    System.out.println("Barcode text is " + result.getText());

这将在QR和条形码上正常工作:)