java – 带条码Code128的JasperReports(Barcode4J):PNG与PDF不
发布时间:2020-12-15 02:17:51 所属栏目:Java 来源:网络整理
导读:我正在使用Jasper模板和Barcode4J的条形码元素“Code128”打印带有以下编号“1000049722ABCD2F”的标签作为条形码.以PDF格式打印,条形码完美且可扫描. 打印相同的条形码作为PNG文件,条形码不可扫描,它明显不同于PDF条形码: 相同的条形码:PDF(图像的上半部
我正在使用Jasper模板和Barcode4J的条形码元素“Code128”打印带有以下编号“1000049722ABCD2F”的标签作为条形码.以PDF格式打印,条形码完美且可扫描.
打印相同的条形码作为PNG文件,条形码不可扫描,它明显不同于PDF条形码: 相同的条形码:PDF(图像的上半部分)和PNG(图像的下半部分): 以下代码用于生成PDF条形码: byte[] data = JasperExportManager.exportReportToPdf(jasperPrint); 要生成PNG,它并不那么简单: ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteOutputStream); ImageWriter imageWriter = ImageIO.getImageWritersBySuffix("png").next(); imageWriter.setOutput(imageOutputStream); float zoom = getZoomFactor(jasperPrint); BufferedImage image = new BufferedImage( (int)(jasperPrint.getPageWidth() * zoom ) + 1,(int)(jasperPrint.getPageHeight() * zoom) + 1,BufferedImage.TYPE_INT_RGB); JRGraphics2DExporterNoAntialias exporter = new JRGraphics2DExporterNoAntialias(); exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint); exporter.setParameter(JRGraphics2DExporterParameter.GRAPHICS_2D,image.getGraphics()); exporter.setParameter(JRExporterParameter.PAGE_INDEX,Integer.valueOf(page)); exporter.setParameter(JRGraphics2DExporterParameter.ZOOM_RATIO,new Float(zoom)); exporter.exportReport(); IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image),null); // DPI = 200,inch = 25.4 double dotsPerMilli = 200 / 25.4; IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize"); horiz.setAttribute("value",Double.toString(dotsPerMilli)); IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize"); vert.setAttribute("value",Double.toString(dotsPerMilli)); IIOMetadataNode dim = new IIOMetadataNode("Dimension"); dim.appendChild(horiz); dim.appendChild(vert); IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0"); root.appendChild(dim); imageMetaData.mergeTree("javax_imageio_1.0",root); imageWriter.write(null,new IIOImage(image,null,imageMetaData),null); imageOutputStream.close(); imageWriter.dispose(); byte[] data = byteOutputStream.toByteArray(); 我在用: 我试图改变一些设置(BufferedImage.TYPE值,条形码宽度,烧烤条形码128B等),但PDF和PNG条形码之间总是存在差异. 目标:PNG条形码应与PDF条形码完全相同. 任何人都可以帮我这个吗?我将不胜感激! 解决方法
为什么不尝试使用org.krysalis.barcode4j.tools.MimeTypes(来自barcode4j-2.1.jar本身)的MimeTypes.MIME_PNG,而不是使用ImageWriter.
我不会重复我的回答,但你可以参考我的代码.这是我的其他stackoverflow的链接: Barcode4j as png image 我从来没有遇到过使用该程序的问题(无法扫描条形码). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |