在css标签docx4j / Jsoup之前添加的空格

时间:2016-06-09 13:11:35

标签: html css jsoup docx4j

我想将一些html格式的字符串解析为docx。我目前使用Jsoup将我的html转换为干净的xhtml字符串和docx4j(最新版本)以将xhtml解析为docx。

我遇到了一些颜色问题,因为它不是docx4j支持的标签。我格式化我的字符串以使用新标记(随机名称标签)以css样式更改它。颜色现在有效,但我在用彩色书写之后和之后添加了一些空格。

这是代码。

import java.io.File;
import java.util.List;

import org.docx4j.Docx4J;
import org.docx4j.convert.in.xhtml.XHTMLImporter;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class test {

    public static void main(String[] args) throws Docx4JException {
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        String outputfilepath = "test.docx";


        String d = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><style type=\"text/css\">body{font-family:Arial; font-size:120%;}si{color:#0000FF;padding-right: 0;margin:0;}si:before { padding-right: 0;margin:0;indent:0; }</style></head><body><p>blabla<si><strong>blaebdqzd</strong>qdzd</si>zdqzdq</p></body></html>";
        String e ="<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><style type=\"text/css\">body{font-family:Arial; font-size:120%;}si{color:#0000FF;padding-right: 0;margin:0;}si:before { padding-right: 0;margin:0;indent:0; }</style></head><body><p><si><strong>blaebdqzd</strong>qdzd</si>zdqzdq</p></body></html>";


        XHTMLImporter importer = new XHTMLImporterImpl(wordMLPackage);
        String text = htmlToXhtml(d);
        List<Object> content = importer.convert(text, null);
        wordMLPackage.getMainDocumentPart().getContent().addAll(content);

        importer = new XHTMLImporterImpl(wordMLPackage);
        text = htmlToXhtml(e);
        content = importer.convert(text, null);
        wordMLPackage.getMainDocumentPart().getContent().addAll(content);


        Docx4J.save(wordMLPackage, new File(outputfilepath), Docx4J.FLAG_NONE);
    }

    private static String htmlToXhtml(final String html) {
        final Document document = Jsoup.parse(html);
        document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
        return document.html();
    }
}

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

你可以尝试两件事:

  1. 你的随机元素“si”:设置它的块或内联
  2. 使用span代替
  3. 更一般地说,xhtml to docx依赖于Flying Saucer / xhtml渲染器,因此您有时可以通过Google搜索找到有用的信息。