space 在 css 标签前添加 docx4j/Jsoup
space added before css tag docx4j/Jsoup
我想将一些 html 格式的字符串解析为 docx。我目前使用 Jsoup 将我的 html 转换为干净的 xhtml 字符串,并使用 docx4j(最新版本)将 xhtml 解析为 docx.
我在颜色方面遇到了一些问题,因为 docx4j 不支持标签。我格式化我的字符串以使用新标签(随机名称标签)以 css 样式更改它。颜色现在可以使用了,但是我在用颜色书写之前和之后添加了一些 space。
这是代码。
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();
}
}
有人可以帮我吗?
您可以尝试两件事:
- 你的随机元素"si":设置它是块还是内联
- 改为使用跨度
更一般地说,xhtml 到 docx 依赖于 Flying Saucer / xhtml 渲染器,因此您有时可以通过谷歌搜索找到有用的信息。
我想将一些 html 格式的字符串解析为 docx。我目前使用 Jsoup 将我的 html 转换为干净的 xhtml 字符串,并使用 docx4j(最新版本)将 xhtml 解析为 docx.
我在颜色方面遇到了一些问题,因为 docx4j 不支持标签。我格式化我的字符串以使用新标签(随机名称标签)以 css 样式更改它。颜色现在可以使用了,但是我在用颜色书写之前和之后添加了一些 space。
这是代码。
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();
}
}
有人可以帮我吗?
您可以尝试两件事:
- 你的随机元素"si":设置它是块还是内联
- 改为使用跨度
更一般地说,xhtml 到 docx 依赖于 Flying Saucer / xhtml 渲染器,因此您有时可以通过谷歌搜索找到有用的信息。