我已经尝试在他们的论坛上提出这个问题但尚未收到回复,希望有人可以帮助我。
我在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;
但它仅用于比较宽度与框架而不是高度,因为一旦放入较小的区域,它可能会有所不同。有没有人知道如何根据绑定的宽度/高度值(即在文本框架内)测量此字符串。
答案 0 :(得分:1)
查看CreateBlocks()
类中的XTextFormatter
方法以及它如何在循环中调用MeasureString以将文本分成多行。
我担心你必须自己实施这样的循环。
或者也许可以使用PrepareDocument()
类的DocumentRenderer
方法让MigraDoc完成工作,并在完成后查询维度。
答案 1 :(得分:0)
执行此操作的一种简单方法(使用I-like-the-old-stack-overflow的链接)是将PdfWordWrapper class添加到项目中,然后按如下所示计算文本的尺寸:
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