2


0

C#でPDFsharpを使用して手動でPDFを生成するプログラムがあります。 それはかなり面倒ですが、私はそれを使用しなければならず、タスクの完了に近づいています。 1つだけ問題が残っています。

問題:Arialで特定のフォントサイズに対する特定のcharの幅がどのようにしてわかるのか疑問に思います。

より正確なテキストの折り返し方法を考え出すのに苦労しています。 現在、ボックスの幅をピクセル単位で定義してから、そのボックスに文字列を書き出します。 私はちょっと箱に収まることができる弦の最大の長さを推測するだけであり、時々生じるいくつかの視覚的な奇妙な点があります。

何か手助け?

ありがとう

3 Answer


7


あなたの質問からは、特にPDF#を使って文字列のサイズを測る方法が欲しいのか、それとも一般的な方法がほしいのかわかりません。

通常、.NETでは、http:// msdnの MeasureTextメソッドを使用できます。 microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx [TextRenderer]クラス(Windowsフォームから):

TextRenderer.MeasureText( "いくつかのテキスト"、新しいフォント( "Arial"、1.0f、FontStyle.Regular))

これは、 Width = 12、Height = 2`を含む Size`インスタンスを返します。


5


カーニングなどのTrue Typeフォントの時代には 単一の文字幅はありません。 文字列 "VA"の幅は、文字列 "V"と "A"の幅の合計よりおそらく小さいです。 個々の文字が出発点である場合は幅を合計する - しかし最後にあなたは完全な文字列を測定しなければならない。

PDFsharpには、この行の折り返しを行うクラスXTextFormatter(完全なソースコード付き)が含まれています。 特定の要件に合わせて調整できます。 文字列の幅を測定するのに `gfx.MeasureString(token、this.font).Width`を使います。


1


XGraphics.MeasureString(文字列s、フォントf)がうまくいきます。

// l_PageはPdfPage型です

var l_Graphics = XGraphics.FromPdfPage(l_Page); var l_TitleFont = new Font( "Arial"、15f、GraphicsUnit.World)var l_Title = "Hallo Welt"; // l_TitleSizeはXSize型で、WidthおよびHeightのプロパティを持ちます。var l_TitleSize = l_Graphics.MeasureString(l_Title、l_TitleFont);