C# doc TextFrame中的度量字符串

C# doc TextFrame中的度量字符串,c#,asp.net,migradoc,C#,Asp.net,Migradoc,我已经试着在他们的论坛上问过这个问题,但还没有收到回复,希望有人能在这里帮助我 我在asp.net中设置了一个自定义报告屏幕,人们可以在其中拖动标签和字段,Migradoc通过使用textframes和top/left/width/height属性将它们放置在拖动/调整大小的相同位置来相应地生成这些内容。这一切都很好,但我有一个问题是,如果文本比文本框长,它会离开页面,我需要页面相应地移动,同时保留其他对象 我可以使用以下代码来测量字符串: Style style = document.Styl

我已经试着在他们的论坛上问过这个问题,但还没有收到回复,希望有人能在这里帮助我

我在asp.net中设置了一个自定义报告屏幕,人们可以在其中拖动标签和字段,Migradoc通过使用textframes和top/left/width/height属性将它们放置在拖动/调整大小的相同位置来相应地生成这些内容。这一切都很好,但我有一个问题是,如果文本比文本框长,它会离开页面,我需要页面相应地移动,同时保留其他对象

我可以使用以下代码来测量字符串:

Style style = document.Styles["Normal"];
TextMeasurement tm = new TextMeasurement(style.Font.Clone());
float fh = tm.MeasureString(value, UnitType.Millimeter).Height;
float fw = tm.MeasureString(value, UnitType.Millimeter).Width;

但它只用于比较框架的宽度,而不是高度,因为如果放在一个较小的区域,它可能会有所不同。有人知道我如何根据绑定的宽度/高度值(即在文本框内)测量此字符串。

查看
XTextFormatter
类中的
CreateBlocks()
方法,以及它如何在循环中调用MeasureString以将文本拆分为多行

恐怕您必须自己实现这样一个循环

或者可以使用
DocumentRenderer
类的
PrepareDocument()
方法让MigraDoc完成工作,并在完成后查询维度

顺便说一句:以前在论坛上也有人问过类似的问题:

答案包括一些源代码。

一种简单的方法(使用I-like-the-old-stack-overflow的链接)是将添加到项目中,然后按如下方式计算文本的尺寸:

var wrapper = new PdfWordWrapper(g, contentWidth); //g is your XGraphics object

wrapper.Add("My text here", someFont, XBrushes.Black);
wrapper.Process();
var dimensions = wrapper.Size; //you can access .Height or .Width
//If you want to reuse the wrapper just call .Clear() and then .Add() again with some new text