示例#1
0
        public OpenXmlSize MeasureText(IOpenXmlTextStyle defaultTextStyle, IOpenXmlTheme theme, OpenXmlUnit?width)
        {
            // TODO: subtract border
            // TODO: measure each pararaph individually

            int level = 1;
            IOpenXmlParagraphTextStyle defaultParagraphTextStyle = defaultTextStyle.GetParagraphTextStyle(level);

            string        text     = this.GetText();
            string        typeface = theme.ResolveFontTypeface(this.GetFont() ?? defaultParagraphTextStyle.LatinTypeface);
            double        fontSize = this.GetFontSize() ?? defaultParagraphTextStyle.Size ?? 9.0;
            double        kerning  = this.GetKerning() ?? defaultParagraphTextStyle.Kerning ?? 0.0;
            OpenXmlMargin margin   = this.GetTextMargin();

            Font font = SystemFonts.Find(typeface).CreateFont((float)fontSize);

            RendererOptions options = new RendererOptions(font, 72)
            {
                WrappingWidth = width.HasValue ? (float)(width.Value - margin.Left - margin.Right).AsPoints() : -1.0f,
                ApplyKerning  = kerning != 0.0,
                LineSpacing   = 1 / 1.2f
            };

            FontRectangle rect   = TextMeasurer.Measure(text, options);
            OpenXmlSize   result = new OpenXmlSize(
                width.HasValue ? width.Value : (OpenXmlUnit.Points(rect.Width) + margin.Left + margin.Right),
                OpenXmlUnit.Points(rect.Height * 1.2) + margin.Top + margin.Bottom
                );

            return(result);
        }
        public OpenXmlSize Measure()
        {
            IOpenXmlTheme     theme            = this.tableVisual.Container.Document.Theme;
            IOpenXmlTextStyle defaultTextStyle = this.tableVisual.Container.Document.DefaultTextStyle;

            int         column = this.GetColumnIndex();
            OpenXmlUnit width  = (this.tableVisual.Columns[column] as OpenXmlTableVisual.TableColumn).MeasureWidth();

            return(this.InternalText.MeasureText(defaultTextStyle, theme, width));
        }