2010-09-15 3 views
12

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

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

Спасибо!

+1

Пожалуйста объяснить технические причины, почему вы не можете обновить до версии, которая поддерживает функции, которые вы требуете. –

ответ

13

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

редактирования: Пример

//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 
+0

Похоже, что это ТОЛЬКО ТОЧНО, что мне нужно, но будет ли граница заполнять всю страницу или только идти до конца, что находится в абзаце? - Мне в основном нужна линия, которая идет с одной стороны страницы на другую. –

+0

Дал вам пример, как это сделать в Редактировании выше. Я просто написал это здесь, поэтому не кричите, когда вы обнаружите синтаксические ошибки. Ключевой частью является просмотр myTable.setWidthPercentage(). Это относится к родительскому элементу. Предполагая, что вы добавили это в объект Document, у вас есть таблица, растягивающая 100% документа. – Sean

+0

Это именно то, что я искал! Спасибо, игра. :-) –

7

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

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

hehehe ... Я искал именно этот, то есть добавлял 'LineSeparator' к' PdfContentByte'. РАБОТАЕТ ЛЕЧЕНИЕ! :) –

5

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

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

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

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

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

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

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

0

Я нашел, что это наиболее близко напоминает 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)

Смежные вопросы