البرمجة

تحسين فعالية قراءة ملفات Word باستخدام Apache POI في Java

في محاولتك لعرض ملف Word في نافذة التحرير الخاصة بك، واجهت مشكلة تتعلق بصيغة الملف واستخدامك لمكتبة Apache POI. الخطأ الذي تلقيته يشير إلى أن البيانات المقدمة تظهر بصيغة Office 2007+ XML، ولكنك تقوم بالاتصال بجزء من مكتبة POI الذي يتعامل مع مستندات Office OLE2. لحل هذه المشكلة، يمكنك استخدام جزء آخر من مكتبة POI المخصص لمستندات Office XML.

لتعديل الكود وحل المشكلة، يمكنك استخدام XWPFDocument بدلاً من HWPFDocument. يتيح لك ذلك التعامل مع ملفات Word بصيغة Office 2007+ XML. إليك كيفية تحديث الكود:

java
import java.awt.Dimension; import java.awt.GridLayout; import java.io.File; import java.io.FileInputStream; import javax.swing.JEditorPane; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; public class EditorPane extends JEditorPane { public EditorPane(File file) { try { FileInputStream fis = new FileInputStream(file.getAbsolutePath()); // استخدم XWPFDocument بدلاً من HWPFDocument XWPFDocument xwpfd = new XWPFDocument(fis); XWPFWordExtractor we = new XWPFWordExtractor(xwpfd); // استخدم getText() بدلاً من getParagraphText() String text = we.getText(); this.setText(text); } catch (Exception e) { e.printStackTrace(); } } }

بخصوص الأسطر التي تسأل عنها، يبدو أنك تحاول تحديد نص فردي في كل سطر من النصوص المستخرجة. ومع ذلك، يمكنك ببساطة استخدام this.setText(text); بدلاً من الحلقة، حيث ستقوم بتعيين النص كاملاً دفعة واحدة لنافذة التحرير.

المزيد من المعلومات

عند التعامل مع مكتبة Apache POI وعرض ملفات Word، هناك بعض الأمور الإضافية التي يمكنك أن تضيفها لتعزيز فعالية وأداء تطبيقك.

أولاً، قم بالتحقق من وجود الملف قبل فتحه. يمكنك استخدام شرط للتحقق مما إذا كان الملف قابلاً للقراءة أو لا:

java
if (file.exists() && file.isFile() && file.canRead()) { // قم بفتح الملف ومعالجته هنا } else { System.err.println("Unable to read the file. Make sure the file exists and is readable."); }

ثانيًا، قم بإغلاق مدخلات الملف بمجرد الانتهاء من استخدامها. يمكنك القيام بذلك في قسم الـ catch باستخدام معبارة finally:

java
} catch (Exception e) { e.printStackTrace(); } finally { try { if (fis != null) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } }

هذا يساعد على تجنب تسريب الموارد وضمان إغلاق الملف بشكل صحيح.

أيضًا، يمكنك تحسين الأداء عن طريق استخدام StringBuilder لتجنب استخدام السلسلة النصية المتغيرة (String) داخل حلقة الفهرسة، لذا يمكنك تحسين فعالية الكود كالتالي:

java
StringBuilder stringBuilder = new StringBuilder(); for (String paragraph : array) { stringBuilder.append(paragraph); } this.setText(stringBuilder.toString());

هذا يقلل من إنشاء العديد من الكائنات String في الذاكرة ويعزز أداء التطبيق.

باستخدام هذه الإضافات والتحسينات، يمكنك تحسين جودة وأداء تطبيقك عند قراءة وعرض ملفات Word باستخدام Apache POI.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!