Hoxe imos ver a ITEXT unha biblioteca PDF en Java que nos permite crear, analizar, modificar e manter documentos No formato PDF ITEXT non se usa só por Java tamén se usa en .NET, Android e GAE para proporcionar as súas aplicacións con PDF.
Que itext ofrécenos?
ITEXT é unha biblioteca PDF que nos permite crear, adaptar, revisar e manter documentos no formato de documento PDF, algunhas das características principais son:
- Xerar documentos e informes extraídos dun ficheiro XML ou unha base de datos
- Crear mapas e libros, incorporando características interactivas en formato PDF
- Engadir marcadores, números de páxina, marcas de auga, e outras características para os documentos PDF existentes
Dividir ou concatenar as páxinas dos ficheiros PDF existentes - cubrir formularios interactivos.
- Server xerado dinamicamente ou manipular documentos PDF nun navegador web.
Java ITEXT PDF – Creación dun PDF en Java con ITEXT
- Engadir as librerías e Cre clase de máster
- Creando o documento e metadatos
- Creamos a nosa primeira páxina
- Engadir máis elementos de ITEXT ao noso PDF
- Uso de táboas en ITEXT: PDFPTable
- resultado final (código completo)
- documentación usada
software e ferramentas usadas
- netbeans
- java
- itext pdf
Engadir as librerías e crear a clase
Comezaremos a descargar a última versión desta biblioteca, pode acceder a SourceForge ou descargalo desde esta ligazón: Descarga desde ITEXT desde SourceForge.
Creamos o proxecto
Para este proxecto imos usar NetBeans que proporcionan un gran apoio para o desenvolvemento de aplicacións con Java.
Abrimos NetBeans e buscamos a nova opción de proxecto, cando o asistente abrise Java > aplicación Java, entón só lle daremos un nome ao noso proxecto e á súa UBIC ization.
Pode usar calquera outro IDE para Java, todo o que realmente necesitará é engadir as bibliotecas ITEXT.
Creamos clase
para crear un Nova clase que estamos no proxecto e no menú emerxente seleccionamos Novo > clase Java, alí presentaremos o nome da clase e do paquete onde queremos localizar, No meu caso:
- Nome da clase: generatepdffileitxt.java
- Paquete: org.xulescode.Itxt
Este código ten como obxectivo ser o máis sinxelo posible, polo que imos poñer todo o código dentro do método: Public Vich CreatePDF (Ficheiro PDFNewFile) para poder seguir como un script a medida que creamos un documento PDF e unha variable fonte e unha localización para unha imaxe que vou Use no exemplo:
package org.xulescode.itext;import com.itextpdf.*;import java.io.*; /** * Example of using the iText library to work with PDF documents on Java, * lets you create, analyze, modify and maintain documents in this format. * Ejemplo de uso de la librería iText para trabajar con documentos PDF en Java, * nos permite crear, analizar, modificar y mantener documentos en este formato. * * @author xules You can follow me on my website http://www.codigoxules.org/en * Puedes seguirme en mi web http://www.codigoxules.org */public class GeneratePDFFileIText { private static final Font chapterFont = FontFactory.getFont(FontFactory.HELVETICA, 26, Font.BOLDITALIC); private static final Font paragraphFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL); private static final Font categoryFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD); private static final Font subcategoryFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD); private static final Font blueFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL, BaseColor.RED); private static final Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); private static final String iTextExampleImage = "/home/xules/codigoxules/iText-Example-image.png"; /** * We create a PDF document with iText using different elements to learn * to use this library. * Creamos un documento PDF con iText usando diferentes elementos para aprender * a usar esta librería. * @param pdfNewFile <code>String</code> * pdf File we are going to write. * Fichero pdf en el que vamos a escribir. */ public void createPDF(File pdfNewFile) { // Aquí introduciremos el código para crear el PDF. }}
Creación do documento e metadatos
Neste Primeiro paso con Java ITEXT PDF Necesitamos crear un documento para traballar con el e engadilo As distintas páxinas que necesitamos para o noso exemplo: documento documento = Novo documento (), unha vez creado, asociaremos o documento de traballo co ficheiro de saída, isto faise co método com.Itilxtpdf.text.pdf.pdfwriter, este é O código que necesitamos:
// We create the document and set the file name. // Creamos el documento e indicamos el nombre del fichero. try { Document document = new Document(); try { PdfWriter.getInstance(document, new FileOutputStream(pdfNewFile)); } catch (FileNotFoundException fileNotFoundException) { System.out.println("No such file was found to generate the PDF " + "(No se encontró el fichero para generar el pdf)" + fileNotFoundException); } document.open(); // AQUÍ COMPLETAREMOS NUESTRO CÓDIGO PARA GENERAR EL PDF document.close(); System.out.println("Your PDF file has been generated!(¡Se ha generado tu hoja PDF!"); } catch (DocumentException documentException) { System.out.println("The file not exists (Se ha producido un error al generar un documento): " + documentException); }
Agora imos engadir información ao noso documento creado con Java ITEXT PDF introducindo os metadatos, estes engádense directamente aos valores Do documento previamente definido: documento:
// We add metadata to PDF // Añadimos los metadatos del PDF document.addTitle("Table export to PDF (Exportamos la tabla a PDF)"); document.addSubject("Using iText (usando iText)"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Código Xules"); document.addCreator("Código Xules");
Creamos a nosa primeira páxina
Para a creación da primeira páxina usaremos os elementos xerais:
- com.Itilxtpdf.text.chunk: a parte máis pequena que se pode engadir a un documento, a maioría dos elementos poden ser divididos en varios anacos e basicamente é unha cadea cunha fonte dada.
- com.Itilxtpdf.text.image: Representación gráfica de imaxes que podemos usar: JPEG, PNG ou GIF.
- com.Itilxtpdf.text.parag: é unha serie de anacos.
e o elemento com.Itilxtpdf.text.chapter que usamos para engadir unha sección especial e iso é Onde imos colgar neste exemplo os elementos mencionados anteriormente, podes consultar no código:
Engade máis elementos de ITEXT ao noso PDF
Agora simplemente engadimos algúns elementos á nosa nova páxina para manter a proba de elementos, ante todo creamos un novo capítulo ao que estamos nomeados usando com.Itilxtpdf.text.Parágrafo, tamén creamos outro que engadiremos a continuación:
// Second page - some elements // Segunda página - Algunos elementos Chapter chapSecond = new Chapter(new Paragraph(new Anchor("Some elements (Añadimos varios elementos)")), 1); Paragraph paragraphS = new Paragraph("Do it by Xules (Realizado por Xules)", subcategoryFont);
Para mostrar que moitas cousas poden facerse engadimos un exemplo de como subliñar un parágrafo con Unha liña de puntos, exemplo tomado do blog Java ITEXT PDF, e en que se usa o elemento com.Ipxtpdf.text.pdf.draw.dottedline.pdf.draw.dottedlineseporator que atrae unha liña de esquerda a dereita:
// Underline a paragraph by iText (subrayando un párrafo por iText) Paragraph paragraphE = new Paragraph("This line will be underlined with a dotted line (Está línea será subrayada con una línea de puntos)."); DottedLineSeparator dottedline = new DottedLineSeparator(); dottedline.setOffset(-2); dottedline.setGap(2f); paragraphE.add(dottedline); chapSecond.addSection(paragraphE);
Para facer un exemplo sinxelo de listas engadimos desde o exemplo: Exemplos de lista de ITEXT, simplemente para mostrar un exemplo de uso e ver o sinxelo que é executar com .Iitxtpdf.text.list:
Ao final, non podemos esquecer engadir o noso código ao documento con documento.Add (…).
Usando táboas en ITEXT: PDFVerable
Nesta sección centrámonos no uso de com.Ipextpdf.text.pdf.pdficiente creando un Nova páxina, que se converterá en varios como veremos, por lonxitude da táboa que implicaremos para ver a operación de com.Ipextpdf.text.pdf.pdfptable.
Primeiro de todo no código Engadimos varios elementos para engadir título e subtítulos, que non vou explicar máis porque usamos elementos previamente explicados e para máis detalles que pode velo directamente no código.
Imos centrarme en com.IpxtPDF.Text .pdf.pdfptable que é un elemento que nos permite crear unha táboa cuxa posición pode ser absoluta, pero tamén se pode engadir directamente ao documento. Neste exemplo, simplemente engadimos texto, pero será moi útil para cubrir, por exemplo, cos datos obtidos da base de datos.
Os pasos que seguimos co seguinte e pode consultalos no código:
- Creamos a táboa: Táboa PDFPLABLE = Novo PDFPTable (Numcolumns);
- Engadir as pestanas da táboa: columnheader = Novo PDFPCELL (nova frase (“col” + columna);
- Nós enchemos o contido da táboa cun to bucle engadindo cada cela co código: table.Addcell (“liña” + fila + “- col” + columna;
- Finalmente, imos engadir a táboa ao documento, engadiuno neste caso (non ten que ser así) ao parágrafo que creamos ao comezo para que vaia a continuación.
Este é o código:
// How to use PdfPTable // Utilización de PdfPTable // We use various elements to add title and subtitle // Usamos varios elementos para añadir título y subtítulo Anchor anchor = new Anchor("Table export to PDF (Exportamos la tabla a PDF)", categoryFont); anchor.setName("Table export to PDF (Exportamos la tabla a PDF)"); Chapter chapTitle = new Chapter(new Paragraph(anchor), 1); Paragraph paragraph = new Paragraph("Do it by Xules (Realizado por Xules)", subcategoryFont); Section paragraphMore = chapTitle.addSection(paragraph); paragraphMore.add(new Paragraph("This is a simple example (Este es un ejemplo sencillo)")); Integer numColumns = 6; Integer numRows = 120; // We create the table (Creamos la tabla). PdfPTable table = new PdfPTable(numColumns); // Now we fill the PDF table // Ahora llenamos la tabla del PDF PdfPCell columnHeader; // Fill table rows (rellenamos las filas de la tabla). for (int column = 0; column < numColumns; column++) { columnHeader = new PdfPCell(new Phrase("COL " + column)); columnHeader.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(columnHeader); } table.setHeaderRows(1); // Fill table rows (rellenamos las filas de la tabla). for (int row = 0; row < numRows; row++) { for (int column = 0; column < numColumns; column++) { table.addCell("Row " + row + " - Col" + column); } } // We add the table (Añadimos la tabla) paragraphMore.add(table); // We add the paragraph with the table (Añadimos el elemento con la tabla). document.add(chapTitle); document.close(); System.out.println("Your PDF file has been generated!(¡Se ha generado tu hoja PDF!");
resultado final (código completo)
Xa completamos o noso código para xerar un PDF con Iexext, agora só temos que executalo desde o noso método principal:
/** * @param args the command line arguments */ public static void main(String args) { GeneratePDFFileIText generatePDFFileIText = new GeneratePDFFileIText(); generatePDFFileIText.createPDF(new File("/home/xules/codigoxules/GeneratePDFFileIText.pdf")); }
en A ligazón Pode descargar o código completo deste exemplo:
Xeración dun PDF de Java con ITEXT
Ademais, podes ver o código completo directamente:
package org.xulescode.itext;import com.itextpdf.text.Anchor;import com.itextpdf.text.BadElementException;import com.itextpdf.text.BaseColor;import com.itextpdf.text.Chapter;import com.itextpdf.text.Chunk;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Element;import com.itextpdf.text.Font;import com.itextpdf.text.FontFactory;import com.itextpdf.text.Image;import com.itextpdf.text.List;import com.itextpdf.text.ListItem;import com.itextpdf.text.Paragraph;import com.itextpdf.text.Phrase;import com.itextpdf.text.Section;import com.itextpdf.text.pdf.PdfPCell;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.text.pdf.draw.DottedLineSeparator;import java.io.*; /** * Example of using the iText library to work with PDF documents on Java, * lets you create, analyze, modify and maintain documents in this format. * Ejemplo de uso de la librería iText para trabajar con documentos PDF en Java, * nos permite crear, analizar, modificar y mantener documentos en este formato. * * @author xules You can follow me on my website http://www.codigoxules.org/en * Puedes seguirme en mi web http://www.codigoxules.org */public class GeneratePDFFileIText { // Fonts definitions (Definición de fuentes). private static final Font chapterFont = FontFactory.getFont(FontFactory.HELVETICA, 26, Font.BOLDITALIC); private static final Font paragraphFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL); private static final Font categoryFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD); private static final Font subcategoryFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD); private static final Font blueFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL, BaseColor.RED); private static final Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); private static final String iTextExampleImage = "/home/xules/codigoxules/iText-Example-image.png"; /** * We create a PDF document with iText using different elements to learn * to use this library. * Creamos un documento PDF con iText usando diferentes elementos para aprender * a usar esta librería. * @param pdfNewFile <code>String</code> * pdf File we are going to write. * Fichero pdf en el que vamos a escribir. */ public void createPDF(File pdfNewFile) { // We create the document and set the file name. // Creamos el documento e indicamos el nombre del fichero. try { Document document = new Document(); try { PdfWriter.getInstance(document, new FileOutputStream(pdfNewFile)); } catch (FileNotFoundException fileNotFoundException) { System.out.println("No such file was found to generate the PDF " + "(No se encontró el fichero para generar el pdf)" + fileNotFoundException); } document.open(); // We add metadata to PDF // Añadimos los metadatos del PDF document.addTitle("Table export to PDF (Exportamos la tabla a PDF)"); document.addSubject("Using iText (usando iText)"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Código Xules"); document.addCreator("Código Xules"); // First page // Primera página Chunk chunk = new Chunk("This is the title", chapterFont); chunk.setBackground(BaseColor.GRAY); // Let's create de first Chapter (Creemos el primer capítulo) Chapter chapter = new Chapter(new Paragraph(chunk), 1); chapter.setNumberDepth(0); chapter.add(new Paragraph("This is the paragraph", paragraphFont)); // We add an image (Añadimos una imagen) Image image; try { image = Image.getInstance(iTextExampleImage); image.setAbsolutePosition(2, 150); chapter.add(image); } catch (BadElementException ex) { System.out.println("Image BadElementException" + ex); } catch (IOException ex) { System.out.println("Image IOException " + ex); } document.add(chapter); // Second page - some elements // Segunda página - Algunos elementos Chapter chapSecond = new Chapter(new Paragraph(new Anchor("Some elements (Añadimos varios elementos)")), 1); Paragraph paragraphS = new Paragraph("Do it by Xules (Realizado por Xules)", subcategoryFont); // Underline a paragraph by iText (subrayando un párrafo por iText) Paragraph paragraphE = new Paragraph("This line will be underlined with a dotted line (Está línea será subrayada con una línea de puntos)."); DottedLineSeparator dottedline = new DottedLineSeparator(); dottedline.setOffset(-2); dottedline.setGap(2f); paragraphE.add(dottedline); chapSecond.addSection(paragraphE); Section paragraphMoreS = chapSecond.addSection(paragraphS); // List by iText (listas por iText) String text = "test 1 2 3 "; for (int i = 0; i < 5; i++) { text = text + text; } List list = new List(List.UNORDERED); ListItem item = new ListItem(text); item.setAlignment(Element.ALIGN_JUSTIFIED); list.add(item); text = "a b c align "; for (int i = 0; i < 5; i++) { text = text + text; } item = new ListItem(text); item.setAlignment(Element.ALIGN_JUSTIFIED); list.add(item); text = "supercalifragilisticexpialidocious "; for (int i = 0; i < 3; i++) { text = text + text; } item = new ListItem(text); item.setAlignment(Element.ALIGN_JUSTIFIED); list.add(item); paragraphMoreS.add(list); document.add(chapSecond); // How to use PdfPTable // Utilización de PdfPTable // We use various elements to add title and subtitle // Usamos varios elementos para añadir título y subtítulo Anchor anchor = new Anchor("Table export to PDF (Exportamos la tabla a PDF)", categoryFont); anchor.setName("Table export to PDF (Exportamos la tabla a PDF)"); Chapter chapTitle = new Chapter(new Paragraph(anchor), 1); Paragraph paragraph = new Paragraph("Do it by Xules (Realizado por Xules)", subcategoryFont); Section paragraphMore = chapTitle.addSection(paragraph); paragraphMore.add(new Paragraph("This is a simple example (Este es un ejemplo sencillo)")); Integer numColumns = 6; Integer numRows = 120; // We create the table (Creamos la tabla). PdfPTable table = new PdfPTable(numColumns); // Now we fill the PDF table // Ahora llenamos la tabla del PDF PdfPCell columnHeader; // Fill table rows (rellenamos las filas de la tabla). for (int column = 0; column < numColumns; column++) { columnHeader = new PdfPCell(new Phrase("COL " + column)); columnHeader.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(columnHeader); } table.setHeaderRows(1); // Fill table rows (rellenamos las filas de la tabla). for (int row = 0; row < numRows; row++) { for (int column = 0; column < numColumns; column++) { table.addCell("Row " + row + " - Col" + column); } } // We add the table (Añadimos la tabla) paragraphMore.add(table); // We add the paragraph with the table (Añadimos el elemento con la tabla). document.add(chapTitle); document.close(); System.out.println("Your PDF file has been generated!(¡Se ha generado tu hoja PDF!"); } catch (DocumentException documentException) { System.out.println("The file not exists (Se ha producido un error al generar un documento): " + documentException); } } /** * @param args the command line arguments */ public static void main(String args) { GeneratePDFFileIText generatePDFFileIText = new GeneratePDFFileIText(); generatePDFFileIText.createPDF(new File("/home/xules/codigoxules/GeneratePDFFileIText.pdf")); }}
Este é o PDF que se obtén como un resultado final deste exemplo:
icon