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