Beispiel #1
0
 public TrueTypeFontHandler(ILog log, IPdfTokenScanner pdfScanner, ILookupFilterProvider filterProvider,
                            IEncodingReader encodingReader,
                            ISystemFontFinder systemFontFinder,
                            IFontHandler type1FontHandler)
 {
     this.log              = log;
     this.filterProvider   = filterProvider;
     this.encodingReader   = encodingReader;
     this.systemFontFinder = systemFontFinder;
     this.type1FontHandler = type1FontHandler;
     this.pdfScanner       = pdfScanner;
 }
 /// <summary>
 /// Default ctor WmlToHtmlConverterSettings
 /// </summary>
 /// <param name="pageTitle">Page title</param>
 public WmlToHtmlConverterSettings(string pageTitle)
 {
     AdditionalCss       = defaultAdditionalCss;
     GeneralCss          = defaultgeneralCss;
     PageTitle           = pageTitle ?? string.Empty;
     FabricateCssClasses = true;
     CssClassPrefix      = defaultCssClassPrefix;
     ImageHandler        = new ImageHandler();
     TextHandler         = new TextDummyHandler();
     SymbolHandler       = new SymbolHandler();
     BreakHandler        = new BreakHandler();
     FontHandler         = new FontHandler();
 }
 /// <summary>
 /// Ctor WmlToHtmlConverterSettings
 /// </summary>
 /// <param name="pageTitle">Page title</param>
 /// <param name="customImageHandler">Handler used to convert open XML images to HTML images</param>
 /// <param name="textHandler">Handler used to convert open XML text to HTML compatible text</param>
 /// <param name="symbolHandler">Handler used to convert open XML symbols to HTML compatible text</param>
 /// <param name="breakHandler">Handler used to convert open XML breaks to HTML equivalent</param>
 /// <param name="fontHandler">Handler used translate open XML fonts to HTML equivalent</param>
 /// <param name="fabricateCssClasses">Set to true, if CSS style should be stored in classes instead of an inline attribute on each node</param>
 /// <param name="generalCss">Optional CSS, default is "span { white-space: pre-wrap; }"</param>
 /// <param name="additionalCss">Optional CSS, default is "body { margin: 1cm auto; max-width: 20cm; padding: 0; }"</param>
 /// <param name="cssClassPrefix">Optional CSS class name prefix, default is "pt-"</param>
 public WmlToHtmlConverterSettings(string pageTitle, IImageHandler customImageHandler, ITextHandler textHandler, ISymbolHandler symbolHandler, IBreakHandler breakHandler, IFontHandler fontHandler, bool fabricateCssClasses, string generalCss = defaultgeneralCss, string additionalCss = defaultAdditionalCss, string cssClassPrefix = defaultCssClassPrefix)
 {
     AdditionalCss       = additionalCss;
     GeneralCss          = generalCss;
     PageTitle           = pageTitle;
     FabricateCssClasses = fabricateCssClasses;
     CssClassPrefix      = cssClassPrefix;
     ImageHandler        = customImageHandler;
     TextHandler         = textHandler;
     SymbolHandler       = symbolHandler;
     BreakHandler        = breakHandler;
     FontHandler         = fontHandler;
 }
Beispiel #4
0
        private TrueTypeFont ParseTrueTypeFont(FontDescriptor descriptor, out IFontHandler actualHandler)
        {
            actualHandler = null;

            if (descriptor.FontFile == null)
            {
                try
                {
                    var ttf = systemFontFinder.GetTrueTypeFont(descriptor.FontName.Data);
                    return(ttf);
                }
                catch (Exception ex)
                {
                    log.Error($"Failed finding system font by name: {descriptor.FontName}.", ex);
                }

                return(null);
            }

            try
            {
                var fontFileStream = DirectObjectFinder.Get <StreamToken>(descriptor.FontFile.ObjectKey, pdfScanner);

                var fontFile = fontFileStream.Decode(filterProvider);

                if (descriptor.FontFile.FileType == DescriptorFontFile.FontFileType.FromSubtype)
                {
                    var shouldThrow = true;

                    if (fontFileStream.StreamDictionary.TryGet(NameToken.Subtype, pdfScanner, out NameToken subTypeName))
                    {
                        if (subTypeName == NameToken.Type1C)
                        {
                            actualHandler = type1FontHandler;
                            return(null);
                        }

                        if (subTypeName == NameToken.OpenType)
                        {
                            shouldThrow = false;
                        }
                    }

                    if (shouldThrow)
                    {
                        throw new InvalidFontFormatException(
                                  $"Expected a TrueType font in the TrueType font descriptor, instead it was {descriptor.FontFile.FileType}.");
                    }
                }

                var font = TrueTypeFontParser.Parse(new TrueTypeDataBytes(new ByteArrayInputBytes(fontFile)));

                return(font);
            }
            catch (Exception ex)
            {
                log.Error("Could not parse the TrueType font.", ex);

                return(null);
            }
        }
        private static WmlToHtmlConverterSettings CreateHtmlConverterSettings(string pageTitle, IImageHandler imageHandler, IFontHandler fontHandler)
        {
            var settings = new WmlToHtmlConverterSettings(pageTitle, imageHandler, new TextSymbolToUnicodeHandler(), new SymbolHandler(), new PageBreakHandler(new BreakHandler()), fontHandler, true, string.Empty, "@page { size: A4 } body { margin: 1cm auto; max-width: 20cm; padding: 0; }", "Codeuctivity-");

            return(settings);
        }