首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JasperReports带条形码Code128 (Barcode4J):PNG与PDF不同

JasperReports带条形码Code128 (Barcode4J):PNG与PDF不同
EN

Stack Overflow用户
提问于 2016-12-21 13:55:49
回答 1查看 2K关注 0票数 4

我正在打印一个标签,编号为"1000049722ABCD2F“作为条形码,使用Jasper模板和Barcode4J中的条形码元素”Barcode4J“。打印成PDF格式,条形码是完美和可扫描的。打印相同的条形码作为PNG-文件,条形码是不可扫描的,它显然不同于PDF-条形码

相同的条形码: PDF (图像的上部)和PNG (图像的下半部分):

下面的代码用于生成PDF-条形码

代码语言:javascript
复制
    byte[] data = JasperExportManager.exportReportToPdf(jasperPrint);

来生成PNG,它不是那么简单的

代码语言:javascript
复制
    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 4j-2.1/ jasperreports-5.0.0 / 200 DPI是我的标签打印机所需的大小。

我试图更改相当多的设置(BufferedImage.TYPE-值,条形码的宽度,Barbecue-条形码128 B等),但是PDF和PNG-条形码之间总是有区别的。

目标:PNG-条形码应该与PDF-条形码完全相同.

有人能帮我吗?我会非常感激的!

EN

回答 1

Stack Overflow用户

发布于 2017-07-19 08:23:50

与其使用MimeTypes.MIME_PNG,不如尝试使用org.krysalis.barcode4j.tools.MimeTypes中的org.krysalis.barcode4j.tools.MimeTypes( barcode4j-2.1.jar本身)。

我不重复我的回答,但你可以参考我的密码。下面是指向我的其他堆栈溢出的链接:

Barcode4j as png image

我从来没有面对过这个问题(无法扫描条形码)使用该程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41264468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档