Запись в DirectContent с ColumnText не обновляет PdfDocument.GetVerticalPosition - PullRequest
1 голос
/ 28 октября 2009

Я использую ITextSharp для создания PDF, и возникла ситуация, когда необходимо использовать DirectContent через ColumnText.

Проблема в том, что после записи текста через объект 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?

Мне кажется, что вы не можете использовать PdfDocument. Добавьте после добавления содержимого в DirectContent, если текущая позиция Y в документе не может быть обновлена ​​или не обновляется автоматически.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2009

К сожалению, невозможно манипулировать полем currentHeight документа. Поэтому, когда вы вставляете абсолютно позиционированный объект с помощью DirectContent, вы не можете «принудительно» вставить следующий контент, добавленный в документ, после контента с абсолютным позиционированием.

Кажется, что единственный способ - это самостоятельно отслеживать вертикальное положение и добавлять абсолютно весь контент.

0 голосов
/ 02 ноября 2011

Вы можете следовать за вашим текстовым объектом столбца с многоколоночным текстовым объектом Затем вы поместите все оставшиеся объекты документа в объект 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);
...