3

XTextFormatter を使用するかどうかに関係なく、LayoutRectangle の高さが 0 である必要があるなどの同じエラーが発生します。

new PdfSharp.Drawing.Layout.XTextFormatter(_gfx).DrawString(text 
    , new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle) 
    , new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour)) 
    , new PdfSharp.Drawing.XRect(new PdfSharp.Drawing.XPoint(xPos, yPos), new PdfSharp.Drawing.XPoint(xLimit, yLimit)) 
    , PdfSharp.Drawing.XStringFormats.Default);

fontStyleは System.Drawing.FontStyle 型です foreColourは System.Drawing.Color 型ですOrientation = Landscape、Size = LetterのPdfPageから_gfxを既に定義していますxPosおよびyPosは double 型のパラメーターであり、xLimitおよびyLimitと同じです。


LayoutRectangle の高さはゼロ (0) でなければならないというランタイム エラーが発生します...


定義によれば、長方形は高さを持つことを意味します。それ以外の場合は、線と呼びます! 理解できません!...

XGraphics.DrawString()メソッドを直接試してみましたが、同じエラーが発生します。LayoutRectangle を使用できないようですが、テキストが目的の領域に手動で収まるように管理する必要があります。

var textFont = new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);

while (xPos + _gfx.MeasureString(text, textFont).Width > xLimit)
    textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);

while (yPos + _gfx.MeasureString(text, textFont).Height > yLimit && fontSize > 0)
    textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);

_gfx.DrawString(text
    , textFont
    , new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour))
    , new PdfSharp.Drawing.XPoint(xPos, yPos));

yPos 変数の値はまったく同じ値ですが!

*yPos = Page.Height * .4093、ページの高さの 40,93%。*

ここに私がやろうとしていることの例があります:

"こんにちは世界!" "こんにちは世界!"

そして、ここに私が得るものがあります:

                      "Hello World!" 

"こんにちは世界!"

また、印刷領域の制限やフォント サイズ、フォント スタイルが異なるため、正しい数のスペースを含む単純な 1 つの文にこれらを書き込めません。

4

2 に答える 2

9

エラーメッセージを正確に引用すると、他の人があなたを助けるのに役立ちます.

エラーメッセージは次のとおりです。

DrawString: XLineAlignment.BaseLine では、レイアウト四角形の高さは 0 でなければなりません。

テキストは一行に揃えられるため、高さは 0 でなければなりません。はい、それは行です。長方形を指定する場合は、別の位置合わせを使用してください。

このTextLayoutサンプルは、テキストをフォーマットする方法を示しています。

Graphics サンプルは、テキストをレイアウトする方法も示しています (1 行のテキスト、自動改行なし。TextLayoutサンプルで示されている手法は、クラスを使用して自動的に改行を処理しますXTextFormatter)。

于 2009-08-31T08:35:09.783 に答える