2011-10-02 54 views
14

Tôi muốn đặt mã vạch vào trang của mình và có thể xem trước mã vạch. Máy phát điện mã vạch là google.zxing và công cụ báo cáo của tôi là iReport.google.zxing máy phát mã vạch trong iReport

Nhưng tôi không biết, cách định cấu hình Image ExpressionExpression Class của hình ảnh trong iReport.

+0

http://groups.google.com/group/zxing/browse_thread/thread/e8fbcde52f9efd80 –

+0

@AlexK: Tôi đã thử điều đó trước đây, nhưng không rõ ràng – deepmax

+0

Bạn ít nhất nên cho chúng tôi biết loại Mã vạch bạn đang cố gắng tạo ... –

Trả lời

7

Hai ý tưởng chính trước tiên là viết một đoạn mã Java để tạo hình ảnh có liên quan và sau đó thiết kế báo cáo để tham khảo mã này một cách thích hợp. Có lẽ cách đơn giản nhất để tạo ra các hình ảnh trong một scriptlet như thế này:

package com.jaspersoft.alliances.mdahlman; 
import com.google.zxing.BarcodeFormat; 
import com.google.zxing.WriterException; 
import com.google.zxing.common.BitMatrix; 
import com.google.zxing.qrcode.QRCodeWriter; 
import com.google.zxing.client.j2se.MatrixToImageWriter; 
import net.sf.jasperreports.engine.JRDefaultScriptlet; 
import net.sf.jasperreports.engine.JRScriptletException; 

public class QRCodeScriptlet extends JRDefaultScriptlet { 
    public void afterDetailEval() throws JRScriptletException { 
     QRCodeWriter writer = new QRCodeWriter(); 
     BitMatrix matrix = null; 
     try { 
      matrix = writer.encode(getFieldValue("barcode_text").toString(), BarcodeFormat.QR_CODE, 256, 256); 
      this.setVariableValue("BarCodeImage", MatrixToImageWriter.toBufferedImage(matrix)); 
     } catch (WriterException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Đó là đầy đủ của sự xấu xa mã hóa cứng, nhưng những ý tưởng chủ chốt đều được hiển thị. Sau đó, bạn cần phải xác định báo cáo như thế này: truy vấn

  1. mẫu: select 'some text' as barcode_text tôi bao gồm chỉ này để củng cố quan điểm rằng scriptlet tôi cứng mã tên trường barcode_text. (Điều này là xấu.)
  2. Biến: BarCodeImage loại java.awt.image.BufferedImage với phép tính System. Tên này cũng được mã hóa cứng trong tập lệnh. (Điều này cũng không kém phần xấu.)
  3. Thêm vào classpath iReport của:
    • Các biên soạn scriptlet file .jar
    • core.jar (từ ZXing)
    • javase.jar (từ ZXing)
  4. Thêm phần tử Hình ảnh vào báo cáo có Biểu thức $V{BarCodeImage}.

Kết quả là một hạnh phúc QR-code hạnh phúc trong JasperReport tạo của bạn:

Generated QR-Code

tôi nhớ lại một mẫu mà tôi đã nhìn thấy mà làm những việc nhiều sạch hơn. Nó thực sự bao gồm một plug-in đẹp để bạn có thể dễ dàng cài đặt chức năng này vào iReport với nỗ lực tối thiểu. Nếu tôi có thể theo dõi điều đó, tôi sẽ cập nhật bài đăng này. Nhưng cho đến lúc này điều này ít nhất bao gồm tất cả các điểm quan trọng.

+0

Bổ sung có hướng dẫn rất tốt trong chương 15, cách tạo tập lệnh http://www.opus-college.net/devcorner/iReport-Ultimate-Guide-3.pdf –

2

Khái niệm hình ảnh nên trả lại bất kỳ lớp con của java.awt.Image. Cách dễ nhất để đạt được điều này là sử dụng lớp trợ giúp của riêng bạn để tạo Hình ảnh. Bạn có thể tạo phương thức tĩnh tạo mã vạch từ String và gọi phương thức đó từ IReport.

Trong trường hợp của ZXing Tôi không biết các phương pháp để sử dụng, nhưng tôi có thể nói những gì tôi sử dụng như ImageExpression sử dụng thư viện Thịt nướng.

 net.sourceforge.barbecue.BarcodeImageHandler.getImage(
MyBarcodeGenerator.getFromString($F{field}) 

MyBarcodeGenerator lớp chứa các phương pháp getFromString(...) mà trả về một net.sourceforge.barbecue.Barcode trong trường hợp của tôi một net.sourceforge.barbecue.linear.code39.Code39Barcode

Các Expression Class được bỏ qua.

--Edited:

Để mã hóa một hình ảnh trong ZXing bạn nên sử dụng MatrixToImageWriter

Đoạn mã dưới đây sẽ mã hóa một QRCode vào một BufferedImage mà bạn có thể sử dụng trong lĩnh vực hình ảnh Biểu hiện:

MatrixToImageWriter.toBufferedImage(new QRCodeWriter().encode("BARCODE CONTENT", BarcodeFormat.QR_CODE,  400 /*Width*/, 400/*Height*/)); 
Các vấn đề liên quan