Fonts 我们可以更改iText默认字体(Helvetica)吗?
我正在使用iText将HTML转换为PDF/a兼容的PDF文件。PDF/A要求嵌入字体 当iText解析HTML时,它通过在每个列表项之前添加列表符号来处理HTML列表。符号块不定义其字体,因此默认情况下将被赋予Helvetica(在Fonts 我们可以更改iText默认字体(Helvetica)吗?,fonts,itext,Fonts,Itext,我正在使用iText将HTML转换为PDF/a兼容的PDF文件。PDF/A要求嵌入字体 当iText解析HTML时,它通过在每个列表项之前添加列表符号来处理HTML列表。符号块不定义其字体,因此默认情况下将被赋予Helvetica(在font::getCalculatedBaseFont中) 这是一个巨大的问题,因为字体必须嵌入Helvetica。PDF文件似乎强制使用Helvetica 有办法解决这个问题吗? 我发现了,但它需要修改源代码。经过一些研究,似乎可以绕过这个限制,至少对于列表是这样
font::getCalculatedBaseFont
中)
这是一个巨大的问题,因为字体必须嵌入Helvetica。PDF文件似乎强制使用Helvetica
有办法解决这个问题吗?我发现了,但它需要修改源代码。经过一些研究,似乎可以绕过这个限制,至少对于列表是这样 我们应该扩展类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));
只要我们不在乎符号的字体,我们就可以接受这种解决方法……公共列表应用(最终列表列表、最终标记t、最终边缘内存、最终页面大小可访问psc、最终HtmlPipelineContext上下文)
此方法的签名似乎无效