إن شاء الله في هذه المشاركة سنتعرف على كيفية Generate QR Code In ADF
Application
على سبيل المثال سنأخذ (الإسم الأول ،
الإسم الثاني)
1. نعمل على إنشاء تطبيق جديدApplication ADF Fusion Web
2. إنشاء ADF Business Component from table (للجداول
أو الجدول الذي سيتم التعامل معها)
3. في
البداية نقوم على تضمين المكتبات المطلوبة للـQR وهي
qrgen-1.0
zxing-core-1.7
zxing-j2se-1.7
qrgen-1.0
zxing-core-1.7
zxing-j2se-1.7
من
خلال right click على إسم المشروع بعدها Project Properties بعدها نختار Labraries
and Classpath وبالضغط
على
ADD JAR/Labraries ويتم إضافة
كما
مبين في الصورة أدناه:
تم رفع هذه المكتبات مع التطبيق
5. عمل شاشةLogin تم التطرق لها على هذا الرابط
http://ascensionmyblog.blogspot.com/2016/08/login-skin-adf.html
الآن لتكوين وإنشاء الـ QR لمعلومات
المستخدم الذي قام بتسجيل دخول إذن نقوم بإنشاء servlet وليكن
إسمها ServletQR
ونعمل على نسخ الكود التالي:
ونعمل على نسخ الكود التالي:
import common.UserInfo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import net.glxn.qrgen.QRCode;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.glxn.qrgen.image.ImageType;
@WebServlet(name = "ServletQR", urlPatterns = { "/servletqr" })
public class ServletQR extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
UserInfo qrInfo = (UserInfo) request.getSession().getAttribute("user");
//ASIGNAR TEXTO A VARIABLE OUT DE TIPO BYTE
ByteArrayOutputStream out = QRCode.from(qrInfo.getFirstName()+"_"+qrInfo.getLastName()).to(ImageType.PNG).stream();
//ASIGNAR TIPO Y TAMAأ‘O DE CONTENIDO A RESPONSE
response.setContentType("image/png");
response.setContentLength(out.size());
//ALMACENA EN VARIABLE OUTSTREAM LA CAPACIDAD DE ALMACENAR DATOS BINARIOS
OutputStream outStream = response.getOutputStream();
//ALMACENA EN OUTPUTSTREAM EL VALOR DE OUT CONVERTIDO EN ARREGLO DE BYTES
outStream.write(out.toByteArray());
//MUESTRA EL CUERPO DE OUTSTREAM
outStream.flush();
outStream.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
processRequest(request, response);
}
}
لنأخذ لمحة تعريفية بسيطة
حول الكود
7. ما يهمني هنا هو أن أسترجع معلومات المستخدم الذي قام بتسجيل دخول من الـ session إلىservlet وهذا يتم من خلال كود السطر التالي حسب الكود أعلاه:
7. ما يهمني هنا هو أن أسترجع معلومات المستخدم الذي قام بتسجيل دخول من الـ session إلىservlet وهذا يتم من خلال كود السطر التالي حسب الكود أعلاه:
UserInfo qrInfo = (UserInfo) request.getSession().getAttribute("user");
لاحظ طريقة إسترجاع
المعلومات التي تم وضعها ب session بهيئة java class إذن
يتم إسترجاعها بمتغير من نوع java class ألا
وهو qrInfo
8. الآن أريد تكوين الـ QR من
هذه المعلومات التي إسترجعتها (وهي معلومات المستخدم) وهذا يكون بكود السطر التالي
:
ByteArrayOutputStream out =
QRCode.from(qrInfo.getFirstName()+"_"+qrInfo.getLastName()).to(ImageType.PNG).stream();
9. الآن تكونت لي صورة QR من
الأسم الأول والإسم الثاني للمستخدم ويفصل بينهما ب _ وتم وضع الصورة
المتكونة بتعريف متغير من نوع stream ويمكن
أيضاً تعريف متغير من نوع file
أما بقية الكود في الـ servlet هو فقط لقراءة
وكتابة الصورة وهو كود standard متبع عند التعامل مع قراءة وكتابة
الصور
10.
الآن نريد أن نعرض الصورة
على الصفحة، نعمل على سحب وإفلات image component ونحدد من الخصائص التابعة للـ Image خاصية الـ source لهذه الصورة سيكون هو:
الـ servlet pattern أي /servletqr
كما في الصورة المبينة في أدناه