В itextSharp (он же itext5) мы можем настраивать шрифт во всем переопределяющем методе GetFont в FontFactoryImp (выглядит как пример кода ниже), что означает, что каждый раз, когда механизм синтаксического анализа XHTML to PDF зацикливает тег, содержащий шрифт (связанный с цветом, size) получит шрифт правильно.
Хотя в itext7 я не могу найти способ переопределить GetFont (), поэтому я должен также включить 2 шрифта (шрифт обычный и полужирный). Таким образом, мой PDF-файл увеличится в два раза.
Это так ужасно.
Это код, который я пытался переопределить методом в itext 7, но он не влияет на
public class FontProviderFactory : DefaultFontProvider
{
private static readonly string FontPath = HttpContext.Current.Request.PhysicalApplicationPath + "Areas\\font\\msyh.ttf";
private readonly FontProgram _fontProgram;
public FontProviderFactory(): this(false, false, false)
{
}
public FontProviderFactory(
bool registerStandardPdfFonts,
bool registerShippedFreeFonts,
bool registerSystemFonts): base(registerStandardPdfFonts, registerShippedFreeFonts, registerSystemFonts)
{
_fontProgram = FontProgramFactory.CreateFont(FontPath);
AddFont(_fontProgram);
}
public override FontSelectorStrategy GetStrategy(string text, IList<string> fontFamilies, FontCharacteristics fc, FontSet additonalFonts)
{
//fc.SetBoldFlag(fc.GetFontWeight() == 700);
return new ComplexFontSelectorStrategy(text, GetFontSelector(fontFamilies, fc, additonalFonts), this, additonalFonts);
}
}
А затем код, который я использовал на itextSharp, и он прекрасно работает для меня
public class UnicodeFontFactory : FontFactoryImp
{
private static readonly string FontPath = HttpContext.Current.Request.PhysicalApplicationPath + "Areas\\font\\msyh.ttf";
private readonly BaseFont _baseFont;
public UnicodeFontFactory()
{
_baseFont = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true);
}
public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color, bool cached)
{
return new Font(_baseFont, size, style, color);
}
}