在MigraDoc TextFrame中测量字符串

问题描述 投票:2回答:2

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

我在 asp.net 中设置了一个自定义报告屏幕,人们可以拖动标签和字段,Migradoc 通过使用 textframes 和 topleftwidthheight 属性将它们布置在拖动后的相同位置,从而产生相应的报告。这一切都很好,但是我有一个问题,如果文本比文本框长,它就会跑出页面,我需要页面相应地移动,同时保留其他对象的位置。

我可以使用下面的代码来测量一个字符串。

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;

但它只对比较宽度和框架有用,而不是高度,因为一旦放到一个较小的区域,它可能会有所不同。 有谁知道我如何能根据绑定的宽度高度值来测量这个字符串,即在文本框内。

c# asp.net migradoc
2个回答
1
投票

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

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

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

另外:之前在论坛上也有人问过类似的问题。http:/forum.pdfsharp.netviewtopic.php?p=3590#p3590。 答案包括一些源代码。


0
投票

一个简单的方法(使用I-liked-the-old-stack-overflow的链接)是在源代码中添加了 PdfWordWrapper类 到您的项目中,然后计算您的文本尺寸,如下所示。

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
© www.soinside.com 2019 - 2024. All rights reserved.