2

我需要使用 jasperreports 在 java 中创建条形码图像,目前我正在将图像文件保存在磁盘上,但我需要这样做而不将图像保存在磁盘上。我需要在内存中创建条形码图像,然后将其作为参数发送到 iReport。

这就是我所做的:

Map<String, Object> parameters = new HashMap<String, Object>();
String imagePath = "\\\\netw\\barCode.jpg";
parameters.put("rutaCodigoBarrasVal", imagePath);

Barcode barCode = BarcodeFactory.createPDF417("1234567890");
barCode.setDrawingText(false);
barCode.setBarHeight(33);
barCode.setBarWidth(207);

FileOutputStream fOS = new FileOutputStream(imagePath);
BarcodeImageHandler.writeJPEG(barCode, fOS);
fOS.close();

我能做些什么?

4

2 回答 2

1

您应该首先尝试将 Barcode 写入字节数组或 InputStream,查看您的库文档。JasperReports 支持将图像作为 InputStream 参数传递,并将其绘制在报告中。

InputStream imageStream = ...;
parametros.put("image", imageStream );

从 JasperReports 接收作为 java.io.InputStream 的参数,然后使用图像小部件和以下属性绘制它: 图像表达式:$P{image} 表达式类:java.io.InputStream

我希望它有所帮助。

于 2013-01-17T17:22:11.727 回答
1

最后这是我使用barcode4j库所做的:

ByteArrayOutputStream os = new ByteArrayOutputStream();
PDF417Bean barCode = new PDF417Bean();
boolean antiAlias = false;
int orientation = 0;
int dpi = 300;

BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, BufferedImage.TYPE_BYTE_BINARY, antiAlias, orientation);

BarcodeDimension dim = new BarcodeDimension(207, 42);
canvas.establishDimensions(dim);
barCode.setColumns(7);
barCode.generateBarcode(canvas, codeToConvert);
canvas.finish();

String mime = MimeTypes.MIME_JPEG;
os = new ByteArrayOutputStream();

final BitmapEncoder encoder = BitmapEncoderRegistry.getInstance(mime);
encoder.encode(canvas.getBufferedImage(), os, mime, dpi);
fis = new ByteArrayInputStream(os.toByteArray());
于 2013-10-01T13:00:01.743 回答