XTextFormatter
类。当打印需要自动换行的块时,此类是一个救星。但我的问题是:如果我需要打印多个段落怎么办?如何确定刚刚打印的段落底部在哪里?
XTextFormatter.DrawString()
返回
void
,所以它没有告诉我它下降了多远。并且不存在接受新 Y 位置或矩形的重载。唯一相似的属性
LayoutRectangle
,仅包含我传递给
DrawString()
的矩形。并且
XTextFormatter
没有
MeasureString()
方法。那么如何打印多个段落,一个就在前一个段落的下面呢?
XTextFormatter
类的作者选择不公开此信息,并将当前 Y 位置保留在该类内部。幸运的是,PDFsharp 和 PdfSharpCore 都是开源的。您可以下载
XTextFormatter
代码并根据自己的喜好进行调整。或者您可以从本讨论中的版本开始工作。
你可以自己计算一下,例如:
double maxWidth = page.Width - 40;
var rect = new XRect(x_coordinate, y_coordinate, maxWidth, page.Height);
var tf = new XTextFormatter(gfx);
tf.DrawString(item.Value, font_regular, XBrushes.Black, rect, XStringFormats.TopLeft);
numberOfRows = ((text.Length * font.Size / maxWidth);
y_coordinate += numberOfRows * 10
您可以获得行数,然后可以将其与所需的偏移量相乘并将其添加到 y_coordinate 变量中。以我的例子来说,我想为每行新文本将 y_坐标增加 10。