عندما تقرأ Java مستند Word، على الرغم من وجود العديد من المكونات الإضافية poi وjava2Word وjacob وitext وما إلى ذلك المقدمة على الإنترنت، لا يمكن لـ poi قراءة التنسيق (يبدو أن واجهة برمجة التطبيقات الجديدة لا تزال في مرحلة البحث والتطوير، وليس مستقر جدًا، ولا أخشى تنفيذ المشاريع. java2Word, jaco b من السهل الإبلاغ عن الأخطاء ولا يمكن العثور على التسجيل، وهو أمر غريب جدًا لقد قمت بتجربته على أجهزة مختلفة، وطرق التشغيل هي نفسها تمامًا ابحث عن خبير لحل هذه المشكلة، لكنني لا أستطيع معرفة السبب. يبدو أن نشر واستخدام itxt أمر مربك بعض الشيء، لكني قمت بالتحقق من المعلومات لفترة طويلة ولم أفعل ذلك لم أر طريقة جيدة لقراءتها. بعد بعض التحديد، من الأفضل استخدام RTF كحل وسط. بعد كل شيء، RTF هو تنسيق مفتوح المصدر ولا يتطلب أي مكونات إضافية، فهو يتطلب فقط عمليات الإدخال والإخراج الأساسية وتحويل التشفير. على السطح، لا تختلف ملفات تنسيق rtf عن doc، حيث يمكن فتحها باستخدام Word ويمكن تعيين تنسيقات مختلفة.
----- الوظائف المنفذة: قراءة محتوى قالب RTF (التنسيق ومحتوى النص)، واستبدال الأجزاء التي تم تغييرها، وتكوين مستند RTF جديد.
----- فكرة التنفيذ: يتم إدخال الأجزاء الثابتة في القالب يدويًا، ويتم تمثيل الأجزاء التي تم تغييرها بـ $info$ فقط استبدل $info$.
1. اقرأ محتوى قالب RTF في شكل بايت
2. تحويل سلاسل المحتوى المتغير إلى ترميز RTF
3. استبدل الأجزاء المتغيرة في النص الأصلي لتكوين مستند RTF جديد
الإجراءات الرئيسية هي كما يلي:
public String bin2hex(String bin) { char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); bs = bin.getBytes(); 0; i < bs. length;i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append("//'"); sb.append(digital[bit]); String readByteRtf(InputStream ins, String path){ String sourcecontent = ""; Try{ ins = new FileInputStream(path); byte[] b = new byte[1024]; if (ins == null) { System.out.println("ملف القالب المصدر غير موجود"); } int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024)؛ // إرجاع عدد وحدات البايت المقروءة النهائية if(bytesRead == -1) {// end of InputStream System.out.println("نهاية ملف قالب القراءة"); += new String(b, 0, bytesRead); // تحويل إلى سلسلة باستخدام البايتات } }catch(Exception e){ e.printStackTrace() } return sourcecontent ;}
ما ورد أعلاه هو الكود الأساسي، والجزء المتبقي هو الاستبدال. يمكن إعادة تجميع أسلوب String.replace(oldstr, newstr); في Java، لذا لن أنشره هنا. يرجى الاطلاع على المرفق للحصول على تفاصيل التعليمات البرمجية المصدر.
المتطلبات الأساسية لتشغيل التعليمات البرمجية المصدر:
قم بإنشاء دليل YQ على محرك الأقراص c، وانسخ "template.rtf" في المرفق إلى دليل YQ، وقم بتشغيل ملف OperatorRTF.java وسيتم إنشاء اسم الملف في دليل YQ، مثل: 21:15: 19_cheney_record ملفات .rtf.
package com; import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text. SimpleDateFormat;import java.util.Date; public class OperatorRTF { public String strToRtf(String content){ char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = content.getBytes(); int bit; .length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append("//'"); sb.append(digital[bit]); String renderRTF(String content,String rendercontent,int flag){ String rc = strToRtf(replacecontent String target = ""; if(flag==0){ target = content.replace("$timetop$",rc } if(flag==1){ target = content.replace("$info$",rc } if(); flag==2){ target = content.replace("$idea$",rc } if(flag==3){ target = content.replace("$advice$",rc } if(flag= =4){ الهدف = content.replace("$infosend$",rc); } return target; } public String getSavePath() { String path = "C://YQ"; ()) { fDirecotry.mkdirs(); } return path; } public String ToSBC(String input){ char[] c = input.toCharArray(); (int i = 0; i < c.length; i++){ if (c[i] == 32){ c[i] = (char) 12288; continue } if (c[i] < 127){ c [i] = (char) (c[i] + 65248); } } return new String(c); } public void rgModel(String username, String content) { // TODO كعب الطريقة الذي تم إنشاؤه تلقائيًا Date current=new Date(); SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String targetname = sdf.format(current).substring(11 ,13) + "hour"; targetname += sdf.format(current).substring(14,16) + "دقيقة"; += sdf.format(current).substring(17,19) + "secions"; targetname += "_" + username +"_record.rtf"; +"template.rtf"; String sourcecontent = ""; InputStream ins = null; Try{ ins = new FileInputStream(sourname); byte[1024]; if (ins == null) { System.out.println("ملف القالب المصدر غير موجود"); } int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024)؛ // إرجاع عدد وحدات البايت المقروءة النهائية if(bytesRead == -1) {// end of InputStream System.out.println("نهاية ملف قالب القراءة"); += new String(b, 0, bytesRead); ~"); for(int i=0;i<array.length;i++){ if(i==0){ targetcontent = استبدالRTF(sourcecontent, array[i], i); }else{ targetcontent = استبدالRTF(targetcontent, array[i], i); } } حاول { FileWriter fw = new FileWriter(getSavePath()+"//" + targetname,true); (""||targetcontent==""){ out.println(sourcecontent) }else{ out.println(targetcontent }); out.Close(); fw. Close(); System.out.println(getSavePath()+" الملف الذي تم إنشاؤه في هذا الدليل" + targetname + "Success"); كتلة الصيد e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated way stub OperatorRTF oRTF = new OperatorRTF(); String content = "من الساعة 9:00 يوم 12 أكتوبر 2008 إلى الساعة 6:00 يوم 12 أكتوبر 2008 ~ نشير إلى طريقة اختبار الأدوية ~ نشير إلى طريقة اختبار الأدوية ~ نشير إلى الطريقة اختبار الأدوية ~ نشير إلى طريقة اختبار الأدوية"; oRTF.rgModel("cheney",content); }}
مثال لاستخدام POI لقراءة البيانات الجدولية من ملف Word:
<span style="font-size:14px;">package com.poi.world; import java.io.FileInputStream; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Paragraph ; import org.apache.poi.hwpf.usermodel.Range; org.apache.poi.hwpf.usermodel.Table; import org.apache.poi.hwpf.usermodel.TableCell; import org.apache.poi.hwpf.usermodel.TableIterator; import org.apache.poi.hwpf.usermodel.TableRow ; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class POI_Word{ public static void main(String[] args){try { String[] s=new String[20]; FileInputStream in=new FileInputStream("D://mayi.doc"); new HWPFDocument(pfs); Range range =hwpf.getRange(); int Index=0; while(it.hasNext()){ Table tb=(Table)it.next(); for(int i=0;i<tb.numRows();i++){ //System.out. println("Numrows :"+tb.numRows()); TableRow tr=tb.getRow(i); j=0;j<tr.numCells();j++){ //System.out.println("numCells :"+tr.numCells()); // System.out.println("j :"+j) TableCell td=tr.getCell(j); for(int k=0;k<td.numParagraphs();k++){ //System.out.println("numParagraphs" :"+td.numParagraphs()); Paragraph para=td.getParagraph(k); s[index]=para.text().trim(); Index++; } } } } // System.out.println(s) .toString()); for(int i=0;i<s.length;i++){ System.out.println(s[i]); e.printStackTrace(); } } </span>