Разделитель строк в iText?

Я пытаюсь вставить разделитель строк (вы знаете, ту горизонтальную линию, которая проходит через документы) в мой документ с iText. Я нашел некоторые ресурсы через Google, которые используют com.lowagie.text.pdf.draw.LineSeparator, но версия iText, которую я использую (1.4.2), похоже, не имеет этого пакета.

Может ли кто-нибудь предложить другой способ добавить хороший разделитель строк для моего pdf? И, пожалуйста, не говорите, обновите .jar-- Я заблокирован в 1.4.2.

Спасибо!

Ответ 1

В более ранних версиях iText существует немного беспорядочного пути. Если вы сохраните элемент над горизонтальной строкой в ​​PdfPCell, вы можете установить границу этого, чтобы отображать только нижнюю. (Эта ячейка также может быть пуста, если это необходимо)

PdfPCell myCell = new PdfPCell(new Paragraph("Hello World") );
myCell.setBorder(Rectangle.BOTTOM);

Результат должен выглядеть (сплошная линия, не клетчатая)

Hello World
-----------

Это должно дать вам то, что вы желаете. Не оптимальное решение, но это способ обойти ограничения старой банки.

Для справки, если вы хотите выполнить этот трюк, чтобы поместить строку сверху и ниже текста, чтобы получить результат

-----------
Hello World
-----------

Аргумент setBorder() - это int, для которого вы можете использовать побитовое действие для управления значениями. Таким образом, приведенный выше пример может быть выполнен с помощью

myCell.setBorder(Rectangle.BOTTOM | Rectangle.TOP);

edit: Пример

//Create the table which will be 2 Columns wide and make it 100% of the page
PdfPTable myTable = new PdfPtable(2);
myTable.setWidthPercentage(100.0f);

//create a 3 cells and add them to the table
PdfPCell cellOne = new PdfPCell(new Paragraph("Hello World"));
PdfPCell cellTwo = new PdfPCell(new Paragraph("Bottom Left"));
PdfPcell cellThree = new PdfPCell(new Paragraph("Bottom Right"));

cellOne.setColspan(2);
cellOne.setBorder(Rectangle.BOTTOM);
cellOne.setHorizontalAlignment(Element.ALIGN_LEFT);

cellTwo.setBorder(Rectangle.NO_BORDER);
cellTwo.setHorizontalAlignment(Element.ALIGN_LEFT);
cellThree.setBorder(Rectangle.LEFT);
cellThree.setHorizontalAlignment(Element.ALIGN_RIGHT);

//Add the three cells to the table
myTable.addCell(cellOne);
myTable.addCell(cellTwo);
myTable.addCell(cellThree);

//Do something to add the table to your root document

Это создаст вам таблицу, которая выглядит примерно так: (если вы исправите мои опечатки)

Hello World
------------------------------------
Bottom Left      |      Bottom Right

Ответ 3

Я также сторонник использования элементов Line, а не таблиц... не повторяйте ошибки форматирования HTML!

final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);

Ответ 4

Просто добавьте объект разделителя строк в документ-документ pdf. Это должно быть

LineSeparator objectName = new LineSeparator();              
document.add(objectName);

Ответ 5

table.setExtendLastRow(true);

сделает это!

Ответ 6

Решение, данное Sean, обеспечивает большую гибкость при работе с текстом, подчеркнутым разделителем строк. Я не знаю, может ли LineSeparator это сделать, кажется, это просто разделитель строк.

Paragraph ph = new Paragraph(new Phrase("My line separator", yourFont));
PdfPCell cell = new PdfPCell(ph);
cell.Border = Rectangle.BOTTOM_BORDER;
cell.BorderColor = new BaseColor(44, 67, 144);
cell.BorderWidth = 2f;

PdfPTable table = new PdfPTable(1);                
table.AddCell(cell);
table.HorizontalAlignment = Element.ALIGN_LEFT;
table.WidthPercentage = 100f;
doc.Add(table);

Надеюсь, это поможет. Должен напечатать что-то вроде этого. A line separator with text

Ответ 7

Простой способ, если вы хотите создать целую новую строку:

    document.add(Chunk.NEWLINE);
    LineSeparator ls = new LineSeparator();
    document.add(new Chunk(ls));

Ответ 8

Я также столкнулся с аналогичной проблемой, так как моя компания также использовала более старую версию iText, то есть 1.4.2. Это два решения, которые я предлагаю для создания горизонтального правила. Сначала используется Графическая и вторая таблица использования с нижней границей. Оба отлично подходят для меня.

Решение 1:

protected static final Graphic HR = new Graphic();
  static {
    HR.setHorizontalLine(1f, 100f, Color.BLACK);
  }

Решение 2:

    private static void addHorizontalLine(Document document, PdfWriter writer) throws DocumentException, IOException{
    PdfPTable myTable = new PdfPTable(1);
    myTable.setWidthPercentage(100.0f);
    PdfPCell cellOne = new PdfPCell();
    cellOne.setBorder(Rectangle.BOTTOM);
    document.add(new Paragraph(" "));
    document.add(myTable);
}

PS: Причина, по которой мы не можем обновить JAR, заключается в том, что более старые версии iText бесплатны для коммерческого использования и оплачиваются более новые версии.

Надеюсь, что это поможет!