السلام عليكم عندى سؤال يا ريت تردوا عليه من فضلكم
أنا عملت التقرير بواسطة IReport ولكن علشان استدعيه من كلاس الجافا لازم أضع المشروع بتاعه فى class path
يا ريت حد يوضح لى كيف أضع كلاسات وباكيجات الآيريبورت فى الكلاسباث للجافا يا ريت
السلام عليكم عندى سؤال يا ريت تردوا عليه من فضلكم
أنا عملت التقرير بواسطة IReport ولكن علشان استدعيه من كلاس الجافا لازم أضع المشروع بتاعه فى class path
يا ريت حد يوضح لى كيف أضع كلاسات وباكيجات الآيريبورت فى الكلاسباث للجافا يا ريت
ممكن تبحث في المنتدي, فهو موضوع أساسي
يمكنك الاستفادة من الموضوع التالى وخاصة المشاركة الاتية :
/index.php?showtopic=207595&st=40&p=1111367entry1111367
طبق مافيها من خطوات ثم انظر النتيجة
ونحن فى مساعدتك
تحياتى
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
مشكور أخى على الرد
ولكن أنا جربت هذا ولكن حدث Exception وهو net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
lمع ان الكود ليس به خطأ من ناحية اللغة (syntax)
ارجو الرد
هذا الكود
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
import javax.swing.*;
public class ReportTest {
public static void main(String[] args)
{
String database =
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c://DB.mdb;";
try{
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
java.sql.Connection connection=java.sql.DriverManager.getConnection(database);
// PATH TO YOUR JASPER FILE
JasperPrint jp = JasperFillManager.fillReport("D:\\report2.jasper",null, connection);
JasperViewer viewer = new JasperViewer(jp, false);
viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
viewer.setModalExclusionType(JDialog.ModalExclusionType.TOOLKIT_EXCLUDE);
viewer.setTitle("Report 1");
viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
viewer.setLocationRelativeTo(null);
viewer.setVisible(true);
viewer.toFront();
}
catch(Exception ex){
System.out.println(ex.toString());
}
}
}تم تعديل هذه المشاركة بواسطة elwaly في 10 أغسطس 2010 في 18:37
elwaly كتب:مشكور أخى على الرد
ولكن أنا جربت هذا ولكن حدث Exception وهو net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
lمع ان الكود ليس به خطأ من ناحية اللغة (syntax)
ارجو الرد
هذا الكود
import net.sf.jasperreports.engine.*; import net.sf.jasperreports.view.*; import javax.swing.*; public class ReportTest { public static void main(String[] args) { String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c://DB.mdb;"; try{ Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); java.sql.Connection connection=java.sql.DriverManager.getConnection(database); // PATH TO YOUR JASPER FILE JasperPrint jp = JasperFillManager.fillReport("D:\\report2.jasper",null, connection); JasperViewer viewer = new JasperViewer(jp, false); viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); viewer.setModalExclusionType(JDialog.ModalExclusionType.TOOLKIT_EXCLUDE); viewer.setTitle("Report 1"); viewer.setExtendedState(JFrame.MAXIMIZED_BOTH); viewer.setLocationRelativeTo(null); viewer.setVisible(true); viewer.toFront(); } catch(Exception ex){ System.out.println(ex.toString()); } } }
اخى العزيز الخطأ واضح جدا فى الكود
انظر الى هذا السطر
String database =
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c://DB.mdb;";تجد نفسك تستخدم علامتين // على اساس انها تساوى علامتين \\
وهذا خطأ طبعا لان ال back slash تعتبر escape character فى الجافا لهذا نضع اثنتين متتابعتين لاستخدام واحدة فقط
اما ال forward slash لا تعتبر escape character لذلك عند استخدامها يجب وضع واحدة فقط وليس اثنين
الحل هو ان تستخدم اما علامة / واحدة
String database =
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/DB.mdb;";وانا افضل هذه الطريقة او استخدام File.separator ولا تشغل بالك بنظام التشغيل لدى العميل او المستخدم
واما ان تستخدم علامتين \\
String database =
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\DB.mdb;";ولا ارشحها لك
عدل الكود واخبرنا بالنتيجة
ونحن فى المساعدة وكل عام والمسلمين والمنتدى بخير
تحياتى
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
السلام عليكم
والله اخى انا اشكرك جدا على اهتمامك ولكن الخطأ كان ليس من الناحية اللغوية ولكن عدلت الكود وحدث نفس الخطا وهو (net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0)
وأنا لا أعرف اين الخطأ من فضلكم دلونى وكل عام وانتم بخير واعضاء المنتدى جميعا وهناك شئ آخر هذا الخطأ لا يحدث الا عند الضغط على زر اظهار التقرير فهو ليس خطأ لغوى
اذا كنت عدلت الكود ومازالت المشكلة قائمة
فقم ببناء تقرير اخر وتأكد انك قمت بتحميل كل المكتبات الموجودة فى موضوع محمد فتحى عن التقارير
لان هذا الخطأ يظهر وقت التشغيل واحتمال كبير ان يكون ناتج عن نقص مكتبات التشغيل
تحياتى
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
السلام عليكم
انا قمت ببناء عدة تقارير اخرى لتفادى الخطأ فى التقرير نفسه وكتبت كود آخر لعلى أعرف أين الخطأ
والكود هو
try{
JasperDesign jasperDesign = JRXmlLoader.load(new java.io.File("D:/report1.jrxml"));
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
java.sql.Connection connection=java.sql.DriverManager.getConnection(database);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, connection);
JasperViewer.viewReport(jasperPrint);
}catch(Exception ex) {
String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
javax.swing.JOptionPane.showMessageDialog(null,connectMsg);
}ولكن حدث خطأ وهو
(log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
log4j:WARN Please initialize the log4j system properly.
Could not create the report Byte data not found at location : coffee.jpg Byte data not found at location : coffee.jpg)
مع العلم أن الصورة موجودة فى مكانها وأنا استدعى التقرير من مكانه
اخى العزيز
من هذا الكود
JasperDesign jasperDesign = JRXmlLoader.load(new java.io.File("D:/report1.jrxml"));
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);يظهر انك تعمل ترجمة Compile للتقرير من خلال الكود فلماذا؟
قم بانشاء التقرير باستخدام IReport واعمل له Compile سيخرج لك ملف .jasper
واستخدمه مباشرة داخل الكود كما فى المشاركة الاولى فى هذا الموضوع
JasperPrint jp = JasperFillManager.fillReport("D:\\report2.jasper",null, connection);
JasperViewer viewer = new JasperViewer(jp, false);
viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
viewer.setModalExclusionType(JDialog.ModalExclusionType.TOOLKIT_EXCLUDE);
viewer.setTitle("Report 1");
viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
viewer.setLocationRelativeTo(null);
viewer.setVisible(true);
viewer.toFront();اظن الخطأ يظهر لديك لانك تقوم باعادة الترجمة من داخل الكود ولا ارى لها فائدة
اعلمنا بالنتيجة
تحياتى
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
elwaly كتب:net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
على فكرة يا اخى اكتشفت ان هذا الخطأ يأتى نتيجة عدم وجود مكتبة تسمى spring.jar فى مسار البرنامج classpath
وهى موجودة فى مجلد البرنامج IReport فى المسار التالى
IReport/IReport/modules/ext/spring.jar
قم بنسخها واضافتها الى ال classpath وجرب برنامجك مرة اخرى
سلام
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
السلام عليكم
أخى والله اخى انا شاكر اهتمامك جدا
أخى انا شغلت هذا الكود
try{
JasperDesign jasperDesign = JRXmlLoader.load("D:/report2.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
java.sql.Connection connection=java.sql.DriverManager.getConnection(database);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, connection);
JasperViewer viewer = new JasperViewer(jasperPrint, false);
viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
viewer.setModalExclusionType(JDialog.ModalExclusionType.TOOLKIT_EXCLUDE);
viewer.setTitle("تقرير الأصناف");
viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
viewer.setLocationRelativeTo(null);
viewer.setIconImage(new javax.swing.ImageIcon(getClass().getResource("/res/logo1.png")).getImage());
viewer.setVisible(true);
}catch(Exception ex) {
String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
javax.swing.JOptionPane.showMessageDialog(null,connectMsg);
}وكان الخطأ فى التقرير نفسه أنه يحتوى صورة وكان مسار الصورة به مشكلة فأنشأت تقريرا آخر ليس به صور فاشتغل
فحاولت أن اشغل الكود الآخر وهو
try{
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
java.sql.Connection connection=java.sql.DriverManager.getConnection(database);
// PATH TO YOUR JASPER FILE
JasperPrint jp = JasperFillManager.fillReport("D:/report2.jasper",null, connection);
JasperViewer viewer = new JasperViewer(jp, false);
viewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
viewer.setModalExclusionType(JDialog.ModalExclusionType.TOOLKIT_EXCLUDE);
viewer.setTitle("Products");
viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
viewer.setLocationRelativeTo(null);
viewer.setVisible(true);
viewer.toFront();
}
catch(Exception ex){
System.out.println(ex.toString());
}فنتج نفس الخطأ وهو (net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0)
وضممت المكتبة spring.jar للمشروع ولكن نفس الخطأ
تم تعديل هذه المشاركة بواسطة elwaly في 17 أغسطس 2010 في 15:07
عموما هو خطأ ناتج من نقص المكتبات
قم بنسخ كل المكتبات الموجودة فى المسار التالى
IReport/IReport/modules/ext
واضافتها الى مسار برنامجك classpath
وجرب البرنامج وسيعمل بشكل جيد باذن الله
ثم حاول حذف بعضها وتجربة البرنامج مرة اخرى فاذا لم يعمل تراجع عن عملية الحذف
واذا عمل فجرب غيرهم حتى تصل الى اقل عدد ممكن ان يعمل معه برنامجك بطريقة صحيحة
وبهذا تحل المشكلة
انا شخصيا اتبع هذه الطريقة
ولكن هناك بعض المكتبات لازمة لعملية التصدير الى تنسيقات مختلفة مثل pdf او excel
واخرى لازمة لاستخدام الصور والرسم البيانى فى التقرير
بالتوفيق
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