2009-11-12 87 views
2

我有一个程序,它使用C#中的PDFsharp手动生成PDF。虽然它很乏味,但我必须使用它,并且即将完成任务。只剩下一个问题。查找以像素为单位的各种Arial字体的字符宽度

问题:我想知道我怎么可以找出给定字符的宽度为宋体给定的字体大小。

我无法提出更精确的文本包装方法。现在,我们以像素为单位定义一个框的宽度,然后继续在该框中写出一个字符串。我只是猜测可以放在盒子里的字符串的最大长度,有时会出现一些视觉上的古怪。

任何帮助?

感谢

回答

4

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

PDFsharp包括执行此自动换行类XTextFormatter(提供完整的源代码)。它可以适应特定的要求。 它使用gfx.MeasureString(token, this.font).Width来测量字符串的宽度。

6

我不是从你的问题确定是否要使用专门的PDF#,或者只是一个通用的方法提供了一种衡量一个字符串的大小。

一般来说.NET中,可以使用TextRenderer类的MeasureText方法(从Windows窗体):

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

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

1

XGraphics.MeasureString(字符串s,字体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); 
相关问题