经过一些研究,似乎有可能解决这个限制,至少对于列表。
应该扩展 ListStyleTypeCssApplier 类,这是一种可能的方法:
public class CustomListStyleTypeCssApplier extends ListStyleTypeCssApplier {
FontProvider fontProvider;
BaseFont baseFont;
public CustomListStyleTypeCssApplier(FontProvider fontProvider, BaseFont baseFont) {
super();
this.fontProvider = fontProvider;
this.baseFont = baseFont;
}
@Override
public List apply(final List list, final Tag t, final MarginMemory memory, final PageSizeContainable psc,
final HtmlPipelineContext context) {
List listStyled = super.apply(list, t, memory, psc, context);
Chunk listSymbol = listStyled.getSymbol();
float size = listSymbol.getFont().getSize();
int style = listSymbol.getFont().getStyle();
BaseColor color = listSymbol.getFont().getColor();
Font font = new Font(baseFont, size, style, color);
listStyled.getSymbol().setFont(font);
return listStyled;
}
}
修改后,此 CssApplier 将另一种字体应用于列表符号。虽然我没有看到如何取回列表项的字体...
然后,人们可以轻松地集成它。
CssAppliersImpl cssAppliers = new CssAppliersImpl(fontProvider);
BaseFont baseFont = BaseFont.createFont("./fonts/arial.ttf", "utf-8", true);
cssAppliers.putCssApplier(List.class, new CustomListStyleTypeCssApplier(fontProvider, baseFont));
只要我们不关心符号的字体,我们就可以忍受这种解决方法......