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"或“”的宽度,以获得更高效的实现。
我目前正在进行的一个项目使用了 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"或“”的宽度,以获得更高效的实现。