使用jasperreports在java中创建条形码图像,而不将图像保存在磁盘上

时间:2013-01-17 15:59:29

标签: java jasper-reports ireport

我需要使用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();

我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

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

我希望它有所帮助。

答案 1 :(得分:0)

最后这是我使用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());