如何使用XTextFormatter打印多个段落

问题描述 投票:0回答:2
PDFsharp 和 PdfSharpCore 都提供

XTextFormatter

 类。当打印需要自动换行的块时,此类是一个救星。

但我的问题是:如果我需要打印多个段落怎么办?如何确定刚刚打印的段落底部在哪里?

XTextFormatter.DrawString()

 返回 
void
,所以它没有告诉我它下降了多远。并且不存在接受新 Y 位置或矩形的重载。唯一相似的属性 
LayoutRectangle
,仅包含我传递给 
DrawString()
 的矩形。并且 
XTextFormatter
 没有 
MeasureString()
 方法。

那么如何打印多个段落,一个就在前一个段落的下面呢?

c# .net-6.0 pdfsharp pdfsharpcore
2个回答
0
投票
答案是不支持。令人惊讶的是,

XTextFormatter

类的作者选择不公开此信息,并将当前 Y 位置保留在该类内部。

幸运的是,PDFsharp 和 PdfSharpCore 都是开源的。您可以下载

XTextFormatter

 代码并根据自己的喜好进行调整。或者您可以从
本讨论中的版本开始工作。


0
投票
有点晚了,但到目前为止还没有答案。

你可以自己计算一下,例如:

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。

© www.soinside.com 2019 - 2024. All rights reserved.