Разделитель строк в 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
Ответ 2
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));
Пример: iText в действии
Ответ 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 бесплатны для коммерческого использования и оплачиваются более новые версии.
Надеюсь, что это поможет!