Границы ячеек iText прорезают текст

Я пишу программу, которая создает файл pdf или rtf с таблицей в нем, используя iText. Я использовал таблицу и ячейку класса iText, а не более конкретные RtfTable или pdfTable, чтобы в конце можно было сгенерировать любой файл. Мне нужно было установить для заполнения ячейки значение -1, иначе между каждой строкой данных на печатном листе было слишком много места. Однако сейчас я пытаюсь добавить границы (конкретно в файл pdf), и ячейки не совпадают с текстом. Нижняя граница каждой ячейки проходит прямо через текст. На самом деле он окружает текст только в том случае, если для заполнения ячейки установлено значение 2 или выше. Ниже приведен пример того, что я делаю:

  Document document = new Document();
  Paragraph paragraph = new Paragraph();
  Font iTextFont = new Font(Font.TIMES_ROMAN, 9, Font.NORMAL);
  try{
    PdfWriter.getInstance(document, new FileOutputStream("C:/datafiles/TestiText.pdf"));
    document.open();

    Table table = new Table(3);
    table.setPadding(-1);
    table.setWidth(90);
    Cell cell1 = new Cell();
    cell1.setBorder(Rectangle.BOX);
    cell1.setVerticalAlignment(ElementTags.ALIGN_TOP);
    table.setDefaultCell(cell1);
    paragraph = new Paragraph("header", iTextFont);
    Cell cell = new Cell(paragraph);
    cell.setHeader(true);
    cell.setColspan(3);
    table.addCell(cell);
    paragraph = new Paragraph("example cell", iTextFont);
    table.addCell(paragraph);
    paragraph = new Paragraph("one", iTextFont);
            table.addCell(cell);
    paragraph = new Paragraph("two", iTextFont);
    cell = new Cell(paragraph);
    table.addCell(paragraph);
    paragraph = new Paragraph("Does this start a new row?", iTextFont);
    table.addCell(paragraph);
    paragraph = new Paragraph("Four", iTextFont);
    table.addCell(paragraph);
    paragraph = new Paragraph("Five", iTextFont);
    table.addCell(paragraph);
    document.add(table);
  } catch (Exception e) {
    //handle exception
  }
  document.close();

  }

Есть ли способ решить эту проблему, либо переместив всю границу вниз (не влияя на размещение текста), либо избавившись от пробелов между каждой строкой (интервал кажется проблемой только над текстом, а не ниже) без установки заполнения ячейки на -1?


person twpc    schedule 12.06.2009    source источник
comment
Вы нашли решение этой проблемы? У меня те же проблемы. Я хочу, чтобы мои ячейки были менее высокими, что, по-видимому, вызвано отступом, но когда я уменьшаю отступ, текст прорезает нижнюю границу.   -  person Michael Klement    schedule 08.09.2009
comment
Неважно, я перешел на PdfPTable, и теперь все в порядке. Поскольку я создаю только PDF-файлы, этого решения для меня достаточно.   -  person Michael Klement    schedule 08.09.2009
comment
пожалуйста, добавьте импортированные библиотеки в вас java, я пытался реализовать ваш пример, предоставьте полный класс   -  person shareef    schedule 26.06.2012


Ответы (2)


Напишите класс или общие методы для построения таблицы — независимо от того, используете ли вы Table или PdfPTable.

Эти методы будут обрабатывать стандартное выравнивание, измерение на основе восходящих/нисходящих элементов и т. д. Они также предоставляют общее место для добавления «пустого абзаца 3pt» или любого другого стандартного форматирования, которое может вам понадобиться.

Программное обеспечение объектно-ориентированного программирования не предназначено для того, чтобы выбрасывать повторяющиеся и потенциально противоречивые участки кода.

Надеюсь это поможет.

person Thomas W    schedule 03.09.2012

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

Организация содержимого в таблицах
Вывод в формате PDF

import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class Spacing {

    /** The resulting PDF file. */
    public static final String RESULT = "results/part1/chapter04/spacing.pdf";

    /**
     * Main method.
     * @param    args    no arguments needed
     * @throws DocumentException 
     * @throws IOException
     */
    public static void main(String[] args)
        throws DocumentException, IOException {
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        // step 3
        document.open();
        // step 4
        PdfPTable table = new PdfPTable(2);
        table.setWidthPercentage(100);
        Phrase p = new Phrase(
            "Dr. iText or: How I Learned to Stop Worrying " +
            "and Love the Portable Document Format.");
        PdfPCell cell = new PdfPCell(p);
        table.addCell("default leading / spacing");
        table.addCell(cell);
        table.addCell("absolute leading: 20");
        cell.setLeading(20f, 0f);
        table.addCell(cell);
        table.addCell("absolute leading: 3; relative leading: 1.2");
        cell.setLeading(3f, 1.2f);
        table.addCell(cell);
        table.addCell("absolute leading: 0; relative leading: 1.2");
        cell.setLeading(0f, 1.2f);
        table.addCell(cell);
        table.addCell("no leading at all");
        cell.setLeading(0f, 0f);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase(
            "Dr. iText or: How I Learned to Stop Worrying and Love PDF"));
        table.addCell("padding 10");
        cell.setPadding(10);
        table.addCell(cell);
        table.addCell("padding 0");
        cell.setPadding(0);
        table.addCell(cell);
        table.addCell("different padding for left, right, top and bottom");
        cell.setPaddingLeft(20);
        cell.setPaddingRight(50);
        cell.setPaddingTop(0);
        cell.setPaddingBottom(5);
        table.addCell(cell);
        p = new Phrase("iText in Action Second Edition");
        table.getDefaultCell().setPadding(2);
        table.getDefaultCell().setUseAscender(false);
        table.getDefaultCell().setUseDescender(false);
        table.addCell("padding 2; no ascender, no descender");
        table.addCell(p);
        table.getDefaultCell().setUseAscender(true);
        table.getDefaultCell().setUseDescender(false);
        table.addCell("padding 2; ascender, no descender");
        table.addCell(p);
        table.getDefaultCell().setUseAscender(false);
        table.getDefaultCell().setUseDescender(true);
        table.addCell("padding 2; descender, no ascender");
        table.addCell(p);
        table.getDefaultCell().setUseAscender(true);
        table.getDefaultCell().setUseDescender(true);
        table.addCell("padding 2; ascender and descender");
        cell.setPadding(2);
        cell.setUseAscender(true);
        cell.setUseDescender(true);
        table.addCell(p);
        document.add(table);
        // step 5
        document.close();
    }
}
person shareef    schedule 20.06.2012