Java-将XML文件转换为Docx文件

时间:2018-07-04 06:40:27

标签: java xml docx

我遇到了一个问题,在尝试了几种不同的解决方案后,我陷入了困境。

我有一个从Word模板生成的XML文件模板。 我将此XML文档转换为字符串,然后在其中搜索关键字,然后将其替换为另一个字符串。 然后,我再次从该字符串创建XML文档:

String xmlAsString = "XYZ"; // My XML String    

    try {
            java.io.FileWriter fw = new FileWriter("src/test/resources/test.xml");
            fw.write(xmlAsString);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

现在,我想将此XML文档转换回有效的DOCX文档,但找不到该问题的解决方案。

2 个答案:

答案 0 :(得分:1)

有很多方法可以解决您的问题。此处的示例使用docx4j。

第一个是简单的内容替换(例如,将“ $ {titleofproject}”替换为“我是标题”);参见https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/VariableReplace.java,但这很脆弱(拆分运行),并且仅限于简单的文本替换。

第二个是在XML级别替换MainDocument部分(document.xml)中的内容:

String xml = wordMLPackage.getMainDocumentPart().getXML();
// do something
String result = xml;
// now inject your result contents
wordMLPackage.getMainDocumentPart().unmarshal(
        new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8)));

第三个是使用FlatOPC XML(整个zip文件在一个XML文件中表示);参见https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/ConvertOutFlatOpenPackage.java和ConvertInFlatOpenPackage.java

但是,比起在XML级别上更好的替代方法,通常是使用内容控制XML数据绑定。

答案 1 :(得分:0)

我不确定,但可能会对您有所帮助。此代码快照会将您的.xml文件转换为.docx文件。

public class ReadXmlFile {       
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 

            File xmlFile = new File("inFile.xml"); 

            Reader fileReader = new FileReader(xmlFile); 
            BufferedReader bufReader = new BufferedReader(fileReader); 
            StringBuilder sb = new StringBuilder(); 
            String line = bufReader.readLine();

            Writer out = new FileWriter("outFile.docx");      

            while( line != null)
            { 
                sb.append(line).append("\n");  
                line = bufReader.readLine();
                if(line !=null)                    
                 out.write(line);
              } 
            out.close();
            fileReader.close();

            String xml2String = sb.toString();
            System.out.println(xml2String);

          }
}