3

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

問題:Arialの特定のフォントサイズに対して、特定の文字の幅をどのように確認できるのか疑問に思っています。

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

何か助けはありますか?

ありがとう

4

3 に答える 3

7

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

MeasureText一般に、.Netでは、クラスのメソッドTextRenderer(Windowsフォームから)を使用できます。

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

Sizeこれにより、を含むインスタンスが返されますWidth=12, Height=2

于 2009-11-12T23:52:13.213 に答える
5

カーニングなどのTrueTypeフォントの時代には、1文字の幅はありません。文字列「VA」の幅は、文字列「V」と「A」の幅の合計よりもおそらく小さいでしょう。個々の文字が開始点である場合は幅を合計しますが、最後に文字列全体を測定する必要があります。

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

于 2009-11-16T09:10:07.273 に答える
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 );
于 2010-10-14T09:57:40.777 に答える