PDFsharp-较新版本缺少XStringFormatFlags

时间:2018-12-14 12:13:57

标签: c# .net pdfsharp migradoc

我当前正在处理的项目使用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枚举。 有没有人有任何类似的经验并且可以提供线索,如何将其正确地转换为新版本?

1 个答案:

答案 0 :(得分:0)

在PDFsharp官方论坛上,您可以找到/k类的这种实现,该实现似乎比上面的代码段更有效:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3196 您的代码将创建一个新的PDF文档和一个新的PDF页面,仅用于测量一个字符串-每个字符串。

要处理尾随空格:

  • 一种选择是分别测量空间-测量“ X X”和“ XX”,并将差值用作空间的宽度。
  • 或将“ X”附加到每个字符串,然后减去“ X”的宽度,以得到带尾部空格的字符串的宽度。

您可以开始使用TextMeasurement类,并在该类内部分别保存“ X”或“”的宽度,以获得更有效的实现。