我当前正在处理的项目使用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枚举。 有没有人有任何类似的经验并且可以提供线索,如何将其正确地转换为新版本?
答案 0 :(得分:0)
在PDFsharp官方论坛上,您可以找到/k
类的这种实现,该实现似乎比上面的代码段更有效:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3196
您的代码将创建一个新的PDF文档和一个新的PDF页面,仅用于测量一个字符串-每个字符串。
要处理尾随空格:
您可以开始使用TextMeasurement
类,并在该类内部分别保存“ X”或“”的宽度,以获得更有效的实现。