Das Schreiben in DirectContent mit ColumnText nicht aktualisiert PdfDocument.GetVerticalPosition

StackOverflow https://stackoverflow.com/questions/1637048

  •  06-07-2019
  •  | 
  •  

Frage

Im iTextSharp mit einem PDF zu generieren, und hat eine Situation, wo ein Bedarf DirectContent über eine ColumnText zu verwenden.

Das Problem ist, dass der Text über das ColumnText Objekt nach dem Schreiben wird die PdfDocument.GetVerticalPosition nicht aktualisiert? Siehe folgende Test, der fehlschlägt:

    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);
    }

Gibt es trotzdem entweder den Schriftsteller oder das Dokument zu sagen, die Dokumente currentHeight zu aktualisieren.

Die obvoius Lösung war PdfDocument.SetVerticalPosition zu verwenden, wenn es nur bestanden: -)

Oder bin ich Missverständnis das ganze Konzept der Verwendung DirectContent?

Es scheint mir, dass youre nicht in der Lage PdfDocument.Add zu verwenden, nachdem Sie Inhalte DirectContent hinzugefügt haben, wenn die aktuelle Y-Position auf dem Dokument nicht aktualisiert werden kann oder ist nicht aktualisiert automatisch.

War es hilfreich?

Lösung

Leider ist es nicht möglich, das currentHeight Feld des Dokuments zu manipulieren. Also, wenn Sie fügen Sie ein absolut positionierte Objekt mit DirectContent Sie können nicht „Kraft“ der nächste Inhalt dem Dokument hinzugefügt, nachdem der absolute positionierter Inhalt eingefügt werden.

Es ist scheint, dass der einzige Weg, den Überblick über die vertikale Position selbst zu halten ist, und fügen Sie alle Inhalte absolut.

Andere Tipps

Sie können Ihre Spalte Textobjekt mit einem Multicolumn Objekt folgen. Sie würden dann alle verbleibenden Dokumentobjekte in das mct Objekt platzieren.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top