Как я могу правильно переопределить метод GetStrategy в iText 7 для .Net (C #), похожий на метод GetFont в itextSharp (он же itext 5)? - PullRequest
0 голосов
/ 02 октября 2019

В 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);
        }
    }
...