iTextSharp, позиционирование текста

#c# #pdf #itextsharp

#c# #PDF #itext

Вопрос:

Мы используем iTextSharp по причинам, которые я не понимаю, и у нас еще нет книги, и у меня есть досадная проблема, с которой я был бы признателен за помощь.

Я работаю с нижним колонтитулом и не могу выровнять его так, как я хочу.

Функция, которая у меня есть, принимает список строк, но обычно это 4 строки, которые мне нужны в строке каждая. Это не похоже на то, что itextsharp может обрабатывать строки с разрывами строк, так что это причина для списка.

Теперь это неправильно позиционируется для меня, первая строка выглядит нормально, но затем вторая строка немного длиннее и она наполовину выходит за пределы документа, как и третья строка, а четвертая даже не видна, даже если осталось 1 см свободного места.

Спасибо за помощь!

 public PdfTemplate AddPageText(IList<string> stringList, PdfWriter writer) 
{
    var cb = writer.DirectContent;
    PdfTemplate footerTemplate = cb.CreateTemplate(450, 120); //55);

    footerTemplate.BeginText();
    BaseFont bf2 = BaseFont.CreateFont(BaseFont.TIMES_ITALIC, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
    footerTemplate.SetFontAndSize(bf2, 9);
    footerTemplate.SetColorStroke(BaseColor.DARK_GRAY);
    footerTemplate.SetColorFill(BaseColor.GRAY);

    footerTemplate.SetLineWidth(3);
    footerTemplate.LineTo(50, footerTemplate.YTLM);

    int y = 10;
    foreach (string text in stringList)
    {
        float widthoftext = 500.0f - bf2.GetWidthPoint(text, 9);
        footerTemplate.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, text, widthoftext, 50 - y, 0);
        y  = y;
    }
    footerTemplate.EndText();

    return footerTemplate;

}
  

Ответ №1:

Если вы выполняете размещение строк и используете DirectContent, то вы несете ответственность за содержимое. В этом случае вам нужно будет вычислить прямоугольники строки и соответствующим образом обернуть.

Однако я бы предложил перейти к использованию таблицы с ячейками для текста. Таблицы переносят текст и обрабатывают некоторые проблемы, с которыми вы имеете дело.

Комментарии:

1. Я использую PageEvent для поиска onEndPage для добавления текста для каждой страницы, как мне создать таблицу и разместить ее там, где я хочу?

2. Посмотрите на WriteSelectedRows (это то, что я использую). Вот пример kuujinbo.info/cs/itext_img_hdr.aspx