Oracle EBS中打印二维码

Oracle EBS暂时还只支持一维码,所以如需要二维码的打印和扫描,需要自行开发。PL/SQL还没有成熟的二维码生成类库,但Java已有很多二维码生成和解码的第三方类库(比如,QRCode,ZXing...),这里以比较简单的QRCode为例演示怎么输出和解码二维码。一个QRCode的简单例子:

涉及到的主要类库:

  • 编码 lib:Qrcode_swetake.jar  (官网介绍 -- http://www.swetake.com/qr/index-e.html)              
  • 解码 lib:qrcode.jar                 (官网介绍 -- http://sourceforge.jp/projects/qrcode/)

二维码图片的生成:



[java]  view plain  copy
 print ?
  1. import java.awt.Color;  
  2. import java.awt.Graphics2D;  
  3. import java.awt.image.BufferedImage;  
  4. import java.io.File;  
  5.   
  6. import javax.imageio.ImageIO;  
  7.   
  8. import com.swetake.util.Qrcode;  
  9.   
  10. /** 
  11.  * 二维码生成器 
  12.  */  
  13. public class PTIANQRCodeEncoder {  
  14.   
  15.     /** 
  16.      * 生成二维码(QRCode)图片 
  17.      *  
  18.      * @param content 
  19.      * @param imgPath 
  20.      */  
  21.     public void encoderQRCode(String content, String imgPath) {  
  22.         try {  
  23.   
  24.             Qrcode qrcodeHandler = new Qrcode();  
  25.             qrcodeHandler.setQrcodeErrorCorrect('M');  
  26.             qrcodeHandler.setQrcodeEncodeMode('B');  
  27.             qrcodeHandler.setQrcodeVersion(7);  
  28.   
  29.             System.out.println(content);  
  30.             byte[] contentBytes = content.getBytes("gb2312");  
  31.   
  32.             BufferedImage bufImg = new BufferedImage(140140,  
  33.                     BufferedImage.TYPE_INT_RGB);  
  34.   
  35.             Graphics2D gs = bufImg.createGraphics();  
  36.   
  37.             gs.setBackground(Color.WHITE);  
  38.             gs.clearRect(00140140);  
  39.   
  40.             // 设定图像颜色 > BLACK  
  41.             gs.setColor(Color.BLACK);  
  42.   
  43.             // 设置偏移量 不设置可能导致解析出错  
  44.             int pixoff = 2;  
  45.             // 输出内容 > 二维码  
  46.             if (contentBytes.length > 0 && contentBytes.length < 120) {  
  47.                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);  
  48.                 for (int i = 0; i < codeOut.length; i++) {  
  49.                     for (int j = 0; j < codeOut.length; j++) {  
  50.                         if (codeOut[j][i]) {  
  51.                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 33);  
  52.                         }  
  53.                     }  
  54.                 }  
  55.             } else {  
  56.                 System.err.println("QRCode content bytes length = "  
  57.                         + contentBytes.length + " not in [ 0,120 ]. ");  
  58.             }  
  59.   
  60.             gs.dispose();  
  61.             bufImg.flush();  
  62.   
  63.             File imgFile = new File(imgPath);  
  64.   
  65.             // 生成二维码QRCode图片  
  66.             ImageIO.write(bufImg, "png", imgFile);  
  67.   
  68.         } catch (Exception e) {  
  69.             e.printStackTrace();  
  70.         }  
  71.   
  72.     }  
  73.   
  74.     /** 
  75.      * @param args 
  76.      *            the command line arguments 
  77.      */  
  78.     public static void main(String[] args) {  
  79.         String imgPath = "D:/PTIAN_QRCode.png";  
  80.   
  81.         String content = "PTIAN Oracle EBS Repository,你好,世界";  
  82.   
  83.         PTIANQRCodeEncoder handler = new PTIANQRCodeEncoder();  
  84.         handler.encoderQRCode(content, imgPath);  
  85.   
  86.         System.out.println("encoder QRcode success");  
  87.     }  
  88.   
  89. }  


生成的图片:


解析二维码:


[java]  view plain  copy
 print ?
  1. import java.awt.image.BufferedImage;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4.   
  5. import javax.imageio.ImageIO;  
  6.   
  7. import jp.sourceforge.qrcode.QRCodeDecoder;  
  8. import jp.sourceforge.qrcode.data.QRCodeImage;  
  9. import jp.sourceforge.qrcode.exception.DecodingFailedException;  
  10.   
  11.   
  12. public class PTIANQRCodeDecoderHandler {  
  13.   
  14.     /** 
  15.      * 解码二维码 
  16.      * @param imgPath 
  17.      * @return String 
  18.      */  
  19.     public String decoderQRCode(String imgPath) {  
  20.   
  21.         // QRCode 二维码图片的文件  
  22.         File imageFile = new File(imgPath);  
  23.   
  24.         BufferedImage bufImg = null;  
  25.         String decodedData = null;  
  26.         try {  
  27.             bufImg = ImageIO.read(imageFile);  
  28.   
  29.             QRCodeDecoder decoder = new QRCodeDecoder();  
  30.             decodedData = new String(decoder.decode(new J2SEImage(bufImg)));  
  31.   
  32.             // try {  
  33.             // System.out.println(new String(decodedData.getBytes("gb2312"),  
  34.             // "gb2312"));  
  35.             // } catch (Exception e) {  
  36.             // // TODO: handle exception  
  37.             // }  
  38.         } catch (IOException e) {  
  39.             System.out.println("Error: " + e.getMessage());  
  40.             e.printStackTrace();  
  41.         } catch (DecodingFailedException dfe) {  
  42.             System.out.println("Error: " + dfe.getMessage());  
  43.             dfe.printStackTrace();  
  44.         }  
  45.         return decodedData;  
  46.     }  
  47.   
  48.     /** 
  49.      * @param args the command line arguments 
  50.      */  
  51.     public static void main(String[] args) {  
  52.         PTIANQRCodeDecoderHandler handler = new PTIANQRCodeDecoderHandler();  
  53.         String imgPath = "d:/PTIAN_QRCode.png";  
  54.         String decoderContent = handler.decoderQRCode(imgPath);  
  55.         System.out.println("解析结果如下:");  
  56.         System.out.println(decoderContent);  
  57.         System.out.println("========decoder success!!!");  
  58.     }  
  59.   
  60.     class J2SEImage implements QRCodeImage {  
  61.         BufferedImage bufImg;  
  62.   
  63.         public J2SEImage(BufferedImage bufImg) {  
  64.             this.bufImg = bufImg;  
  65.         }  
  66.   
  67.         public int getWidth() {  
  68.             return bufImg.getWidth();  
  69.         }  
  70.   
  71.         public int getHeight() {  
  72.             return bufImg.getHeight();  
  73.         }  
  74.   
  75.         public int getPixel(int x, int y) {  
  76.             return bufImg.getRGB(x, y);  
  77.         }  
  78.   
  79.     }  
  80. }  
Output:


解析结果如下:
PTIAN Oracle EBS Repository,你好,世界
========decoder success!!!


Oracle EBS中如何使用QRCode来打印二维码,ITPUB上已经有人通过JSP来调用QRCode做到了,最终可以在XML报表中打印,详见帖子:http://www.itpub.net/thread-1755791-1-1.html


未完...

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22816976/viewspace-2126043/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22816976/viewspace-2126043/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值