查找不同字号Arial字体的字符宽度(像素)

4
我有一个程序,使用C#中的PDFsharp手动生成PDF。虽然这相当繁琐,但我必须使用它,并且接近完成任务。只剩下一个问题。

问题:我想知道在Arial字体大小为多少时,给定字符的宽度是多少。

我正在努力寻找更精确的文本换行方法。现在,一个像素框的宽度被定义为盒子的宽度,然后在该盒子中写出一个字符串。我猜测能够适合于盒子中的字符串的最大长度,并且有些视觉上的怪异会不时出现。

有什么帮助吗?

谢谢

3个回答

7
我不确定你的问题是否想要一种使用PDF#特定来测量字符串大小的方法,还是一种通用的方法。
通常在.Net中,您可以使用Windows窗体中TextRenderer类的MeasureText方法:
TextRenderer.MeasureText("some text", new Font("Arial", 1.0f, FontStyle.Regular))

这将返回一个Size实例,其中包含Width=12, Height=2

6
在拥有字距调整等功能的 True Type 字体时,不存在单个字符宽度。例如字符串 "VA" 的宽度可能小于字符串 "V" 和 "A" 的宽度之和。总结各个字符的宽度是一个起点,但最终你需要测量完整的字符串。
PDFsharp 包含了 XTextFormatter 类(附带完整的源代码),它可以进行此行包装。它可以针对具体要求进行自适应。它使用 gfx.MeasureString(token, this.font).Width 来测量字符串的宽度。

2

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 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接