1. 程式人生 > >Oracle EBS JSP實現QRCode二維條碼

Oracle EBS JSP實現QRCode二維條碼

需求背景

由於客戶或公司內部要求,在籤標貼紙上列印二維條碼。另外,自己架建Tomcat Web服務是PC機,通過JSP也是可以實現列印二維條碼,由於PC機不穩定,每隔一段時間PC機會宕機,給我們帶比較大的困擾。

業務需求

為了解XML報表或者Oracle Report Builder列印批量列印二維條碼,並且JSP必須是部署在Oracle EBS應用服務層中。

前提條件

Ø Java基礎知識

Ø JSP基礎知識

Ø Linux 常用命令如VI

Ø 二維條碼QR Code包,如下:

Ø Oracle EBS服務命令

JSP QR Code開發

實現原理

利用JSPJava檔案流實現動態生成二維條碼圖片,該圖片無需儲存。

JSP程式程式碼

如下程式碼檔案:

<%@ page
  language="java"
  import="java.util.*"
  import = "java.awt.*"
  import = "java.awt.Graphics2D"
  import = "java.awt.image.BufferedImage"
  import = "javax.imageio.*"
  import = "com.swetake.util.Qrcode"
%>
<%
Qrcode qrcode=new Qrcode();
//獲得條碼字串引數
String barCode=request.getParameter("BARCODE")==null?"No String,Please check!":request.getParameter("BARCODE");
barCode=new String(barCode.getBytes("iso-8859-1"),"utf-8"); //解決中文亂碼問題
qrcode.setQrcodeErrorCorrect('S');//糾錯級別(L 7%、M 15%、Q 25%、H 30%)和版本有關  
qrcode.setQrcodeEncodeMode('B'); //N代表數字,A代表a-Z,B代表其它字元 。若條碼字串包含中文,則必須為B
qrcode.setQrcodeVersion(3); //設定Qrcode包的版本  
//
int size=8;
//設定下偏移量,如果不加偏移量,有時會導致出錯。  
int pixoff = 2;  
String barString = barCode;
byte[] d =barString.getBytes("UTF-8");
BufferedImage bi = new BufferedImage(size*29+3, size*29+3, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, size*29+3, size*29+3);
g.setColor(Color.BLACK);
if (d.length>0 && d.length <43){
  boolean[][] b = qrcode.calQrcode(d);
  for (int i=0;i<b.length;i++){
    for (int j=0;j<b.length;j++){
     if (b[j][i]) {
       g.fillRect(j*size+pixoff,i*size+pixoff,size,size);
     }
    }
  }
}
g.dispose();
bi.flush();
out.clear();
ServletOutputStream responseOutputStream=response.getOutputStream();
ImageIO.write(bi,"png",responseOutputStream);//生成圖片檔案流
responseOutputStream.flush();
responseOutputStream.close();
bi=null;
g=null;
qrcode=null;
d=null;
barString=null;	
%>

程式部署

Qrcode包部署

1. Qrcode.jar檔案上傳到$JAVA_TOP/gobao目錄,注意:Oracle EBS應用層使用者上傳。

2. 修改$IAS_ORACLE_HOME/Apache/Jserv/etc/目錄jserv.properties配置檔案。在末尾新增:wrapper.classpath=<QRCode.jar全路徑>注意:每次執行AutoConfig以後,必須要重新配置


JSP部署

1. gbqrcode.jsp檔案上傳至$OA_HTML/gobao目錄下,注意:Oracle EBS應用層使用者上傳

2. Oracle EBS版本比較低或者未啟用自動編譯,則需要手工編譯

JSP檔案。操作命令如:perl $JTF_TOP/admin/scripts/ojspCompile.pl --compile -s gbqrcode.jsp


同時,對應$COMMON_TOP/_pages/_oa__html/_gobao/目錄下也會生成一個類檔案_gbqrcode.class,若對應的檔案沒有生成,則說明jsp檔案也沒有編譯成功!

異常問題處理

JSP執行錯誤

