我已经尝试在他们的论坛上提问,但尚未收到答复,希望有人可以在这里帮助我。

我在asp.net中设置了一个自定义报告屏幕,人们可以在其中拖动标签和字段,而Migradoc通过使用文本框和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;


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

最佳答案

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

恐怕您必须自己实现这样的循环。

或者,可以使用PrepareDocument()类的DocumentRenderer方法让MigraDoc进行工作,并在完成后仅查询尺寸。

顺便说一句:在论坛上曾经问过类似的问题:
http://forum.pdfsharp.net/viewtopic.php?p=3590#p3590
答案包括一些源代码。

关于c# - 在MigraDoc TextFrame中测量字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26883653/

10-11 05:26