我需要使用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();
我该怎么办?
答案 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());