瀏覽器地址上輸入: http://gbdev.gobao.com:8000/OA_HTML/gobao/gbqrcode.jsp?BARCODE=1234。系統提示如下:

Request URI:/OA_HTML/gobao/gbqrcode.jsp

Exception:

java.lang.InternalError: Can't connect to X11 window server using 'gbdev:0.0' as the value of the DISPLAY variable.

同樣XML報表也會用於gbdev:0.0為什麼不會報錯呢?起初我意為是用root使用者上傳的Qrcode.jargbqrcode.jsp檔案,應用層使用者調不到Qrcode.jar中的類,修改這些檔案的所屬使用者和使用者組,還是報如上錯誤。然後,到伺服器上手工執行如下命令:

1. Root使用者下執行命令+xhost

2. 切換到應用層使用者執行: export DISPLAY=gbdev:0.0

3. 重啟Oracle EBS應用層所有服務

執行仍然提示如上錯誤。

最後,修改$APPL_TOP/admin目錄下GBDEV_gbdev.xml的環境配置檔案(注意:記得先備份該檔案喲,有問題還有回頭路可以走),如下:

執行AutoConfig使用環境配置檔案生效,再一次修改$IAS_ORACLE_HOME/Apache/Jserv/etc/目錄jserv.properties配置檔案。在末尾新增:wrapper.classpath=<QRCode.jar全路徑>。參考:Qrcode.jar包部署

中文引數值問題

開發XML報表時,給該JSP程式傳中文引數時,需要對引數值進行轉換字元編碼,主要方法如下:

1. Oracle資料庫標準包:utl_url.escape可以對字串進行URLEncode

begin
  dbms_output.put_line(utl_url.escape('Oracle EBS QRCode二維條轉碼',true,'GB2312'));
  dbms_output.put_line(utl_url.escape('Oracle EBS QRCode二維條轉碼',false,'GB2312'));
  dbms_output.put_line(utl_url.escape('Oracle EBS QRCode二維條轉碼',true,'UTF8'));
  dbms_output.put_line(utl_url.escape('Oracle EBS QRCode二維條轉碼',false,'UTF8'));
end;

1. Oracle資料庫標準包:utl_url.unescape可以對字串進行URLDecode

begin
 dbms_output.put_line(utl_url.unescape('Oracle%20EBS%20QRCode%E4%BA%8C%E7%BB%B4%E6%9D%A1%E8%BD%AC%E7%A0%81','UTF8'));
end;

相關推薦

Oracle EBS JSP實現QRCode條碼

需求背景由於客戶或公司內部要求,在籤標貼紙上列印二維條碼。另外,自己架建Tomcat Web服務是PC機,通過JSP也是可以實現列印二維條碼,由於PC機不穩定,每隔一段時間PC機會宕機,給我們帶比較大的困擾。業務需求為了解XML報表或者Oracle Report Builde

