我使用Jascode模板和Barcode4J中的條形碼元素「Code128」打印了一個標籤,條形碼編號爲「1000049722ABCD2F」,條形碼號爲「1000049722ABCD2F」。 打印爲PDF格式,條形碼非常完美並且可以掃描。 印刷相同條形碼爲PNG文件,所述條形碼是不可掃描和它顯然從PDF條形碼不同:帶有條形碼Code128(Barcode4J)的JasperReports: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();
我使用: barcode4j-2.1/JasperReports的-5.0.0/200 DPI是我的標籤打印機
我試圖所需的大小改變一些設置(BufferedImage.TYPE值,條形碼寬度,Barbecue-barcode 128B等),但PDF和PNG條形碼之間總是有所不同。
目標: PNG條形碼應該與PDF條形碼完全相同。
任何人都可以幫助我嗎?我將不勝感激!