PDFsharp - 较新版本中缺少 XStringFormatFlags

PDFsharp - XStringFormatFlags missing in newer version

我目前正在进行的一个项目使用了 MigraDoc 和 PDFsharp。到目前为止,它使用最新的稳定版本 1.32.2608,但我们正在尝试迁移到更新的预发布版本(因为连接项目使用 1.50.4619-beta4c)。几乎一切看起来都很好,但有一件事我不确定如何解决。
有一个测量字符串大小的函数,寻找(简单地说)一些关于它的东西:

protected SSize GetSize(string text, MigraDoc.DocumentObjectModel.Font font)
{
  var doc = new PdfDocument();
  var page = doc.AddPage;
  var sizer = XGraphics.FromPdfPage(page);
  var style = XFontStyle.Regular;
  //some style checks

  var xf = new XFont(font.Name, font.Size, style);
  var st = new XStringFormat();
  st.FormatFlags = XStringFormatFlags.MeasureTrailingSpaces;
  var xs = sizer.MeasureString(text, xf, st);
  return new SSize {
    Height = XUnit.FromPoint(xs.Height * _measureCorrection).Centimeter,
    Width = XUnit.FromPoint(xs.Width * _measureCorrection).Centimeter
  };
}

有问题的行是:

st.FormatFlags = XStringFormatFlags.MeasureTrailingSpaces;

因为 XStringFormat 丢失了 FormatFlags 属性,并且不再有 XStringFormatFlags 枚举。 有没有人有类似的经验并且可以提供线索,如何将其正确转换为新版本?

在官方 PDFsharp 论坛上,您可以找到 TextMeasurement class 的实现,它似乎比上面的代码片段更有效:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3196 您的代码创建一个新的 PDF 文档和一个新的 PDF 页面只是为了测量一个字符串 - 对于每个字符串。

处理尾随 spaces:

  • 一个选项是分别测量 spaces - 测量 "X X" 和 "XX" 并将差值用作 space.
  • 的宽度
  • 或将 "X" 附加到每个字符串并在之后减去 "X" 的宽度以获得尾随 space 的字符串的宽度。

您可以从TextMeasurement class开始,在class中分别保存"X"或“”的宽度,以获得更高效的实现。