QRCode條碼開發

    最近在用VC6.0做QRCode二維條碼的開發,由於初學VC,中間自然走了不少的彎路,也遇到了很多的困難,所以在此我會帖出自己寫的程式,望各位高手能不吝賜教!     當然,在做的過程中也收集了好多關於QRCode編碼的資料,如果需要的話,請發郵件至:[email&#

QRCode條碼開發(程式碼)_2011.05.24

10:35:32 //函式功能:數字模式下將輸入的資料轉換成資訊碼 //引數說明: //strInput        -- 原始輸入資料 //strVersionNum-- 當前版本號 //strErrLevel-- 當前糾錯等級 //返回值:strDataCode-

QRCode條碼開發(計算格式資訊)_2011.05.25

//函式功能:根據不同的糾錯等級,計算15位的格式資訊:BCH(15,5)//引數說明://chErrLevel                     -- 糾錯等級//返回值:strFormatInformation   -- 資料碼字CString CQRCodeDlg

QRCode條碼開發(計算版本資訊)_2011.06.01

//函式功能:根據不同的版本,計算18位的版本資訊:BCH(18,6) //引數說明: //strVersionNum -- 版本號(只有版本7-40才有版本資訊,其它版本沒有版本資訊) //返回值:strVersionInformation

QRCode條碼開發_2011.05.23

QRCode生成器介面: 下拉列表框: 版本號:IDC_VERSIONNUM(1-40) 糾錯等級:IDC_ERRLEVEL(H、Q、H、L) 模組數:IDC_MODULNUM(1~5) 編碼模式:IDC_ENCODINGMODE(暫未加入)(3種) 按鈕: 生成:I

JavaScript實現線上Qrcode碼生成工具-toolfk程式設計師線上工具網

     本文要推薦的[ToolFk]是一款程式設計師經常使用的線上免費測試工具箱,ToolFk 特色是專注於程式設計師日常的開發工具,不用安裝任何軟體,只要把內容貼上按一個執行按鈕,就能獲取到想要的內容結果。ToolFk還支援  BarCode

Java實現碼生成和解析(QRCode方式)

1.背景        在Java實現的二維碼生成和解析(zxing方式)中採用的是谷歌裡的二維碼生成方式,在這裡將另外的一種二維碼生成方式記錄下來,以方便自己和其他需要的人。 2.二維碼 第一步:匯入相應的jar包。在http://downloa

React Native WebView元件實現的BarCode(條形碼)、(QRCode)

react-native-barCode 採用React Native WebView元件實現的BarCode(條形碼)、QRCode(二維碼),其中QRCode的程式碼是參考 qrcode,修復了qrcode圖片會出現滾動條問題。https://github.com/

C#列印條碼QRCode

step 1: 呼叫DotNetBarcode.dll,製作二維條碼QRCode. step 2:使用panel控制元件,顯示內容。 step 3:使用bitmap和image,把二維條碼儲存成圖片.bmp 具體請參考附件(VS2008):

java實現簡單迷宮(2)

blog 成員 new 構建 push port ava amp use 這次是改良版本。 將地圖封裝,老鼠封裝。是對Java基礎的一個練習吧。 這次實現也遇到了一些問題。主要是棧。封裝的mouse類中有成員變量i,j代表了老鼠的坐標。將mouse類對象m入棧的時候,總是入

java實現生成

ron isp -a 數組 技術分享 rar cep 代碼實現 lac java實現生成二維碼 二維碼vs條形碼 最大的區別就是:

PHP生成QRCode

qrcode<?php //引入 phpqrcode 類庫 //phpqrcode下載地址:https://github.com/t0k4rt/phpqrcode require_once "phpqrcode/qrlib.php"; //第一種(缺省下在網頁中生成二維碼) //調用QRCo

方案優化:網站實現掃描碼關註微信公眾號,自動登陸網站並獲取其信息

用戶 class his onerror 就會 openid display 要點 rac 上一篇 《網站實現掃描二維碼關註微信公眾號,自動登陸網站並獲取其信息》 中已經實現用戶掃碼登陸網站並獲取其信息 但是上一篇方案中存在一個問題,也就是文章末尾指出的可以優化的地方(可

Android用RecyclerView實現Excel效果組件

eight main AS UC alt 包括 data github AD excelPanel 二維RecyclerView。不僅可以加載歷史數據,而且可以加載未來的數據。 包括在您的項目中 excelPanel 二維RecyclerView。不僅可以加載

ORACLE+Myeclipse+jsp實現簡單登錄功能

public man drivers asus style 編寫 ole 建立 rom Oracle數據庫表的建立: create table Log(    un char(20), pd char(25) ) ta

某月天數問題(1.if語句實現 2.陣列實現)(c++)

【題目描述】 從鍵盤輸入某年某月,程式設計輸出該年的該月擁有的天數 【題目難點】 閏年定義: (1)能被4整除,卻不能被100整除 (2)能被400整除 程式碼1:(用if簡單語句來完成) #include <iostream> using na

jquery-qrcode 碼生成

jquery-qrcode-0.14.0.js下載 程式碼: <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <scrip

Android 實現生成

注入開源庫  implementation 'com.google.zxing:core:3.3.0'   import android.graphics.Bitmap; import android.graphics.Canvas; import co

Android Zxing實現掃描碼條形碼功能仿微信整合閃光燈生成

最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