3

我有一个程序在 C# 中使用 PDFsharp 手动生成 PDF。虽然它相当乏味,但我必须使用它并且即将完成任务。只剩下一个问题。

问题:我想知道如何找出 Arial 中给定字体大小的给定字符的宽度。

我无法想出更精确的文本换行方法。现在定义一个以像素为单位的框的宽度,然后继续在该框中写出一个字符串。我只是猜测可以放入盒子的字符串的最大长度,并且不时会出现一些视觉上的奇怪现象。

有什么帮助吗?

谢谢

4

3 回答 3

7

从您的问题中,我不确定您是否想要一种专门使用 PDF# 来测量字符串大小的方法,或者只是一种通用方法。

在一般.Net 中,您可以使用类的MeasureText方法TextRenderer(来自 Windows 窗体):

TextRenderer.MeasureText("some text", new Font("Arial", 1.0f, FontStyle.Regular))

这将返回一个Size包含Width=12, Height=2.

于 2009-11-12T23:52:13.213 回答
5

在带有字距调整等的 True Type 字体的时代,没有单一的字符宽度。字符串“VA”的宽度可能小于字符串“V”和“A”的宽度之和。如果单个字符是起点,则总结宽度 - 但最后您必须测量完整的字符串。

PDFsharp 包括执行此换行的类 XTextFormatter(带有完整源代码)。它可以根据特定要求进行调整。它用于gfx.MeasureString(token, this.font).Width测量字符串的宽度。

于 2009-11-16T09:10:07.273 回答
1

XGraphics.MeasureString(string s, Font f) 可以解决问题。

  //l_Page is of type PdfPage

  var l_Graphics = XGraphics.FromPdfPage( l_Page );
  var l_TitleFont = new Font( "Arial", 15f, GraphicsUnit.World )
  var l_Title = "Hallo Welt";
  //l_TitleSize will be of type XSize and has properties for Width and Height
  var l_TitleSize = l_Graphics.MeasureString( l_Title, l_TitleFont );
于 2010-10-14T09:57:40.777 回答