Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Integral; import com.itextpdf.text.BaseColor; 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.Image; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfPageEventHelper; import com.itextpdf.text.pdf.PdfWriter; import java.awt.Desktop; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.RandomAccessFile; import javax.swing.JFrame; import javax.swing.JOptionPane; /** * * @author I.S.C Salvador */ public class PDF { private Document document; public PdfWriter writer; public PdfContentByte contenido; public String ruta; public HeaderFooter even; public static String autoriza1 = "", autoriza2 = ""; public PDF() { try { ruta = ""; FileReader f = new FileReader("config.txt"); BufferedReader b = new BufferedReader(f); if ((ruta = b.readLine()) == null) ruta = ""; b.close(); } catch (IOException e) { e.printStackTrace(); } } public void estatusAutoriza(String aut, String aut1) { autoriza1 = aut; autoriza2 = aut1; } /** * Abre un documento nuevo para escribir un pdf * @param tamanio Tamao de la hoja. * @param titulo Titulo del documento. * @param nombre nombre del documento con el que se guardara. * @return "true" si fue correcto "false" si hay error. */ public boolean Abrir(Rectangle tamanio, String titulo, String nombre) { try { String[] aux = nombre.split("/"); String valor = ""; for (int x = 0; x < aux.length - 1; x++) valor += aux[x] + "/"; File folder = new File(ruta + valor); folder.mkdirs(); document = new Document(); document.setPageSize(tamanio); //document.setMargins(10f, 10f, 80f, 80f); document.addTitle(titulo); writer = PdfWriter.getInstance(document, new FileOutputStream(ruta + nombre)); if (titulo.compareToIgnoreCase("cabecera") == 0) { HeaderFooter event = new HeaderFooter(); writer.setPageEvent(event); } document.open(); contenido = writer.getDirectContent(); return true; } catch (DocumentException | FileNotFoundException e) { return false; } } public boolean Abrir2(Rectangle tamanio, String titulo, String nombre) { try { document = new Document(); document.setPageSize(tamanio); //document.setMargins(10f, 10f, 80f, 80f); document.addTitle(titulo); writer = PdfWriter.getInstance(document, new FileOutputStream(nombre)); if (titulo.compareToIgnoreCase("cabecera") == 0) { HeaderFooter event = new HeaderFooter(); writer.setPageEvent(event); } document.open(); contenido = writer.getDirectContent(); return true; } catch (DocumentException | FileNotFoundException e) { return false; } } /** * Cierra un documento abierto de tipo pdf * @return "true" si se pudo cerrar "false" so hay error. */ public boolean cerrar() { try { document.close(); return true; } catch (Exception e) { System.out.println(e); return false; } } /** * Inicia documento para escribir en el. * @return "true" si no hay error de lo contrario retorna "false" */ public boolean inicioTexto() { try { contenido.beginText(); return true; } catch (Exception e) { return false; } } /** * Finaliza documeto para escribir texto en el. * @return "true" si no hay error de lo contrario retorna "false" */ public boolean finTexto() { try { contenido.endText(); contenido.stroke(); contenido.closePathFillStroke(); return true; } catch (Exception e) { return false; } } /** * Permite agregar texto a un documento * @param texto Cadena a escribir * @param fuente tipo de fuente * @param color color del texto * @param tamanio tamao de la fuente * @param x posision en x para escribir el texto * @param y posision en y para escribir el texto * @return */ public boolean texto(String texto, BaseFont fuente, BaseColor color, int tamanio, int x, int y) { try { contenido.setFontAndSize(fuente, tamanio); contenido.setColorFill(color); contenido.setTextMatrix(x, y); contenido.showText(texto); return true; } catch (Exception e) { return false; } } public boolean parrafo(String texto, Font fuente, int alineacion) { try { Paragraph parrafo = new Paragraph(texto, fuente); parrafo.setAlignment(alineacion); document.add(parrafo); return true; } catch (Exception e) { return false; } } public boolean texto(String texto, BaseFont fuente, BaseColor color, int tamanio, int x, int y, int rotacion) { try { contenido.setFontAndSize(fuente, tamanio); contenido.setColorFill(color); contenido.setTextMatrix(x, y); //contenido.showText(texto); contenido.showTextAligned(0, texto, x, y, rotacion); return true; } catch (Exception e) { return false; } } /** * Manda un documento a la impresora * @param archivo nombre del archivo * @return "true" si no hay error de lo contrario retorna "false" */ public boolean imprimir(String archivo) { try { Desktop.getDesktop().print(new File(ruta + archivo)); return true; } catch (IOException e) { System.out.println(e); return false; } } /** * Abre un archivo con el programa predeterminado para visualizar * @param archivo nombre del archivo * @return "true" si no hay error de lo contrario retorna "false" */ public boolean visualizar(String archivo) { try { File arch = new File(ruta + archivo); Desktop.getDesktop().open(arch.getAbsoluteFile()); return true; } catch (IOException e) { JOptionPane.showMessageDialog(new JFrame(), "no se pudo encontrar el archivo" + e); return false; } } public boolean visualizar2(String archivo) { try { File arch = new File(archivo); Desktop.getDesktop().open(arch.getAbsoluteFile()); return true; } catch (IOException e) { JOptionPane.showMessageDialog(new JFrame(), "no se pudo encontrar el archivo" + e); return false; } } /** * Crea una objeto de tipo tabla * @param columnas numero de columnas * @param tamanio Tamao de las columnas * @param porcentaje proporcion de la tabla deacuerdo a la hoja. * @param alineacion alineacion de la tabla respecto a la hoja * @return */ public PdfPTable crearTabla(int columnas, float tamanio[], int porcentaje, int alineacion) { try { PdfPTable table = new PdfPTable(columnas); table.setWidths(tamanio); table.setWidthPercentage(porcentaje); table.setHorizontalAlignment(alineacion); return table; } catch (DocumentException e) { System.out.println(e); return null; } } /** * crea una celda con una imagen adentro para una tabla * @param img imagen a incluir en la celda * @param color fondo de la celda * @param alineacion alineacion del contenido de la celda * @param expandirCol expandir la celda x columnas ej:3 junta la celda y 2 mas a la derecha * @param expandirRow Expandir la celda x renglones ej: 3 junta la celda y 2 mas hacia abajo * @param borde tipo de borde de la celda * @return */ public PdfPCell celda(Image img, BaseColor color, int alineacion, int expandirCol, int expandirRow, int borde) { PdfPCell c1 = new PdfPCell(img); c1.setColspan(expandirCol); c1.setRowspan(expandirRow); c1.setBackgroundColor(color); c1.setHorizontalAlignment(alineacion); c1.setBorder(borde); return c1; } /** * crea una celda con texto adentro para una tabla * @param texto Texto que se va a incluir en la celda * @param font Fuente para el texto * @param color color del texto * @param alineacion alineacion del texto respecto a la celda * @param expandirCol expandir la celda x columnas ej:3 junta la celda y 2 mas a la derecha * @param expandirRow Expandir la celda x renglones ej: 3 junta la celda y 2 mas hacia abajo * @param borde tipo de borde de la celda * @return */ public PdfPCell celda(String texto, Font font, BaseColor color, int alineacion, int expandirCol, int expandirRow, int borde) { try { PdfPCell c1 = new PdfPCell(new Paragraph(new Chunk(texto, font))); c1.setColspan(expandirCol); c1.setRowspan(expandirRow); c1.setBackgroundColor(color); c1.setHorizontalAlignment(alineacion); c1.setBorder(borde); return c1; } catch (Exception e) { System.out.println(e); return null; } } /** * Agrega una tabla al documento. * @param table objeto de tipo PdfPTable * @return "true" si no hay error de lo contrario retorna "false" */ public boolean agregarTabla(PdfPTable table) { try { document.add(table); return true; } catch (DocumentException e) { System.out.println(e); return false; } } /** * Crea una imagen * @param img Ruta de la imagen * @return Retorna un objeto de tipo Image */ public Image Imagen(String img) { try { Image image = Image.getInstance(img); return image; } catch (Exception e) { return null; } } /** * Crea un objeto imagen de tipo Chunk * @param archivo Ruta de la imagen * @param x Posision en x para la imagen dentro del archivo * @param y Posision en y para la imagen dentro del archivo * @param escala escala de la imagen en porcentaje * @return Retorna una objeto de tipo Chunk */ public Chunk crearImagen(String archivo, int x, int y, int escala) { try { RandomAccessFile rf1 = new RandomAccessFile(ruta + archivo, "r"); int size1 = (int) rf1.length(); byte imagedata[] = new byte[size1]; rf1.readFully(imagedata); rf1.close(); Image img11 = Image.getInstance(imagedata); img11.scalePercent(escala); Chunk logo = new Chunk(img11, x, y); return logo; } catch (Exception e) { System.out.println(e); return null; } } /** * Crea un objeto imagen de tipo Chunk * @param archivo Ruta de la imagen * @param x Posision en x para la imagen dentro del archivo * @param y Posision en y para la imagen dentro del archivo * @param w_escala escala de la imagen en relacion horizontal * @param h_escala escala de la imagen en relacion a vertical * @param grados grados para girar la imagen * @return Retorna una objeto de tipo Chunk */ public Chunk crearImagen(String archivo, int x, int y, int w_escala, int h_escala, float grados) { try { RandomAccessFile rf1 = new RandomAccessFile(ruta + archivo, "r"); int size1 = (int) rf1.length(); byte imagedata[] = new byte[size1]; rf1.readFully(imagedata); rf1.close(); Image img11 = Image.getInstance(imagedata); img11.scaleAbsolute(w_escala, h_escala); img11.setRotationDegrees(grados); Chunk logo = new Chunk(img11, x, y); return logo; } catch (Exception e) { System.out.println(e); return null; } } /** * Agrega una imagen de tipo Chunk al documento * @param logo objeto que contiene la imagen de tipo Chunk * @return "true" si no hay error de lo contrario retorna "false" */ public boolean agregarImagen(Chunk logo) { try { document.add(logo); return true; } catch (DocumentException e) { System.out.println(e); return false; } } /** * Agrega elementos a un documento * @param obj Objeto de tipo Element a agregar * @return "true" si se pudo agregar de lo contrario retorna "false" */ public boolean agregaObjeto(Element obj) { try { document.add(obj); return true; } catch (DocumentException e) { System.out.println(e); e.printStackTrace(); return false; } } public static class HeaderFooter extends PdfPageEventHelper { public void onEndPage(PdfWriter writer, Document document) { Rectangle rect = writer.getBoxSize("art"); //Aqu definimos el encabezado de nuestro documento PDF //nicamente le ponemos nuestro nombre /*ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, new Phrase("Roberto Len Encabezado"), rect.getRight(), rect.getTop(), 0);*/ ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase("_____________________________"), 50, 30, 0); ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase("Solicita"), 120, 20, 0); ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase(autoriza1), 370, 40, 0); ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase(autoriza2), 370, 30, 0); ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase("_____________________________"), 370, 30, 0); ColumnText.showTextAligned(writer.getDirectContent(), PdfContentByte.ALIGN_LEFT, new Phrase("Autoriza"), 440, 20, 0); /*reporte.contenido.roundRectangle(50, 20, 180, 1, 0); reporte.contenido.showTextAligned(PdfContentByte.ALIGN_LEFT, "Solicita", 120, 10, 0); reporte.contenido.roundRectangle(370, 20, 180, 1, 0); reporte.contenido.showTextAligned(PdfContentByte.ALIGN_LEFT, "Autoriza", 440, 10, 0);*/ } } }