2013-01-17 38 views
2

我需要在java中使用jasperreports創建一個條形碼圖像,目前我正在做這個保存圖像文件在磁盤上,但我需要做到這一點,沒有將圖像保存在磁盤上。我需要在內存中創建條形碼圖像,然後將其作爲參數發送給iReport。使用jasperreports在java中創建一個條形碼圖像,而不保存在磁盤上的圖像

這是我做了什麼:

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

我想你可以用它代替FileOutputStream中 – rbernabe

回答

1

您應該首先嚐試將條碼寫入字節數組或InputStream,查看您的庫文檔。 JasperReports支持將圖像作爲InputStream參數傳遞,並在報表中繪製該圖像。

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

從JasperReports的,收到參數作爲java.io.InputStream中,然後用圖像小部件繪製它和下列性質: 圖片表達式:$ P {圖像} 表達式類:java.io.InputStream中

我希望它有幫助。

+0

優秀ByteArrayOutputStream!謝謝你的幫助。 –

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()); 
相關問題