Альтернатива для LineSeparator в старых версиях iText? - PullRequest
14 голосов
/ 15 сентября 2010

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

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

Спасибо!

Ответы [ 9 ]

27 голосов
/ 01 июня 2011
LineSeparator ls = new LineSeparator();
document.add(new Chunk(ls));

Пример: iText в действии

15 голосов
/ 15 сентября 2010

В более ранних версиях 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: Example

//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
8 голосов
/ 25 мая 2012

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

final LineSeparator lineSeparator = new LineSeparator();
lineSeparator.drawLine(pdfCB, leftX, rightX, y);
4 голосов
/ 01 декабря 2012

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

LineSeparator objectName = new LineSeparator();              
document.add(objectName);
2 голосов
/ 26 июля 2017

Я также столкнулся с аналогичной проблемой, так как моя компания также использовала более старую версию 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 бесплатен для коммерческого использования, а новые версии платные.

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

2 голосов
/ 09 ноября 2013

Решение, данное Шоном, обеспечивает большую гибкость при работе с текстом, подчеркнутым разделителем строк.Я не знаю, может ли 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

1 голос
/ 21 декабря 2011

table.setExtendLastRow(true);

сделает это!

0 голосов
/ 06 марта 2018

Я обнаружил, что это больше всего напоминает тег HTML <HR>:

import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.pdf.canvas.draw.SolidLine;
import com.itextpdf.layout.element.LineSeparator;

...

final SolidLine lineDrawer = new SolidLine(1f);
lineDrawer.setColor(Color.GRAY);
document.add(new LineSeparator(lineDrawer));

(iText 7.0.0)

0 голосов
/ 03 июня 2016

Простой способ, если вам нужна новая строка:

    document.add(Chunk.NEWLINE);
    LineSeparator ls = new LineSeparator();
    document.add(new Chunk(ls));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...