java - imagen - Bordes de celdas de iText cortando texto
java itext table (2)
Escriba una clase o métodos comunes para construir su tabla, ya sea que esté utilizando Tabla o PdfPTable.
Estos métodos manejarán la alineación estándar, la medición basada en ascendentes / descendentes, etc. para usted. También brindan un lugar común para agregar un "párrafo en blanco de 3 puntos" o cualquier otro formato estándar que pueda necesitar.
El software de OO no está destinado a tratar de repartir secciones de código repetitivas y potencialmente inconsistentes.
Espero que esto ayude.
Estoy escribiendo un programa que genera un archivo pdf o rtf con una tabla en él, usando iText. Utilicé la tabla y la celda de clase de iText, en lugar de la tabla de tabla de Rtf o la tabla de tabla más específica para que se pueda generar cualquiera de los archivos al final. Necesitaba establecer el relleno de celda en un valor de -1, o de lo contrario había demasiado espacio entre cada fila de datos en la hoja impresa. Sin embargo, ahora estoy tratando de agregar bordes (específicamente al archivo pdf), y las celdas no están alineadas con el texto. El borde inferior de cada celda corta directamente a través del texto. En realidad, solo rodea el texto cuando el relleno de celda se establece en 2 o superior. A continuación se muestra una muestra de lo que estoy haciendo:
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();
}
¿Hay alguna manera de resolver este problema moviendo todo el borde hacia abajo una gota (sin afectar la ubicación del texto) o eliminando los espacios entre cada línea (el espaciado parece ser un problema sobre el texto, no debajo) sin configurar el relleno de celda a -1?
debe usar PdfPTable
que tiene muchos métodos que son útiles y el componente está bien envuelto. PdfPTable
esta respuesta, por lo que cualquiera se enfrenta al mismo problema. Sabe dónde comenzar. Puede que no sea la respuesta típica a la pregunta, pero aquí viene ...
Organizar contenidos en tablas.
La salida de 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();
}
}