簡體   English   中英

省略號或使用PDFsharp包裝

[英]Ellipsis or wrapping with PDFsharp

有沒有一種方法可以將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"; 它會寫入整個字符串,並繼續經過矩形外部的右側邊緣。

PDFsharp是開源的,因此總有一種方法。

XTextFormatter類是作為示例提供的,可以幫助您入門。 您可以更改該類以添加省略號或在其他字符處中斷。

PDFsharp被創建為MigraDoc的工具。 如果您不想處理換行符和分頁符,也許MigraDoc對您來說是一個更好的解決方案。 XTextFormatter類故意缺少您在MigraDoc中發現的許多功能。

我最終要做的是實現一種用於限制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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM