当前位置: 首页 > 面试题库 >

我需要将Apache POI图片从Word文档转换为html文件

凌朗
2023-03-14
问题内容

我有一些代码使用Java Apache POI库打开一个Microsoft Word文档,并使用Apache
POI将其转换为html,它还会获取文档上图像的字节数组数据。但是我需要将此信息转换为html才能写出为html文件。任何提示或建议,将不胜感激。请记住,我是台式机开发人员而不是Web程序员,因此,当您提出建议时,请记住这一点。下面的代码获取图像。

 private void parseWordText(File file) throws IOException {
      FileInputStream fs = new FileInputStream(file);
      doc = new HWPFDocument(fs);
      PicturesTable picTable = doc.getPicturesTable();
      if (picTable != null){
           picList = new ArrayList<Picture>(picTable.getAllPictures());
           if (!picList.isEmpty()) {
           for (Picture pic : picList) {
                byte[] byteArray = pic.getContent();
                pic.suggestFileExtension();
                pic.suggestFullFileName();
                pic.suggestPictureType();
                pic.getStartOffset();
           }
        }
     }

然后,下面的代码将文档转换为html。有没有办法在下面的代码中将byteArray添加到ByteArrayOutputStream中?

private void convertWordDoctoHTML(File file) throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException {
    HWPFDocumentCore wordDocument = null;
    try {
        wordDocument = WordToHtmlUtils.loadDoc(new FileInputStream(file));
    } catch (IOException ex) {
        Exceptions.printStackTrace(ex);
    }

    WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
    wordToHtmlConverter.processDocument(wordDocument);
    org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument();
    NamedNodeMap node = htmlDocument.getAttributes();


    ByteArrayOutputStream out = new ByteArrayOutputStream();
    DOMSource domSource = new DOMSource(htmlDocument);
    StreamResult streamResult = new StreamResult(out);

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

    String result = new String(out.toByteArray());
    acDocTextArea.setText(newDocText);

    htmlText = result;

}

问题答案:

综观对源代码org.apache.poi.hwpf.converter.WordToHtmlConverter

http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToHtmlConverter.java?view=markup&pathrev=1180740

它JavaDoc中的状态:

此实现不会创建图像或指向它们的链接。 可以通过重写{@link #processImage(Element,boolean,Picture)}方法来更改

如果您processImage(...)在790行的AbstractWordConverter.java中查看该方法,则该方法似乎正在调用,然后是另一个名为的方法processImageWithoutPicturesManager(...)

http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/converter/AbstractWordConverter.java?view=markup&pathrev=1180740

此方法WordToHtmlConverter再次定义,可疑与您要增加代码的地方完全相同(第317行):

@Override
protected void processImageWithoutPicturesManager(Element currentBlock,
    boolean inlined, Picture picture)
{
    // no default implementation -- skip
    currentBlock.appendChild(htmlDocumentFacade.document
    .createComment("Image link to '"
    + picture.suggestFullFileName() + "' can be here"));
}

我认为您已经开始将图像插入流中了。

创建转换器的子类,例如

    public class InlineImageWordToHtmlConverter extends WordToHtmlConverter

然后覆盖该方法并将任何代码放入其中。

我还没有测试过,但是从理论上看,这应该是正确的方法。



 类似资料:
  • 问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )

  • 我需要将带有彩色单词的. docx文件转换为html。我尝试过庞大的库,但颜色丢失了。我如何才能实现我的目标?

  • 我正在尝试创建一个包含多列的word文档。这样做(而不是使用表)的原因是,数据将跨越多个页面,在添加到新页面之前,我只能用列填充整个页面。 可以用ApachePOI实现吗?谢谢

  • 对于一些用PHP编写的REST API,我被要求创建Swagger文档,由于我不知道有什么简单的方法可以向现有的API添加注释并创建这样的文档,所以我现在使用这个编辑器来生成一些文档。

  • 问题内容: 这是我第一次使用Apache POI,并且已经在该站点上提出了我要问的问题,但是没有给他们明确的答案,所以我别无选择,只能接受您的所有帮助。 我正在尝试编写一个Java程序,该程序从一个文件夹中获取图像并将该图像插入到Word文档中。我正在为此程序使用Apache POI。我在这里发布我的代码。 我可以创建word文档文件,也可以插入文本,但是该行却给我错误,例如“将演员转换为docx