使用 docx4j 将 HTML 代码转换为 Word 图像未嵌入在 Word 文档中



示例程序...

import java.io.IOException;
import org.docx4j.Docx4jProperties;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.contenttype.ContentType;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.model.structure.PageSizePaper;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.WordprocessingML.AlternativeFormatInputPart;
import org.docx4j.relationships.Relationship;
import org.docx4j.wml.CTAltChunk;
public class HtmlToDoc {
    public static void main(String[] args) throws Docx4JException {
        String html="", s="", filepath="E://HtmlToDoc//";
        try {
            String html = "<html><head><title>Import me</title></head><body><p>Hello World! Sample Program</p><img src="E:/HtmlToDoc/LOGO.JPEG"/></body></html>";
            Docx4jProperties.getProperties().setProperty("docx4j.PageSize", "B4JIS");
            String papersize= Docx4jProperties.getProperties().getProperty("docx4j.PageSize", "B4JIS");
            String landscapeString = Docx4jProperties.getProperties().getProperty("docx4j.PageOrientationLandscape", "true");
            boolean landscape= Boolean.parseBoolean(landscapeString);
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(PageSizePaper.valueOf(papersize), landscape);
            AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw.html"));
            afiPart.setBinaryData(html.getBytes());
            //afiPart.setBinaryData(fileContent);
            afiPart.setContentType(new ContentType("text/html"));
            Relationship altChunkRel = wordMLPackage.getMainDocumentPart().addTargetPart(afiPart);
            // .. the bit in document body
            CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk();
            ac.setId(altChunkRel.getId() );
            wordMLPackage.getMainDocumentPart().addObject(ac);
            // .. content type
            wordMLPackage.getContentTypeManager().addDefaultContentType("html", "text/html");
            wordMLPackage.save(new java.io.File("E://HtmlToDoc//" + "test.docx"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

这在我的本地机器中工作正常。 但是我将这段代码移动到我的Word文档中的服务器 图像没有嵌入,但我给出了正确的图像路径 [当我在服务器中将HTML转换为PDF时,相同的图像路径工作正常]。 在服务器[Linux机器和IBM WebSphere App Server和ApacheWeb服务器]中运行时图像丢失的原因是什么。即使我所有的路径(word文档,图像,html文档)都是相同的。

您的代码依赖于 Word 将 altChunk 转换为 HTML,因此,如果您在本地计算机上打开 Word 文档,它将无法在 E:/HtmlToDoc/LOGO 上看到图像。服务器上的 JPEG

您可以使用 URL 或数据 URI。

或者,使用docx4j-ImportXHTML,它将在不给Word留下任何内容的情况下进行转换。

相关内容

  • 没有找到相关文章

最新更新