.doc文件中的Apache-POI格式文本问题

时间:2014-09-10 08:18:22

标签: java apache-poi

我在我的项目中使用这个例子。一切都很好,替换文本也很好,但在我的输出文本文件中,应该是"居中",已经左对齐。输入文件 - .doc,我觉得打破了文档的格式,但我不确定问题是什么。如何解决这个问题?

public class HWPFTest {
    public static void main(String[] args){
        String filePath = "F:\\Sample.doc";
        POIFSFileSystem fs = null;        
        try {            
            fs = new POIFSFileSystem(new FileInputStream(filePath));            
            HWPFDocument doc = new HWPFDocument(fs);
            doc = replaceText(doc, "$VAR", "MyValue1");
            saveWord(filePath, doc);
        }
        catch(FileNotFoundException e){
            e.printStackTrace();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }

    private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText){
        Range r1 = doc.getRange(); 

        for (int i = 0; i < r1.numSections(); ++i ) { 
            Section s = r1.getSection(i); 
            for (int x = 0; x < s.numParagraphs(); x++) { 
                Paragraph p = s.getParagraph(x); 
                for (int z = 0; z < p.numCharacterRuns(); z++) { 
                    CharacterRun run = p.getCharacterRun(z); 
                    String text = run.text();
                    if(text.contains(findText)) {
                        run.replaceText(findText, replaceText);
                    } 
                }
            }
        } 
        return doc;
    }

    private static void saveWord(String filePath, HWPFDocument doc) throws FileNotFoundException, IOException{
        FileOutputStream out = null;
        try{
            out = new FileOutputStream(filePath);
            doc.write(out);
        }
        finally{
            out.close();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

HWPF无法用于编写.doc文件。它可能适用于非常简单的文件内容,但很少有额外的内容打破它。我担心你在这里运气不好 - 如果它是你的选择,你可能想要使用RTF文件并对其进行处理。如果您将rtf扩展名重命名为.doc(如果您需要.doc扩展名),Word应该可以正常工作。

(我为客户开发了一个自定义和工作的HWPF变体,并且知道事情有多困难。当存在8位编码之外的字符,使用表格时,文本时,标准HWPF库会遇到麻烦当嵌入图形时,使用框,...... .doc文件中的某些内容也与Microsoft的官方规范中描述的内容不同。使工作的HWPF库是非常重要的&#34;并且需要大量的规范阅读和调查。如果你想要修复这些错误,你需要至少半年的开发工作。)