我在PDF转换后遇到连续成功的QR解码问题。我一直在,
"线程中的异常" main" com.google.zxing.FormatException"
我的转化尝试是在: PDFBox的
public static BufferedImage convertPDFtoBufferedImageType2(String PDFPath) throws IOException{
PDDocument document = null;
try {
document = PDDocument.load(PDFPath);
PDPage firstPage = (PDPage) document.getDocumentCatalog().getAllPages().get(0);
return firstPage.convertToImage();
} catch (IOException ex) {
Logger.getLogger(PDF_Utility.class.getName()).log(Level.SEVERE, null, ex);
return null;
} finally {
if(document != null)
document.close();
}
}
第二次尝试使用ghost4j
public static BufferedImage convertPDFtoBufferedImage(String PDFPath) throws IOException, RendererException, DocumentException{
System.setProperty("jna.library.path", "C:\\Program Files\\gs\\gs9.16\\bin\\");
PDFDocument document = new PDFDocument();
document.load(new File(PDFPath));
SimpleRenderer renderer = new SimpleRenderer();
renderer.setResolution(300);
List<Image> imgs = renderer.render(document);
Image im = imgs.get(0);
BufferedImage bi = new BufferedImage
(im.getWidth(null),im.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics bg = bi.getGraphics();
bg.drawImage(im, 0, 0, null);
bg.dispose();
return bi;
}
我的QR解码器是:
public static String readQRCode(BufferedImage image, String charset, Map hintMap)
throws FileNotFoundException, IOException, NotFoundException, ChecksumException, FormatException {
Result qrCodeResult = null;
BinaryBitmap binaryBitmap = new BinaryBitmap(
new HybridBinarizer(new BufferedImageLuminanceSource(image)));
try{
qrCodeResult = new com.google.zxing.qrcode.QRCodeReader().decode(binaryBitmap,hintMap);
}catch(NotFoundException | FormatException e){ //attempt without hints
qrCodeResult = new com.google.zxing.qrcode.QRCodeReader().decode(binaryBitmap);
}
return qrCodeResult.getText();
}
我之所以称之为解码两次,是因为有时候&#34;更加努力&#34;
hintMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
实际上没有抓住QR码,但默认情况确实如此。 无论如何,这些代码片段确实可以从一堆文档中捕获我的大部分QR扫描,但有时它根本无法捕获它。我甚至试图将其作为图像写出来,然后重新阅读:
ImageIO.write((RenderedImage) im, "png", new File("/path/to/my/img.png"));
有趣的是,http://zxing.org/w/decode.jspx确实解码了输出图像,但我的代码却无法解码。 我也试过不同的字符集: CHAR_SET =&#34; UTF-8&#34 ;;和CHAR_SET =&#34; ISO-8859-1&#34 ;;
通过获取格式例外,找到了代码,但&#34;不符合条形码的格式规则。这可能是由于误检测造成的。&#34;
为凌乱的代码道歉,但这些尝试已经获得了大部分成功的扫描。 9/10率?有趣的是,有时相同文档的另一个扫描副本有效。任何帮助/建议/疯狂伏都教组合表示赞赏!谢谢!
编辑:我得到了一个样本(在打开周围的内容之后。真实的图像有内容!Zxing网站也能够捕获这个QR码(有和没有内容!)(我的程序已经忽略了其他1D)格式和内容的那些)。答案 0 :(得分:0)
@Tilman Hausherr指出PDFBox的默认渲染大小很低,所以我按照他的建议将默认值更改为300dpi。总的来说,它适用于我的情况,但肯定会降低速度。将需要调整我的算法来运行快速和慢速运行作为备份。
return firstPage.convertToImage(BufferedImage.TYPE_4BYTE_ABGR, 300);
编辑:提高捕获条形码的成功率,但没有成功捕获所有条形码。增加dpi无济于事。