我需要替換WinWord文檔中的某些文本。問題是,我使用replaceText函數對Range執行的任何文本替換都會創建一個損壞的WinWord文件,除非替換字符串和替換字符串的長度完全相同。我們將處理動態內容,所以這不會。使用Apache POI的WinWord文檔中的文本替換
Range對象規格: http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String,java.lang.String中)
的replaceText函數有一個可選的第三個參數,一個int,以指定某種偏移。我想也許這可能是解決方案,但參數甚至無法處理負值,這使得替換很難或不可能,除非偏移量(replacement.length() - replaced.length())爲正值。但是,我可能需要它是負面的。總之,文檔中沒有任何內容似乎意味着如果其他兩個參數的長度不相等,則需要此偏移參數。
這裏是我的代碼: (假設a.doc只包含「caaaaaaake」)
String inputFilename = "C:\\\a.doc";
String outputFilename = "C:\\b.doc";
POIFSFileSystem fs = null;
FileInputStream fis = new FileInputStream(inputFilename);
fs = new POIFSFileSystem(fis);
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
range.replaceText("caaaaaaake", "piiiie");
FileOutputStream fos = new FileOutputStream(outputFilename);
doc.write(fos);
fis.close();
fos.close();
的代碼執行沒有問題,但它創建了一個斷字的文件。 我能做什麼?
的文件中用piiiie打開就好了。對不起,我不能建議POI修復,但如果你剛剛開始,你可以考慮其他免費選項,如[JODReports] [1]或[Docmosis] [2]。它們很方便,但需要更大的基礎設施,因爲您需要安裝OpenOffice來幫助進行格式轉換。 [1]:http://jodreports.sourceforge.net/ [2]:http://www.docmosis.com – 2010-08-03 02:56:40
謝謝,但不幸的是,我不能依賴OpenOffice。 Docmosis提到使用WinWord文件,但我需要一種文本替換方法,我無法在其API中找到它。 – Amalgovinus 2010-08-03 16:13:22
我有同樣的問題。即使刪除替換。我只是通過'HWPFDocument doc = new HWPFDocument(new POIFSFileSystem(new FileInputStream(path)));'然後編寫'try(FileOutputStream out = new FileOutputStream(filePath))來讀取輸入文件{doc.write(out); }'。但它會生成損壞的文件。 – Bagdat 2016-10-05 05:00:07