gpt4 book ai didi

java - 很少有人扫描条形码,但很少有人不使用 Zxing

转载 作者:行者123 更新时间:2023-12-01 12:29:57 25 4
gpt4 key购买 nike

我正在使用 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;`

我认为位图转换可能存在错误。我在 result = reader.decode(bitmap,decodeHints);

的 com.google.zxing.NotFoundException 处收到错误

条形码创建逻辑:

 public byte[] createBarCode128(String fileName) {

byte[] imageInByte = new byte[1024];
try {
Code128Bean bean = new Code128Bean();
final int dpi = 300;

//Configure the barcode generator
bean.setModuleWidth(UnitConv.in2mm(6.0f / dpi));
bean.doQuietZone(false);

BitmapCanvasProvider canvas = new BitmapCanvasProvider(null, "image/x-png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);

//Generate the barcode
bean.generateBarcode(canvas, fileName);

//Signal end of generation
canvas.finish();

BufferedImage originalImage = canvas.getBufferedImage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
imageInByte = baos.toByteArray();
log.debug(imageInByte.toString());
baos.close();
log.debug(" Bar Code is generated successfully ");
}
catch (IOException ex) {
ex.printStackTrace();
log.error(ex.getMessage(),ex);
}
return imageInByte;
}

我正在使用以下依赖项:

 <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>

我的java版本是6,所以不支持zxing版本3。

请提出任何解决方案。

最佳答案

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

但是放大图像可以看到,对于条形码识别来说,扫描质量相当差:

enter image description here

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

我认为您很幸运能够识别出这些代码。

我建议更改扫描属性,也许是黑白而不是灰度,也许是不同的分辨率......

关于java - 很少有人扫描条形码,但很少有人不使用 Zxing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26010067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com