我有一个docx文件,带有calibri-light的heading1样式(其他文本也使用calibri-light)。转换成html后,每个文本都是calibri light(正确的),但是当我打开html文件时,heading1样式的文本是times new roman(原因:没有为heading1样式设置字体系列,在html文件中)
当我打开docx文件并检查heading1样式的字体时,它会显示calibri light。
标题1基于docx中的“正常”样式。
这是docx中的常规样式:
<w:style w:type="paragraph"
w:default="1"
w:styleId="Normal">
<w:name w:val="Normal"/>
<w:qFormat/>
<w:rsid w:val="003D736F"/>
<w:pPr>
<w:spacing w:before="40"
w:after="40"
w:line="240"
w:lineRule="auto"/>
<w:ind w:left="851"/>
<w:jc w:val="both"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Calibri Light"
w:eastAsia="SimSun"
w:hAnsi="Calibri Light"
w:cs="Times New Roman"/>
<w:szCs w:val="20"/>
<w:shd w:val="clear"
w:color="auto"
w:fill="FFFFFF"/>
<w:lang w:eastAsia="zh-CN"/>
</w:rPr>
</w:style>
我可以看到,我们有4种字体。但是我们能告诉docx4j,使用一种特定的字体(比如,使用w:ascii并把这个字体放到html文件中的heading1样式吗?)heading1样式的文本也应该是calibri light,这是我的目标。
这是头像样式:
<w:style w:type="paragraph"
w:styleId="Heading1">
<w:name w:val="heading 1"/>
<w:basedOn w:val="Normal"/>
<w:next w:val="Normal"/>
<w:link w:val="Heading1Char"/>
<w:qFormat/>
<w:rsid w:val="00232342"/>
<w:pPr>
<w:keepNext/>
<w:keepLines/>
<w:numPr>
<w:numId w:val="4"/>
</w:numPr>
<w:spacing w:before="360"
w:after="240"/>
<w:jc w:val="left"/>
<w:outlineLvl w:val="0"/>
</w:pPr>
<w:rPr>
<w:b/>
<w:sz w:val="32"/>
</w:rPr>
</w:style>
这是我正在使用的代码:
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(source));
HTMLSettings htmlSettings = Docx4J.createHTMLSettings();
htmlSettings.setWmlPackage(wordMLPackage);
htmlSettings.setImageDirPath("temp_images");
htmlSettings.setImageTargetUri("temp_images");
htmlSettings.setImageIncludeUUID(false);
boolean nestLists = false;
if (nestLists) {
SdtWriter.registerTagHandler("HTML_ELEMENT", new SdtToListSdtTagHandler());
} else {
// convert numberings to plain text
htmlSettings.getFeatures().remove(ConversionFeatures.PP_HTML_COLLECT_LISTS);
}
OutputStream os = new java.io.FileOutputStream(dest);
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
这是html中的两种样式
.Normal {display:block;text-align: justify;position: relative; margin-left: 15mm;margin-top: 1mm;margin-bottom: 1mm;line-height: 100%;}
.Heading1 {display:block;text-align: left;page-break-after: avoid;margin-top: 0.25in;margin-bottom: 4mm;font-weight: bold;font-size: 16.0pt;}
编辑:其他可接受的解决方案可以是:设置一个字体系列为“docdefaults”风格的html文件。有可能吗?
1条答案
按热度按时间ev7lccsx1#
字体族是使用直接应用的css处理的。
例如:
要应用字体系列,字体必须实际存在于您的计算机上,或者Map到实际存在的字体(请参阅docx4j的convertouthtml示例)。
如果不是这样,则不会发出字体族属性。
为了获得更深入的了解,可以打开org.docx4j.fonts.runfontselector的调试级别日志记录。日志记录示例: