gpt4 book ai didi

java - Docx4J 表字体类型被忽略

转载 作者:行者123 更新时间:2023-12-01 22:37:45 27 4
gpt4 key购买 nike

我正在尝试使用 DOCX4J 将 HTML 转换为 Docx。我们正在使用以下代码。除了最终 Docx 文件中的表格文本始终为 Calibiri 之外,所有转换均有效。我们尝试在代码、CSS 和 Docx4J 中处理这个问题,但在过去几天没有取得任何成功。如果您能提供帮助,那就太好了。

public String xhtmlToDocx(List<String> fileData, File destinationFile) {

try {
InputStream in;
in = new FileInputStream(new File(TCellUtil.TCELL_DATA_LOG_FOLDER_PATH + File.separator + "Header_Temp.docx"));
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);
System.out.println("before");
for (String s : wordMLPackage.getMainDocumentPart().fontsInUse())
System.out.println(s);
System.out.println("aFTER ");
VariablePrepare.prepare(wordMLPackage);

RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
rfonts.setAscii("Times New Roman");
rfonts.setHAnsi("Times New Roman");
rfonts.setEastAsia("Times New Roman");
XHTMLImporterImpl.addFontMapping("Times New Roman", rfonts);
wordMLPackage.getMainDocumentPart().getPropertyResolver().getDocumentDefaultRPr().setRFonts(rfonts);

int c = 1;
for (String xhtml : fileData) {
String file_data = "<html>" + xhtml + "</html>";
AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw" + c + ".html"));
afiPart.setContentType(new ContentType("text/html"));
afiPart.setBinaryData(file_data.getBytes());

Relationship altChunkRel = wordMLPackage.getMainDocumentPart().addTargetPart(afiPart, AddPartBehaviour.REUSE_EXISTING);
CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk();
ac.setId(altChunkRel.getId());
wordMLPackage.getMainDocumentPart().addObject(ac);
wordMLPackage.getMainDocumentPart().addObject(createPageBreak());
((CTSettings) wordMLPackage.getMainDocumentPart().getDocumentSettingsPart().getJaxbElement()).setUpdateFields(new BooleanDefaultTrue());
wordMLPackage.getMainDocumentPart().convertAltChunks();

for (String s : wordMLPackage.getMainDocumentPart().fontsInUse())
System.out.println(s);
wordMLPackage.getContentTypeManager().addDefaultContentType("docx", "text/html");
c++;
}
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
wordMLPackage.save(destinationFile);
this.dest_filePath = destinationFile.getAbsolutePath();

return this.dest_filePath;
} catch (Docx4JException var12) {
var12.printStackTrace();
} catch (Exception var13) {
var13.printStackTrace();
}
return null;
}

最佳答案

首先要了解是 docx4j 进行转换,还是 Word 进行转换。

如果您专门调用 docx4j-ImportXHTML,或者使用了convertAltChunks(),docx4j 会尝试执行此操作。请注意,docx4j 仅转换 XHTML 类型(即不是 HTML)的 altChunk。因此,如果它是 HTML altChunk,Word 就会进行转换。

在您发布的代码中:

           AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw"+c+".html"));

afiPart.setContentType(new ContentType("text/html"));

afiPart.setBinaryData(file_data.getBytes());

所以是 Word 进行转换(并在表格中使用 Calibri)。

此外,请务必检查您的 (X)HTML 是否是格式良好的 XML。如果不是,您需要更正您的输入,无论是在发出它的系统中,还是使用一些“整洁”的代码。

第一步,确保 https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/samples/java/org/docx4j/samples/ConvertInXHTMLFile.java可以处理。

关于java - Docx4J 表字体类型被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com