1

ITextSharpを使用してPDFを生成していて、ColumnTextを介してDirectContentを使用する必要がある状況があります。

問題は、ColumnTextオブジェクトを介してテキストを書き込んだ後、PdfDocument.GetVerticalPositionが更新されていないことです。失敗する次のテストを参照してください。

    public void TestGetVerticalPositionIsUpdated()
    {
        PdfContentByte cb = Writer.DirectContent;
        var columnText = new ColumnText(cb);

        float position1 = Writer.GetVerticalPosition(true);
        columnText.SetSimpleColumn(Document.Left,
                                   Document.Bottom, 
                                   Document.Right, 
                                   position1, 
                                   0, 
                                   Element.ALIGN_JUSTIFIED);

        columnText.AddText(new Phrase("Test test test test test\nTest test test test test"));
        columnText.Go();

        float position2 = Writer.GetVerticalPosition(true);
        Assert.AreEqual(position1, position2);
    }

とにかく、ライターまたはドキュメントのいずれかに、ドキュメントのcurrentHeightを更新するように指示することはできますか。

明白な解決策は、PdfDocument.SetVerticalPositionが存在する場合にのみ使用することでした:-)

それとも、DirectContentを使用するという概念全体を誤解していますか?

ドキュメントの現在のY位置を更新できない場合、または自動的に更新されない場合、DirectContentにコンテンツを追加した後、PdfDocument.Addを使用できないようです。

4

2 に答える 2

3

残念ながら、ドキュメントのcurrentHeightフィールドを操作することはできません。したがって、DirectContentを使用して絶対位置のオブジェクトを挿入する場合、絶対位置のコンテンツの後に挿入されるようにドキュメントに追加された次のコンテンツを「強制」することはできません。

自分で垂直位置を追跡し、すべてのコンテンツを絶対に追加するのが唯一の方法のようです。

于 2009-11-07T21:10:44.463 に答える
0

列テキストオブジェクトの後に複数列テキストオブジェクトを続けることができます。次に、残りのすべてのドキュメントオブジェクトをmctオブジェクトに配置します。

var mct = new MultiColumnText(yBottomOfColumnText, MultiColumnText.AUTOMATIC);
mct.AddSimpleColumn(doc.Left, doc.Right); //creates one column
for (int i = 0; i < 100; i++)
{
    mct.AddElement(new Paragraph("Test Paragaph Goes HEREEEEEEEE")); //repeats 100 times for test purposes
}

doc.Add(mct);
于 2011-11-01T22:14:00.773 に答える