2016-12-21 44 views
4

JasperテンプレートとBarcode4Jのバーコード要素 "Code128"を使用して、次の番号 "1000049722ABCD2F"のラベルをバーコードとして印刷しています。 PDFで印刷されたバーコードは完璧でスキャン可能です。 PNGファイルと同じバーコードを印刷、バーコードがスキャン可能ではなく、それは明らかにPDF-バーコードは異なる:JasperReports with Barcode Code128(Barcode4J):PNGはPDFと異なります

同じバーコード:PDF(画像の上部)およびPNG(画像の下部) :

byte[] data = JasperExportManager.exportReportToPdf(jasperPrint); 

Same barcode: PDF (upper) and PNG (lower)

次のコードは、PDF-バーコードを生成するために使用されます私が使用しています

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(); 

:は、PNGを生成するには、それは簡単ではありません barcode4j-2.1/JasperReportsの-5.0.0/200 DPIは私がしようとした

私のラベルプリンタに必要なサイズですかなりの設定(BufferedImage.TYPE値、バーコードの幅、バーベキューバーコード128Bなど)を変更しますが、PDFとPNGバーコードの間には常に違いがあります。

ゴール: PNGバーコードは、PDFバーコードとまったく同じである必要があります。

誰でも私にこれを手伝ってもらえますか?私は大いに感謝します!

答えて

0

代わりのImageWriterを使用しての、なぜあなたは(barcode4j-2.1.jar自体から)org.krysalis.barcode4j.tools.MimeTypesからMimeTypes.MIME_PNGを使用しないでください。

私は自分の答えを繰り返すことはしませんが、自分のコードを参照することができます。

Barcode4j as png image

と私はプログラムを使って(バーコードをスキャンすることができない)この問題に直面したことがありません:ここに私の他のstackoverflowへのリンクがあります。

関連する問題