首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hwpf apache poi将word转换为FO

使用hwpf apache poi将word转换为FO
EN

Stack Overflow用户
提问于 2014-05-28 19:00:54
回答 1查看 2K关注 0票数 3

如何使用hwpf.converter.WordToFo类将.doc文件转换为FO?我已经尝试搜索,但我只能得到一个单词到html的转换。我还在apache-poi站点上阅读了WordToFO手册,但无法获得它。

Convert Word to HTML with Apache POI

我尝试使用以下代码将.doc转换为.fo,但在使用apache-fop将.fo文件转换为.png后,我无法获得word文件中存在的图像。

代码语言:javascript
复制
package word2fo;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;

import javax.swing.text.Document;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.HWPFDocumentCore;
import org.apache.poi.hwpf.converter.WordToFoConverter;
import org.apache.poi.hwpf.converter.WordToFoUtils;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.converter.WordToHtmlUtils;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.w3c.dom.Node;

public class Doc2Fo{
    public static void main(String[] args) throws Exception {
        System.out.println("reached 1");
        HWPFDocumentCore wordDocument = WordToFoUtils.loadDoc(new FileInputStream("D:\\Magna.doc"));
        System.out.println("reached 2");
        WordToFoConverter wordToFoConverter = new WordToFoConverter(
                DocumentBuilderFactory.newInstance().newDocumentBuilder()
                        .newDocument());
        System.out.println("reached 3");
        wordToFoConverter.processDocument(wordDocument);
        org.w3c.dom.Document htmlDocument = wordToFoConverter.getDocument();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource((Node) htmlDocument);
        StreamResult streamResult = new StreamResult(out);
        System.out.println("reached 4");

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer;
        try {
            serializer = tf.newTransformer();
             serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                serializer.setOutputProperty(OutputKeys.INDENT, "yes");
                //serializer.setOutputProperty(OutputKeys.METHOD, "xml-fo");
                serializer.transform(domSource, streamResult);
                out.close();

                String result = new String(out.toByteArray());
                System.out.println(result);

        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}
}
EN

回答 1

Stack Overflow用户

发布于 2015-09-30 18:34:31

代码语言:javascript
复制
    HWPFDocument hwpfDocument = new HWPFDocument(POIDataSamples.getDocumentInstance().openResourceAsStream(sampleFileName));

    WordToFoConverter wordToFoConverter = new WordToFoConverter(XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument());
    wordToFoConverter.processDocument(hwpfDocument);

    StringWriter stringWriter = new StringWriter();

    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.transform(new DOMSource(wordToFoConverter.getDocument()), new StreamResult(stringWriter));

    String result = stringWriter.toString();
    return result;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23909806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档