是否可以将DrawString
限制为指定的矩形?如果不适合,我希望字符串被截断(最好用省略号“ ...”)。
从有关StackOverflow和反复试验的其他问题中,我已经能够使PDFsharp包裹文本,但仅当文本包含空格时。
var stringToPrint = "m m m m m m m m m m m m";
var temp = gfx.MeasureString(stringToPrint, font);
var rect = new XRect(new XPoint(leftMargin + leftPush, topMargin + topPush),
new XPoint(leftMargin + page.Width / 2, topMargin + temp.Height));
var tf = new XTextFormatter(gfx);
gfx.DrawRectangle(XBrushes.Red, rect);
tf.DrawString(stringToPrint, font, XBrushes.Black, rect, topLeftStringFormat);
上面的代码有效,但是正如我所说,仅当字符串包含空格时。在像var stringToPrint = "mmmmmmmmmmmm";
这样的字符串上,它将写入整个字符串并继续经过矩形外部的右侧边缘。
答案 0 :(得分:0)
PDFsharp是开源的,因此总有一种方法。
XTextFormatter
类作为示例提供,帮助您入门。您可以更改该类以添加省略号或在其他字符处中断。
PDFsharp被创建为MigraDoc的工具。如果您不想处理换行符和分页符,也许MigraDoc对您来说是一个更好的解决方案。 XTextFormatter
类故意缺乏您在MigraDoc中发现的许多功能。
答案 1 :(得分:0)
我最终要做的是实现一种限制TreeView
长度的方法,以使其适合矩形内部。我可以通过测量内容的宽度,然后一次截断一个字符直到适合为止来做到这一点。
stringToPrint
对该方法的调用应为
private static string GetFittedStringToPrint(XGraphics gfx, XFont font, XRect rect,
string input)
{
var output = input;
var stringMeasurement = gfx.MeasureString(input, font);
if (stringMeasurement.Width > rect.Width)
{
var inputMinusOneChar = input;
do
{
inputMinusOneChar = inputMinusOneChar.Substring(0, inputMinusOneChar.Length - 1).Trim();
stringMeasurement = gfx.MeasureString(inputMinusOneChar + '…', font);
} while (stringMeasurement.Width > rect.Width);
output = inputMinusOneChar + '…';
}
return output;
}