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