我有一个程序在 C# 中使用 PDFsharp 手动生成 PDF。虽然它相当乏味,但我必须使用它并且即将完成任务。只剩下一个问题。
问题:我想知道如何找出 Arial 中给定字体大小的给定字符的宽度。
我无法想出更精确的文本换行方法。现在定义一个以像素为单位的框的宽度,然后继续在该框中写出一个字符串。我只是猜测可以放入盒子的字符串的最大长度,并且不时会出现一些视觉上的奇怪现象。
有什么帮助吗?
谢谢
从您的问题中,我不确定您是否想要一种专门使用 PDF# 来测量字符串大小的方法,或者只是一种通用方法。
在一般.Net 中,您可以使用类的MeasureText
方法TextRenderer
(来自 Windows 窗体):
TextRenderer.MeasureText("some text", new Font("Arial", 1.0f, FontStyle.Regular))
这将返回一个Size
包含Width=12, Height=2
.
在带有字距调整等的 True Type 字体的时代,没有单一的字符宽度。字符串“VA”的宽度可能小于字符串“V”和“A”的宽度之和。如果单个字符是起点,则总结宽度 - 但最后您必须测量完整的字符串。
PDFsharp 包括执行此换行的类 XTextFormatter(带有完整源代码)。它可以根据特定要求进行调整。它用于gfx.MeasureString(token, this.font).Width
测量字符串的宽度。
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 );