【问题标题】:Ellipsis or wrapping with PDFsharp省略号或使用 PDFsharp 换行
【发布时间】:2019-02-19 09:33:09
【问题描述】:

有没有办法将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"; 这样的字符串上,它会写入整个字符串并继续越过矩形外的右侧边缘。

【问题讨论】:

    标签: c# pdfsharp


    【解决方案1】:

    我最终做的是实现一种方法来限制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;
    }
    

    对方法的调用将是

    stringToPrint = GetFittedStringToPrint(gfx, font, rect, stringToPrint);
    

    【讨论】:

      【解决方案2】:

      PDFsharp 是开源的,所以总有办法。

      XTextFormatter 类作为示例提供,以帮助您入门。您可以更改该类以添加省略号或在其他字符处换行。

      PDFsharp 是作为 MigraDoc 的工具而创建的。如果您不想处理换行符和分页符,也许 MigraDoc 对您来说是一个更好的解决方案。 XTextFormatter 类故意缺少 MigraDoc 中的许多功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 2013-09-15
        • 1970-01-01
        • 2012-01-22
        • 2016-06-30
        相关资源
        最近更新 更多