Когда Java читает текстовый документ, хотя в Интернете представлено множество плагинов poi, java2Word, jacob, itext и т. д., poi не может прочитать формат (новый API, похоже, все еще находится на стадии исследования и разработки, а не очень стабильно, и я не боюсь делать проекты. Используйте); java2Word, jaco). b легко сообщает об ошибках и не может найти регистрацию, что довольно странно, я пробовал на разных машинах, и методы работы абсолютно одинаковые, а некоторые сообщают об ошибках. на форуме, чтобы найти эксперта, который мог бы решить эту проблему, но я не мог сказать причину. Project. Развертывание и использование 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(""); byte[] bs = bin.getBytes(); int bit; 0; я < bs.length;i++) { бит = (bs[i] & 0x0f0) >> 4; sb.append("//'"); sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); String readByteRtf (InputStream ins, String path) {String sourcecontent = ""; try {ins = new FileInputStream (path); b = new byte[1024]; if (ins == null) { System.out.println("Исходный файл шаблона не существует"); int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024 ); // возвращаем итоговое количество прочитанных байтов if(bytesRead == -1) {// конец 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 и запустите файл OperationRTF.java. Имя файла будет сгенерировано в каталоге YQ, например: 21:15: 19_cheney_record файлы .rtf.
пакет com; импорт java.io.File; импорт java.io.FileInputStream; импорт java.io.FileWriter; импорт java.io.IOException; импорт java.io.InputStream; импорт java.io.PrintWriter; импорт java.text. SimpleDateFormat; импорт java.util.Date; общественный класс ОператорRTF {общественная строка strToRtf (String) содержимое) {char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = content.getBytes(); int bit; .length; я++) { бит = (bs[i] & 0x0f0) >> 4; sb.append("//'"); sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); String replaceRTF (String content, String replacecontent, int flag) { String rc = strToRtf (replacecontent = ""); 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"; File fDirecotry = new File(path); ()) {fDirecotry.mkdirs(); } путь возврата; } public String ToSBC (String input) { char [] c = input.toCharArray(); (int i = 0; i < c.length; i++) { if (c [i] == 32) { c [i] = (char) 12288 } 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("гггг-ММ-дд ЧЧ:мм:сс"); String targetname = sdf.format(current).substring(11) ,13) + «час»; имя цели += sdf.format(current).substring(14,16) + «имя цели»; += sdf.format(current).substring(17,19) + "секунды"; имя цели += "_" + имя пользователя +"_record.rtf"; String strpath = getSavePath(); String sourname = strpath+"// " + «template.rtf»; String sourcecontent = «»; InputStream ins = null; try {ins = new FileInputStream (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) {// конец InputStream System.out.println("Конец файла шаблона чтения"); += new String(b, 0, bytesRead); // преобразование в строку с использованием байтов } }catch(Exception e){ e.printStackTrace(); } String targetcontent = ""; String array[] = content.split(" ~"); for(int i=0;i<array.length;i++){ if(i==0){ targetcontent = replaceRTF(sourcecontent, array[i], i); }else{ targetcontent = replaceRTF(targetcontent, array[i], i); } } try { FileWriter fw = new FileWriter(getSavePath()+"//" + targetname,true); PrintWriter out = new PrintWriter(fw); ("")||targetcontent==""){ out.println(sourcecontent }else{ out.println(targetcontent }); out.close(); fw.close(); System.out.println(getSavePath()+" Файл создан в этом каталоге" + targetname + "Success" } catch (IOException e) { // TODO Создано автоматически catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Автоматически создаваемая заглушка метода ОператорRTF oRTF = new ОператорRTF(); 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; ; импорт org.apache.poi.hwpf.usermodel.Range import; org.apache.poi.hwpf.usermodel.Table; импорт org.apache.poi.hwpf.usermodel.TableCell; импорт org.apache.poi.hwpf.usermodel.TableIterator; импорт org.apache.poi.hwpf.usermodel.TableRow; ; импорт org.apache.poi.poifs.filesystem.POIFSFileSystem общественный класс POI_Word {public static void; main(String[] args) { try { String[] s=new String[20]; in=new FileInputStream("D://mayi.doc"); новый HWPFDocument (pfs); Диапазон диапазона = hwpf.getRange (); TableIterator it = новый TableIterator (диапазон); 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); for(int); 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>;