List of usage examples for org.apache.pdfbox.pdmodel PDDocument addPage
public void addPage(PDPage page)
From source file:dtlgenerator.myDataReader.java
public void PdfGenerator(String pdfFileNameBase, List<String> cycles) throws IOException, COSVisitorException { GlobalVar.dirMake(new File(pdfFileNameBase)); //create a folder with the same name int rowCount = 0; int pageCount = 1; PDPage page; //default size PAGE_SIZE_A4 PDPageContentStream stream;//from w w w.j a v a 2s . com //page.setRotation(90); //counterclock wise rotate 90 degree ////left hand rule // stream.setFont(PDType1Font.COURIER, FONT_SIZE); String lastUpdate = null; String lastCycle = null; System.out.println("DTL_DATA keyset:" + DTL_DATA.keySet()); System.out.println("Cycles empty? " + cycles.isEmpty()); System.out.println(cycles); for (String updateDate : DTL_DATA.keySet()) { Map<String, List<String>> thisDTData = DTL_DATA.get(updateDate); lastUpdate = updateDate; System.out.println("thisDT_DATA keyset:" + thisDTData.keySet()); for (String cycle : thisDTData.keySet()) { if (cycles.isEmpty() || cycles.contains(cycle)) { PDDocument pdf = new PDDocument(); lastCycle = cycle; List<String> thisCycle = thisDTData.get(cycle); pageCount = 1; // new cycle, restart page num page = new PDPage(); //page break stream = new PDPageContentStream(pdf, page, true, false); stream.beginText(); page.setRotation(PAGE_ROT_DEGREE); //stream.setFont(PDType1Font.COURIER, FONT_SIZE); addBigFontUpdateNumberAndCycle(updateDate, cycle, stream); stream.setFont(PDType1Font.COURIER, FONT_SIZE); // stream.setFont(PDType1Font. int thisCycleRowCount = 0; for (String row : thisCycle) { if (thisCycleRowCount > MAX_NUM_TRANS) { //close the current page setupFootNote(stream, pageCount, cycle, updateDate); pageCount++; stream.endText(); stream.close(); pdf.addPage(page); // start a new page page = new PDPage(); stream = new PDPageContentStream(pdf, page, true, false); page.setRotation(PAGE_ROT_DEGREE); stream.beginText(); stream.setFont(PDType1Font.COURIER, FONT_SIZE); thisCycleRowCount = 0; } stream.setTextRotation(TEXT_ROT_RAD, TRANS_X + thisCycleRowCount * INVERVAL_X, TRANS_Y); stream.drawString(row); thisCycleRowCount++; //System.out.println("Update:" + updateDate + " Cycle: " + cycle + " " + row); } setupFootNote(stream, pageCount, lastCycle, lastUpdate); stream.endText(); stream.close(); pdf.addPage(page); String pdfFileName = pdfFileNameBase + "\\DTL UPDT " + updateDate + " " + cycle + ".pdf"; pdf.save(pdfFileName); pdf.close(); } } } // pdf.save(pdfFileName); // pdf.close(); }
From source file:es.udc.fic.medregatas.util.PDFUtils.java
public static void printPDF(String docName) throws IOException, COSVisitorException { createPdfDirectoryIfNotExists();//from w ww. ja va 2 s .c om // Create a document and add a page to it PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page); // Create a new font object selecting one of the PDF base fonts PDFont font = PDType1Font.HELVETICA_BOLD; // Start a new content stream which will "hold" the to be created content PDPageContentStream contentStream = new PDPageContentStream(document, page); // Define a text content stream using the selected font, moving the // cursor and drawing the text "Hello World" contentStream.beginText(); contentStream.setFont(font, 12); contentStream.moveTextPositionByAmount(100, 700); contentStream.drawString("Hello World"); contentStream.endText(); // Make sure that the content stream is closed: contentStream.close(); // Save the results and ensure that the document is properly closed: document.save(PDFS_FOLDER + "/" + docName); document.close(); }
From source file:evadoc_splitter.pdfsplitter.java
private void split_report(Rectangle2D programa_area, Rectangle2D periodo_area, Rectangle2D id_area, Rectangle2D nombre_area, String type, int numberOfPages) { // pages = this.doc //crear hash id=>nombre que se guarda en la variable global del programa principal try {/*from w ww . j av a 2s . com*/ //iteracion n - 1 // Create a new empty document PDDocument document_to = new PDDocument(); //aadir la primera pagina PDPage page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(0); document_to.addPage(page_from); //obtener datos de la primera pagina String programa = get_text_by_area(programa_area, page_from, 1); String id = get_text_by_area(id_area, page_from, 0); String periodo = get_text_by_area(periodo_area, page_from, 2); String nombre = get_text_by_area(nombre_area, page_from, 0); String path = ""; String id_to_name; File folder; //si solo hay una pagina. if (numberOfPages == 1) { //document_to.save(type+"_"+programa+"_"+id+"_.pdf"); } //TODO: verificar que ninguno es vacio //iteracion n, se comprara n con n-1 //desde la segunda pagina verificar si el id es el mismo y terminar cuando cambie for (int i = 1; i < numberOfPages; i++) { page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(i); String id_next = get_text_by_area(id_area, page_from, i); //verificar si es hoja vacia //verificar que id_next sea igual que id if (id_next.equals(id)) { //si es igual al anterior aadir la pagina al documento document_to.addPage(page_from); } else { //momento para crear un hash, que relacione id con nombre, //con el fin de referenciar por id y no por nombre. set_id_name_hash(id, nombre); //actualizar relacion id => nombre // Save the newly created document //obtener nombre del id en cuestion: id_to_name = this.local_id_to_name.get(id); //verificar si esta disponible la informacion sobre la division if (this.has_division) { String division = this.local_programa_to_division.get(programa); // path = this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+periodo+"\\"+programa+"\\"+id_to_name; path = this.root + "RES_" + periodo + "\\" + division + "\\" + programa + "\\" + id_to_name; } else { // path = this.root+"Resultados_"+this.current_time + "\\" +programa+"\\"+periodo+"\\"+id_to_name; path = this.root + "RES_" + periodo + "\\" + programa + "\\" + id_to_name; } //create directory if not exist: folder = new File(path); if (!folder.exists()) { folder.mkdirs(); } document_to.save(path + "\\" + type + ".pdf"); //Preparacion para la siguiente iteracion //crear un nuevo documento document_to = new PDDocument(); //aadir la pagina encontrada que es diferente a la anterior page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(i); document_to.addPage(page_from); //obtener datos de la pagina id = get_text_by_area(id_area, page_from, i); while (id == null) { i++; page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(i); } id = get_text_by_area(id_area, page_from, i); programa = get_text_by_area(programa_area, page_from, i); periodo = get_text_by_area(periodo_area, page_from, i); nombre = get_text_by_area(nombre_area, page_from, i); set_id_name_hash(id, nombre); } //aadir el profesor de la ultima pagina } //:::::::ultima iteracion::::: //momento para crear un hash, que relacione id con nombre, //con el fin de referenciar por id y no por nombre. id_to_name = this.local_id_to_name.get(id); if (this.has_division) { String division = this.local_programa_to_division.get(programa); // path = this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+periodo+"\\"+programa+"\\"+id_to_name; path = this.root + "RES_" + periodo + "\\" + division + "\\" + programa + "\\" + id_to_name; } else { // path = this.root+"Resultados_"+this.current_time + "\\" +programa+"\\"+periodo+"\\"+id_to_name; path = this.root + "RES_" + periodo + "\\" + programa + "\\" + id_to_name; } folder = new File(path); //obtener nombre del id en cuestion: if (!folder.exists()) { folder.mkdirs(); } document_to.save(path + "\\" + type + ".pdf"); } catch (IOException ex) { Logger.getLogger(pdfsplitter.class.getName()).log(Level.SEVERE, null, ex); } catch (COSVisitorException ex) { Logger.getLogger(pdfsplitter.class.getName()).log(Level.SEVERE, null, ex); } //get periodo //get programa }
From source file:evadoc_splitter.pdfsplitter.java
private void split_report_consolidado_division(Rectangle2D region_div, Rectangle2D region_periodo, Rectangle2D region_programa, String type, int numberOfPages) { // pages = this.doc //crear hash id=>nombre que se guarda en la variable global del programa principal Rectangle2D next_region_programa = region_programa; try {// w w w .ja v a 2 s.c om //iteracion n - 1 // Create a new empty document PDDocument document_to = new PDDocument(); //aadir la primera pagina PDPage page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(0); document_to.addPage(page_from); //obtener datos de la primera pagina String division = get_text_by_area(region_div, page_from, 1); String periodo = get_text_by_area(region_periodo, page_from, 2); hash_programs(region_programa, page_from, division); //si solo hay una pagina. if (numberOfPages == 1) { //document_to.save(type+"_"+programa+"_"+id+"_.pdf"); } //TODO: verificar que ninguno es vacio //iteracion n, se comprara n con n-1 //desde la segunda pagina verificar si division es vacio o diferente y terminar cuando cambie for (int i = 1; i < numberOfPages; i++) { page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(i); String division_next = get_text_by_area(region_div, page_from, i); //verificar que div_next sea igual que div, o vacio, por que la hoja vacia hace parte de div if (division_next.equals(division) || division_next.equals("")) { //si es igual al anterior aadir la pagina al documento document_to.addPage(page_from); //obtener programas de las siguientes hojasn if (!division_next.equals("")) { //si es la hoja vacia no buscar programas. hash_programs(region_programa, page_from, division); } } else { //crear una estructura de resultados, division, periodo consolidado div. //File folder = new File(this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+"\\"+periodo+"\\"); File folder = new File("RES_" + periodo + "\\" + division + "\\"); if (!folder.exists()) { folder.mkdirs(); } // document_to.save(this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+"\\"+periodo+"\\"+type+".pdf"); document_to.save("RES_" + periodo + "\\" + division + "\\" + type + ".pdf"); //Preparacion para la siguiente iteracion //crear un nuevo documento document_to = new PDDocument(); //aadir la pagina encontrada que es diferente a la anterior page_from = (PDPage) this.document.getDocumentCatalog().getAllPages().get(i); document_to.addPage(page_from); //obtener datos de la pagina division = get_text_by_area(region_div, page_from, i); periodo = get_text_by_area(region_periodo, page_from, i); hash_programs(region_programa, page_from, division); } } //ultima iteracion //create directory if not exist: // File folder = new File(this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+periodo+"\\"); File folder = new File("RES_" + periodo + "\\" + division + "\\"); if (!folder.exists()) { folder.mkdirs(); } // document_to.save(this.root+"Resultados_"+this.current_time + "\\" +division+"\\"+periodo+"\\"+"\\"+type+".pdf"); document_to.save("RES_" + periodo + "\\" + division + "\\" + type + ".pdf"); } catch (IOException ex) { Logger.getLogger(pdfsplitter.class.getName()).log(Level.SEVERE, null, ex); } catch (COSVisitorException ex) { Logger.getLogger(pdfsplitter.class.getName()).log(Level.SEVERE, null, ex); } //get periodo //get programa }
From source file:fi.nls.oskari.printout.printing.pdfbox.UsingTextMatrix.java
License:Apache License
/** * creates a sample document with some text using a text matrix. * /*from ww w . j a va2 s .c o m*/ * @param message * The message to write in the file. * @param outfile * The resulting PDF. * * @throws IOException * If there is an error writing the data. * @throws COSVisitorException * If there is an error writing the PDF. */ public void doIt(String message, String outfile) throws IOException, COSVisitorException { // the document PDDocument doc = null; try { doc = new PDDocument(); // Page 1 PDFont font = PDType1Font.HELVETICA; PDPage page = new PDPage(); page.setMediaBox(PDPage.PAGE_SIZE_A4); doc.addPage(page); float fontSize = 12.0f; PDRectangle pageSize = page.findMediaBox(); System.err.println("pageSize " + pageSize); System.err.println( "pageSize cm " + pageSize.getWidth() / 72 * 2.54 + "," + pageSize.getHeight() / 72 * 2.54); float centeredXPosition = (pageSize.getWidth() - fontSize / 1000f) / 2f; float stringWidth = font.getStringWidth(message); float centeredYPosition = (pageSize.getHeight() - (stringWidth * fontSize) / 1000f) / 3f; PDPageContentStream contentStream = new PDPageContentStream(doc, page, false, false); contentStream.setFont(font, fontSize); contentStream.beginText(); // counterclockwise rotation for (int i = 0; i < 8; i++) { contentStream.setTextRotation(i * Math.PI * 0.25, centeredXPosition, pageSize.getHeight() - centeredYPosition); contentStream.drawString(message + " " + i); } // clockwise rotation for (int i = 0; i < 8; i++) { contentStream.setTextRotation(-i * Math.PI * 0.25, centeredXPosition, centeredYPosition); contentStream.drawString(message + " " + i); } contentStream.endText(); contentStream.close(); // Page 2 page = new PDPage(); page.setMediaBox(PDPage.PAGE_SIZE_A4); doc.addPage(page); fontSize = 1.0f; contentStream = new PDPageContentStream(doc, page, false, false); contentStream.setFont(font, fontSize); contentStream.beginText(); // text scaling for (int i = 0; i < 10; i++) { contentStream.setTextScaling(12 + (i * 6), 12 + (i * 6), 100, 100 + i * 50); contentStream.drawString(message + " " + i); } contentStream.endText(); contentStream.close(); // Page 3 page = new PDPage(); page.setMediaBox(PDPage.PAGE_SIZE_A4); doc.addPage(page); fontSize = 1.0f; contentStream = new PDPageContentStream(doc, page, false, false); contentStream.setFont(font, fontSize); contentStream.beginText(); int i = 0; // text scaling combined with rotation contentStream.setTextMatrix(12, 0, 0, 12, centeredXPosition, centeredYPosition * 1.5); contentStream.drawString(message + " " + i++); contentStream.setTextMatrix(0, 18, -18, 0, centeredXPosition, centeredYPosition * 1.5); contentStream.drawString(message + " " + i++); contentStream.setTextMatrix(-24, 0, 0, -24, centeredXPosition, centeredYPosition * 1.5); contentStream.drawString(message + " " + i++); contentStream.setTextMatrix(0, -30, 30, 0, centeredXPosition, centeredYPosition * 1.5); contentStream.drawString(message + " " + i++); contentStream.endText(); contentStream.close(); // Page 4 { page = new PDPage(); page.setMediaBox(PDPage.PAGE_SIZE_A4); doc.addPage(page); fontSize = 1.0f; contentStream = new PDPageContentStream(doc, page, false, false); contentStream.setFont(font, fontSize); contentStream.beginText(); AffineTransform root = new AffineTransform(); root.scale(72.0 / 2.54, 72.0 / 2.54); for (i = 0; i < pageSize.getHeight() / 72 * 2.54; i++) { // text scaling combined with rotation { AffineTransform rowMatrix = new AffineTransform(root); rowMatrix.translate(1, i); contentStream.setTextMatrix(rowMatrix); contentStream.drawString(message + " " + i); } } contentStream.endText(); contentStream.close(); } doc.save(outfile); } finally { if (doc != null) { doc.close(); } } }
From source file:fr.amap.commons.javafx.chart.ChartViewer.java
/** * A handler for the export to PDF option in the context menu. *///from w w w.j a va2 s . c om private void handleExportToPDF() { FileChooser fileChooser = new FileChooser(); fileChooser.setSelectedExtensionFilter( new FileChooser.ExtensionFilter("Portable Document Format (PDF)", "pdf")); fileChooser.setTitle("Export to PDF"); File file = fileChooser.showSaveDialog(stage); if (file != null) { try { CanvasPositionsAndSize canvasPositionAndSize = getCanvasPositionAndSize(); PDDocument doc = new PDDocument(); PDPage page = new PDPage(new PDRectangle((float) canvasPositionAndSize.totalWidth, (float) canvasPositionAndSize.totalHeight)); doc.addPage(page); BufferedImage image = new BufferedImage((int) canvasPositionAndSize.totalWidth, (int) canvasPositionAndSize.totalHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = image.createGraphics(); int index = 0; for (ChartCanvas canvas : chartCanvasList) { Rectangle2D rectangle2D = canvasPositionAndSize.positionsAndSizes.get(index); ((Drawable) canvas.chart).draw(g2, new Rectangle((int) rectangle2D.getX(), (int) rectangle2D.getY(), (int) rectangle2D.getWidth(), (int) rectangle2D.getHeight())); index++; } PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, false); PDXObjectImage pdImage = new PDPixelMap(doc, image); contentStream.drawImage(pdImage, 0, 0); PDPageContentStream cos = new PDPageContentStream(doc, page); cos.drawXObject(pdImage, 0, 0, pdImage.getWidth(), pdImage.getHeight()); cos.close(); doc.save(file); } catch (IOException | COSVisitorException ex) { Logger.getLogger(ChartViewer.class.getName()).log(Level.SEVERE, null, ex); } /*ExportUtils.writeAsPDF(this.chart, (int)canvas.getWidth(), (int)canvas.getHeight(), file);*/ /*ExportUtils.writeAsPDF(this.chart, (int)canvas.getWidth(), (int)canvas.getHeight(), file);*/ } }
From source file:gamma.cvd.calculator.print.CVDPrint.java
private PDDocument createPdfDocument(CVDPatient patient) throws IOException { PDDocument document = new PDDocument(); List<PDPage> pageList = new ArrayList<>(); PDPage page1 = new PDPage(PDPage.PAGE_SIZE_A4); pageList.add(page1);//ww w. ja va 2 s . c o m PDRectangle rect = pageList.get(0).getMediaBox(); document.addPage(pageList.get(0)); PDFont fontHelveticaBold = PDType1Font.HELVETICA_BOLD; PDFont fontCourier = PDType1Font.COURIER; PDFont fontCourierBold = PDType1Font.COURIER_BOLD; PDPageContentStream contentStream = new PDPageContentStream(document, pageList.get(0)); line = 0; contentStream.beginText(); contentStream.setFont(fontHelveticaBold, 18); contentStream.moveTextPositionByAmount(leftMargin, rect.getHeight() - initialLineSpace); contentStream.drawString("Test record for " + patient.getFirstName() + " " + patient.getLastName()); contentStream.endText(); contentStream.setFont(fontCourier, 12); writeLine("Patient no.:", String.valueOf(patient.getPatientId()), contentStream, rect.getHeight() - patientLineSpace); writeLine("First name:", patient.getFirstName(), contentStream, rect.getHeight() - patientLineSpace); writeLine("Last name:", patient.getLastName(), contentStream, rect.getHeight() - patientLineSpace); writeLine("Date of birth:", patient.getBirthdate().toString(), contentStream, rect.getHeight() - patientLineSpace); writeLine("Sex:", String.valueOf(patient.getSex()), contentStream, rect.getHeight() - patientLineSpace); int n = 0; for (CVDRiskData data : patient.getRiskData()) { if (n > 0 && n % 3 == 0) { contentStream.close(); PDPage page = new PDPage(PDPage.PAGE_SIZE_A4); pageList.add(page); document.addPage(pageList.get(n / 3)); contentStream = new PDPageContentStream(document, pageList.get(n / 3)); line = 0; contentStream.beginText(); contentStream.setFont(fontHelveticaBold, 18); contentStream.moveTextPositionByAmount(leftMargin, rect.getHeight() - initialLineSpace); contentStream.drawString("Test record for " + patient.getFirstName() + " " + patient.getLastName() + ", page " + ((n / 3) + 1)); contentStream.endText(); } contentStream.beginText(); contentStream.moveTextPositionByAmount(leftMargin, rect.getHeight() - testDataLineSpace - lineSpace * ++line); contentStream.endText(); contentStream.setFont(fontCourierBold, 12); writeLine("Test ID:", String.valueOf(data.getTestId()), contentStream, rect.getHeight() - testDataLineSpace); contentStream.setFont(fontCourier, 12); writeLine("Test date:", data.getTestDate().toString(), contentStream, rect.getHeight() - testDataLineSpace); writeLine("Cholesterol type:", data.getCholesterolType(), contentStream, rect.getHeight() - testDataLineSpace); writeLine("Cholesterol mmol/L:", String.format("%.2f", data.getCholesterolMmolL()), contentStream, rect.getHeight() - testDataLineSpace); writeLine("HDL mmol/L:", String.format("%.2f", data.getHdlMmolL()), contentStream, rect.getHeight() - testDataLineSpace); writeLine("Diastolic blood pressure:", String.valueOf(data.getBloodPressureDiastolicMmHg()), contentStream, rect.getHeight() - testDataLineSpace); writeLine("Systolic blood pressure:", String.valueOf(data.getBloodPressureSystolicMmHg()), contentStream, rect.getHeight() - testDataLineSpace); if (data.isSmoker()) { writeLine("Patient is smoker:", "Yes", contentStream, rect.getHeight() - testDataLineSpace); } else { writeLine("Patient is smoker:", "No", contentStream, rect.getHeight() - testDataLineSpace); } if (data.isDiabetic()) { writeLine("Patient is diabetic:", "Yes", contentStream, rect.getHeight() - testDataLineSpace); } else { writeLine("Patient is diabetic:", "No", contentStream, rect.getHeight() - testDataLineSpace); } int score = data.calculateRiskScore(); writeLine("Risk score:", String.valueOf(score), contentStream, rect.getHeight() - testDataLineSpace); int riskPercentage = data.getRiskPercentage(score); writeLine("Risk percentage:", new StringBuilder().append(riskPercentage).append(" %").toString(), contentStream, rect.getHeight() - testDataLineSpace); n++; } contentStream.close(); return document; }
From source file:generarPDF.GenerarFactura.java
public PDDocument crearFactura(int facturaID, JFrame dialogo) { try {// w w w. ja va 2s . c o m ControladorFactura controladorFactura = new ControladorFactura(); Factura facturaActual = controladorFactura.getFactura(" where factura_id=" + facturaID).get(0); ControladorCliente controladorCliente = new ControladorCliente(); Cliente cliente = controladorCliente.obtenerClientePorID(facturaActual.getCliente_id()); System.out.println(cliente.getCliente_id()); PDDocument document = new PDDocument(); PDPage pagina1 = new PDPage(); document.addPage(pagina1); PDFont font = PDType1Font.HELVETICA_BOLD; PDFont fontNormal = PDType1Font.HELVETICA; PDPageContentStream contenido = new PDPageContentStream(document, pagina1); contenido.beginText(); contenido.setFont(font, 16); contenido.moveTextPositionByAmount(30, 730); System.out.println("llego aqui -10"); contenido.drawString("Factura #" + facturaActual.getFactura_id()); contenido.endText(); System.out.println("llego aqui -11"); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(30, 700); contenido.drawString(nombreEmpresa + " NIT: " + NITEmpresa); contenido.endText(); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(30, 680); contenido.drawString(direccionEmpresa); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 650); contenido.drawString("Fecha:" + facturaActual.getFecha()); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 635); contenido.drawString("Nombre: " + cliente.getNombre()); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 620); contenido.drawString("Direccin: " + cliente.getDireccion()); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(200, 590); contenido.drawString("DETALLE DE LA FACTURA"); contenido.endText(); //Dibujar lineas contenido.drawLine(30, 600, 500, 600); contenido.drawLine(30, 585, 500, 585); //Dibujar tabla de productos ControladorFactura_Productos controladorFactura_Productos = new ControladorFactura_Productos(); ArrayList<Factura_Productos> listaProductosFactura = controladorFactura_Productos .getTodosFactura_Productos(" where factura_id=" + facturaID); contenido.drawLine(30, 570, 500, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(60, 560); contenido.drawString("Producto"); contenido.endText(); contenido.drawLine(30, 550, 30, 570); contenido.drawLine(200, 550, 200, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, 560); contenido.drawString("Valor unitario"); contenido.endText(); contenido.drawLine(300, 550, 300, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, 560); contenido.drawString("Unidades"); contenido.endText(); contenido.drawLine(380, 550, 380, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, 560); contenido.drawString("Valor total"); contenido.endText(); contenido.drawLine(500, 550, 500, 570); contenido.drawLine(500, 550, 500, 570); contenido.drawLine(30, 550, 500, 550); int altura = 550; ControladorProducto controladorProducto = new ControladorProducto(); /* * Caben en la pagina * Primera pagina 14 * Seguientes paginas 21 * Footer cuenta como 5 mas */ int indiceProductos = 0; double totalEspaciosNecesarios = listaProductosFactura.size() + 5 + 1; double totalPaginas = 1; if (Math.floor(totalEspaciosNecesarios / 17) == 0) { totalPaginas = 1; } else { totalEspaciosNecesarios -= 17; totalPaginas += (int) Math.ceil(totalEspaciosNecesarios / 21); } //Primer pagina for (int i = 0; i < listaProductosFactura.size() && altura >= 30; i++) { //Imprime por paginas Factura_Productos facturaProducto = listaProductosFactura.get(i); Productos productoActual = controladorProducto .getProducto(" where producto_id=" + facturaProducto.getProducto_id()).get(0); String nombreProducto = productoActual.getNombre(); if (nombreProducto.length() > 25) { nombreProducto = nombreProducto.substring(0, 26); } Double totalProducto = productoActual.getPrecio() * facturaProducto.getUnidades(); NumberFormat formatter = new DecimalFormat("#0"); String valorUnitario = String.valueOf(productoActual.getPrecio()); String unidades = String.valueOf(facturaProducto.getUnidades()); String valorTotal = String.valueOf(formatter.format(totalProducto)); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(40, altura - 15); contenido.drawString(String.valueOf(i + 1)); contenido.endText(); contenido.drawLine(30, altura, 30, altura - 30); contenido.drawLine(200, altura, 200, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(70, altura - 15); contenido.drawString(nombreProducto); contenido.endText(); contenido.drawLine(70, altura, 70, altura - 30); contenido.drawLine(200, altura, 200, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, altura - 15); contenido.drawString(valorUnitario); contenido.endText(); contenido.drawLine(300, altura, 300, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, altura - 15); contenido.drawString(unidades); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(valorTotal); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(30, altura - 30, 500, altura - 30); altura -= 30; indiceProductos = i + 1; } //Escribir footer si paginas es igual a 1 if (totalPaginas == 1) { Double valor = facturaActual.getValor(); Double ivaCalculado = Math.ceil(valor * Double.parseDouble(IVA) / 100); Double subtotal = Math.floor(valor * (1 - Double.parseDouble(IVA) / 100)); NumberFormat formatter = new DecimalFormat("#0"); String valorFormateado = formatter.format(valor); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, altura - 15); contenido.drawString("Subtotal"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(String.valueOf(subtotal)); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(320, altura, 320, altura - 30); contenido.drawLine(320, altura - 30, 500, altura - 30); altura -= 30; contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, altura - 15); contenido.drawString("IVA " + IVA + "%"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(String.valueOf(ivaCalculado)); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(320, altura, 320, altura - 30); contenido.drawLine(320, altura - 30, 500, altura - 30); altura -= 30; contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, altura - 15); contenido.drawString("Total"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(valorFormateado); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(320, altura - 30, 500, altura - 30); contenido.drawLine(320, altura, 320, altura - 30); //Informacion legal altura -= 40; contenido.beginText(); contenido.setFont(fontNormal, 10); contenido.moveTextPositionByAmount(50, altura); contenido.drawString(informacionLegalFactura); contenido.endText(); } //Siguientes paginas for (int j = 1; j < totalPaginas; j++) { altura = 650; PDPage paginaSiguiente = new PDPage(); document.addPage(paginaSiguiente); PDPageContentStream contenidoSiguiente = new PDPageContentStream(document, paginaSiguiente); //Escribir paginas for (int i = indiceProductos; i < listaProductosFactura.size() && altura >= 30; i++) { //Imprime por paginas Factura_Productos facturaProducto = listaProductosFactura.get(i); Productos productoActual = controladorProducto .getProducto(" where producto_id=" + facturaProducto.getProducto_id()).get(0); String nombreProducto = productoActual.getNombre(); if (nombreProducto.length() > 25) { nombreProducto = nombreProducto.substring(0, 26); } Double totalProducto = productoActual.getPrecio() * facturaProducto.getUnidades(); NumberFormat formatter = new DecimalFormat("#0"); String valorUnitario = String.valueOf(productoActual.getPrecio()); String unidades = String.valueOf(facturaProducto.getUnidades()); String valorTotal = String.valueOf(formatter.format(totalProducto)); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(40, altura - 15); contenidoSiguiente.drawString(String.valueOf(i + 1)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(30, altura, 30, altura - 30); contenidoSiguiente.drawLine(200, altura, 200, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(70, altura - 15); contenidoSiguiente.drawString(nombreProducto); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(70, altura, 70, altura - 30); contenidoSiguiente.drawLine(200, altura, 200, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(320, altura - 15); contenidoSiguiente.drawString(unidades); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(font, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(valorTotal); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(30, altura - 30, 500, altura - 30); indiceProductos = i + 1; altura -= 30; } //Si no cabe mas cierre el flujo. if (indiceProductos < listaProductosFactura.size()) { contenidoSiguiente.close(); } //En ultima pagina escribir footer if (j == totalPaginas - 1 && altura >= 40) { Double valor = facturaActual.getValor(); Double ivaCalculado = Math.ceil(valor * Double.parseDouble(IVA) / 100); Double subtotal = Math.floor(valor * (1 - Double.parseDouble(IVA) / 100)); NumberFormat formatter = new DecimalFormat("#0"); String valorFormateado = formatter.format(valor); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(320, altura - 15); contenidoSiguiente.drawString("Subtotal"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(String.valueOf(subtotal)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(320, altura, 320, altura - 30); contenidoSiguiente.drawLine(320, altura - 30, 500, altura - 30); altura -= 30; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(320, altura - 15); contenidoSiguiente.drawString("IVA " + IVA + "%"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(String.valueOf(ivaCalculado)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(320, altura, 320, altura - 30); contenidoSiguiente.drawLine(320, altura - 30, 500, altura - 30); altura -= 30; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(320, altura - 15); contenidoSiguiente.drawString("Total"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(valorFormateado); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(320, altura - 30, 500, altura - 30); contenidoSiguiente.drawLine(320, altura, 320, altura - 30); //Informacion legal altura -= 40; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 10); contenidoSiguiente.moveTextPositionByAmount(50, altura); contenidoSiguiente.drawString(informacionLegalFactura); contenidoSiguiente.endText(); contenidoSiguiente.close(); } else { contenidoSiguiente.close(); } System.out.println("Pagina numero: " + j + " De " + totalPaginas); } contenido.close(); return document; } catch (Exception e) { JOptionPane.showMessageDialog(dialogo, "Error al crear la factura\nInformacin Tcnica\n" + e.toString(), "Error", JOptionPane.ERROR_MESSAGE); return null; } }
From source file:generarPDF.GenerarReporteDiario.java
public PDDocument crearDiario(Calendar fechaInicial, Calendar fechaFinal, DefaultTableModel modeloTabla, JFrame dialogo) {//from w w w. ja v a 2s. c om PDDocument document = new PDDocument(); try { PDPage pagina1 = new PDPage(); document.addPage(pagina1); PDFont font = PDType1Font.HELVETICA_BOLD; PDFont fontNormal = PDType1Font.HELVETICA; PDPageContentStream contenido = new PDPageContentStream(document, pagina1); int annioInicial = fechaInicial.get(Calendar.YEAR); int mesInicial = fechaInicial.get(Calendar.MONTH) + 1; int diaInicial = fechaInicial.get(Calendar.DAY_OF_MONTH); String cadenaFechaInicial = annioInicial + "/" + mesInicial + "/" + diaInicial; int annioFinal = fechaFinal.get(Calendar.YEAR); int mesFinal = fechaFinal.get(Calendar.MONTH) + 1; int diaFinal = fechaFinal.get(Calendar.DAY_OF_MONTH); String cadenaFechaFinal = annioFinal + "/" + mesFinal + "/" + diaFinal; contenido.beginText(); contenido.setFont(font, 16); contenido.moveTextPositionByAmount(30, 730); contenido.drawString("Diario, desde: " + cadenaFechaInicial + " hasta: " + cadenaFechaFinal); contenido.endText(); contenido.drawLine(30, 680, 500, 680); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(200, 660); contenido.drawString("DETALLE DEL FLUJO"); contenido.endText(); contenido.drawLine(30, 640, 500, 640); /* * Caben en la pagina * Primera pagina 14 * Seguientes paginas 21 * Footer cuenta como 3 mas */ double totalEspaciosNecesarios = modeloTabla.getRowCount() + 3 + 1; double totalPaginas = 1; int indiceProductos = 0; if (Math.floor(totalEspaciosNecesarios / 20) == 0) { totalPaginas = 1; } else { totalEspaciosNecesarios -= 20; totalPaginas += (int) Math.ceil(totalEspaciosNecesarios / 24); } /* Encabezado tabla */ contenido.drawLine(30, 620, 500, 620); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(60, 605); contenido.drawString("Nmero factura"); contenido.endText(); contenido.drawLine(30, 600, 30, 620); contenido.drawLine(200, 600, 200, 620); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, 605); contenido.drawString("Fecha"); contenido.endText(); contenido.drawLine(300, 600, 300, 620); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, 605); contenido.drawString("Tipo"); contenido.endText(); contenido.drawLine(380, 600, 380, 620); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, 605); contenido.drawString("Valor"); contenido.endText(); contenido.drawLine(500, 600, 500, 620); contenido.drawLine(500, 600, 500, 620); contenido.drawLine(30, 600, 500, 600); int altura = 600; /* Generar informes */ for (int i = 0; i < modeloTabla.getRowCount() && altura >= 30; i++) { //Imprime por paginas String numeroFactura = String.valueOf(modeloTabla.getValueAt(i, 1)); String fecha = String.valueOf(modeloTabla.getValueAt(i, 2)); fecha = fecha.substring(0, 10); String tipo = String.valueOf(modeloTabla.getValueAt(i, 3)); String valor = String.valueOf(modeloTabla.getValueAt(i, 4)); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(40, altura - 15); contenido.drawString(numeroFactura); contenido.endText(); contenido.drawLine(30, altura, 30, altura - 30); contenido.drawLine(200, altura, 200, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, altura - 15); contenido.drawString(fecha); contenido.endText(); contenido.drawLine(300, altura, 300, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(330, altura - 15); contenido.drawString(tipo); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(420, altura - 15); contenido.drawString(valor); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(30, altura - 30, 500, altura - 30); altura -= 30; indiceProductos = i + 1; } //Escribir paginas siguientes for (int j = 1; j < totalPaginas; j++) { altura = 600; PDPage paginaSiguiente = new PDPage(); document.addPage(paginaSiguiente); PDPageContentStream contenidoSiguiente = new PDPageContentStream(document, paginaSiguiente); for (int i = indiceProductos; i < modeloTabla.getRowCount() && altura >= 30; i++) { //Imprime por paginas String numeroFactura = String.valueOf(modeloTabla.getValueAt(i, 1)); String fecha = String.valueOf(modeloTabla.getValueAt(i, 2)); fecha = fecha.substring(0, 10); String tipo = String.valueOf(modeloTabla.getValueAt(i, 3)); String valor = String.valueOf(modeloTabla.getValueAt(i, 4)); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(40, altura - 15); contenidoSiguiente.drawString(numeroFactura); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(30, altura, 30, altura - 30); contenidoSiguiente.drawLine(200, altura, 200, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(220, altura - 15); contenidoSiguiente.drawString(fecha); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(300, altura, 300, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(330, altura - 15); contenidoSiguiente.drawString(tipo); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(420, altura - 15); contenidoSiguiente.drawString(valor); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(30, altura - 30, 500, altura - 30); altura -= 30; indiceProductos = i + 1; } contenidoSiguiente.close(); } contenido.close(); } catch (Exception e) { JOptionPane.showMessageDialog(dialogo, "Se ha presentado un error al generar el diario\nInformacin tcnica\n" + e.toString()); } return document; }
From source file:generarPDF.ReporteFlujosCliente.java
private PDDocument crearInformeMovimientosCliente(ArrayList<Integer> flujosID, int cliente_id, Calendar fechaInicial, Calendar fechaFinal) { try {/*from w w w .j a v a 2s .c o m*/ ControladorCliente controladorCliente = new ControladorCliente(); Cliente cliente = controladorCliente.obtenerClientePorID(cliente_id); PDDocument document = new PDDocument(); PDPage pagina1 = new PDPage(); document.addPage(pagina1); PDFont font = PDType1Font.HELVETICA_BOLD; PDFont fontNormal = PDType1Font.HELVETICA; PDPageContentStream contenido = new PDPageContentStream(document, pagina1); contenido.beginText(); contenido.setFont(font, 16); contenido.moveTextPositionByAmount(30, 730); contenido.drawString("Reporte de movimientos del cliente"); contenido.endText(); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(30, 700); contenido.drawString("Minimarket Barrio Nuevo. NIT: 1234567898-9"); contenido.endText(); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(30, 680); contenido.drawString("Calle Falsa 1 2 3"); contenido.endText(); Calendar fecha = new GregorianCalendar(); //Obtenemos el valor del ao, mes, da, //hora, minuto y segundo del sistema //usando el mtodo get y el parmetro correspondiente int annio = fecha.get(Calendar.YEAR); int mes = fecha.get(Calendar.MONTH); int dia = fecha.get(Calendar.DAY_OF_MONTH); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 650); contenido.drawString("Fecha: " + annio + "/" + (mes + 1) + "/" + dia); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 635); contenido.drawString("Nombre: " + cliente.getNombre()); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 11); contenido.moveTextPositionByAmount(30, 620); contenido.drawString("Direccin: " + cliente.getDireccion()); contenido.endText(); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(110, 590); SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd"); String formattedInicial = formato.format(fechaInicial.getTime()); String formattedFinal = formato.format(fechaFinal.getTime()); contenido.drawString("DETALLE DE LOS MOVIMIENTOS entre: " + formattedInicial + " y " + formattedFinal); contenido.endText(); //Dibujar lineas contenido.drawLine(30, 600, 500, 600); contenido.drawLine(30, 585, 500, 585); contenido.drawLine(30, 570, 500, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(60, 560); contenido.drawString("Factura"); contenido.endText(); contenido.drawLine(30, 550, 30, 570); contenido.drawLine(200, 550, 200, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, 560); contenido.drawString("Tipo flujo"); contenido.endText(); contenido.drawLine(300, 550, 300, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(320, 560); contenido.drawString("Fecha"); contenido.endText(); contenido.drawLine(380, 550, 380, 570); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, 560); contenido.drawString("Valor"); contenido.endText(); contenido.drawLine(500, 550, 500, 570); contenido.drawLine(500, 550, 500, 570); contenido.drawLine(30, 550, 500, 550); int altura = 550; /* * Caben en la pagina * Primera pagina 14 * Seguientes paginas 21 * Footer cuenta como 3 mas */ int indiceProductos = 0; double totalEspaciosNecesarios = flujosID.size() + 3 + 1; double totalPaginas = 1; if (Math.floor(totalEspaciosNecesarios / 17) == 0) { totalPaginas = 1; } else { totalEspaciosNecesarios -= 17; totalPaginas += (int) Math.ceil(totalEspaciosNecesarios / 21); } double abonos = 0.0; double deudas = 0.0; for (int i = 0; i < flujosID.size(); i++) { ControladorFlujoFactura controladorFlujoFactura = new ControladorFlujoFactura(); Flujo_Factura flujoFactura = controladorFlujoFactura .getFlujo_Factura(" where flujo_id=" + flujosID.get(i)); if (flujoFactura.getTipo_flujo().equals("abono")) { abonos += flujoFactura.getValor(); } else { deudas += flujoFactura.getValor(); } } //Primer pagina for (int i = 0; i < flujosID.size() && altura >= 30; i++) { //Imprime por paginas ControladorFlujoFactura controladorFlujoFactura = new ControladorFlujoFactura(); Flujo_Factura flujoFactura = controladorFlujoFactura .getFlujo_Factura(" where flujo_id=" + flujosID.get(i)); String facturaID = String.valueOf(flujoFactura.getFactura_id()); if (facturaID.length() > 25) { facturaID = facturaID.substring(0, 26); } String tipoFlujo = flujoFactura.getTipo_flujo(); String fechaFlujo = flujoFactura.getFecha(); fechaFlujo = fechaFlujo.substring(0, 10); String valorTotal = String.valueOf(flujoFactura.getValor()); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(40, altura - 15); contenido.drawString(String.valueOf(i + 1)); contenido.endText(); contenido.drawLine(30, altura, 30, altura - 30); contenido.drawLine(200, altura, 200, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(70, altura - 15); contenido.drawString(facturaID); contenido.endText(); contenido.drawLine(70, altura, 70, altura - 30); contenido.drawLine(200, altura, 200, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(220, altura - 15); contenido.drawString(tipoFlujo); contenido.endText(); contenido.drawLine(300, altura, 300, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(310, altura - 15); contenido.drawString(fechaFlujo); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(valorTotal); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(30, altura - 30, 500, altura - 30); altura -= 30; indiceProductos = i + 1; } //Escribir footer si paginas es igual a 1 if (totalPaginas == 1) { Double valor = abonos - deudas; contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(300, altura - 15); contenido.drawString("Abonado por el cliente"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(String.valueOf(abonos)); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(300, altura, 300, altura - 30); contenido.drawLine(300, altura - 30, 500, altura - 30); altura -= 30; contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(300, altura - 15); contenido.drawString("Prestado al cliente"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(String.valueOf(deudas)); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(300, altura, 300, altura - 30); contenido.drawLine(300, altura - 30, 500, altura - 30); altura -= 30; contenido.beginText(); contenido.setFont(fontNormal, 12); contenido.moveTextPositionByAmount(300, altura - 15); contenido.drawString("Total flujos"); contenido.endText(); contenido.drawLine(380, altura, 380, altura - 30); contenido.beginText(); contenido.setFont(font, 12); contenido.moveTextPositionByAmount(400, altura - 15); contenido.drawString(String.valueOf(valor)); contenido.endText(); contenido.drawLine(500, altura, 500, altura - 30); //Linea inferior contenido.drawLine(300, altura - 30, 500, altura - 30); contenido.drawLine(300, altura, 300, altura - 30); } //Siguientes paginas for (int j = 1; j < totalPaginas; j++) { altura = 650; PDPage paginaSiguiente = new PDPage(); document.addPage(paginaSiguiente); PDPageContentStream contenidoSiguiente = new PDPageContentStream(document, paginaSiguiente); //Escribir paginas for (int i = indiceProductos; i < flujosID.size() && altura >= 30; i++) { //Imprime por paginas //Imprime por paginas ControladorFlujoFactura controladorFlujoFactura = new ControladorFlujoFactura(); Flujo_Factura flujoFactura = controladorFlujoFactura .getFlujo_Factura(" where flujo_id=" + flujosID.get(i)); String facturaID = String.valueOf(flujoFactura.getFactura_id()); if (facturaID.length() > 25) { facturaID = facturaID.substring(0, 26); } String tipoFlujo = flujoFactura.getTipo_flujo(); String fechaFlujo = flujoFactura.getFecha(); fechaFlujo = fechaFlujo.substring(0, 10); String valorTotal = String.valueOf(flujoFactura.getValor()); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(40, altura - 15); contenidoSiguiente.drawString(String.valueOf(i + 1)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(30, altura, 30, altura - 30); contenidoSiguiente.drawLine(200, altura, 200, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(70, altura - 15); contenidoSiguiente.drawString(facturaID); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(70, altura, 70, altura - 30); contenidoSiguiente.drawLine(200, altura, 200, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(220, altura - 15); contenidoSiguiente.drawString(tipoFlujo); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(300, altura, 300, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(310, altura - 15); contenidoSiguiente.drawString(fechaFlujo); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(valorTotal); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(30, altura - 30, 500, altura - 30); altura -= 30; indiceProductos = i + 1; } //Si no cabe mas cierre el flujo. if (indiceProductos < flujosID.size()) { contenidoSiguiente.close(); } //En ultima pagina escribir footer if (j == totalPaginas - 1 && altura >= 40) { Double valor = abonos - deudas; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(300, altura - 15); contenidoSiguiente.drawString("Abonado por el cliente"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(String.valueOf(abonos)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(300, altura, 300, altura - 30); contenidoSiguiente.drawLine(300, altura - 30, 500, altura - 30); altura -= 30; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(300, altura - 15); contenidoSiguiente.drawString("Prestado al cliente"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(String.valueOf(deudas)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(300, altura, 300, altura - 30); contenidoSiguiente.drawLine(300, altura - 30, 500, altura - 30); altura -= 30; contenidoSiguiente.beginText(); contenidoSiguiente.setFont(fontNormal, 12); contenidoSiguiente.moveTextPositionByAmount(300, altura - 15); contenidoSiguiente.drawString("Total flujo"); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(380, altura, 380, altura - 30); contenidoSiguiente.beginText(); contenidoSiguiente.setFont(font, 12); contenidoSiguiente.moveTextPositionByAmount(400, altura - 15); contenidoSiguiente.drawString(String.valueOf(valor)); contenidoSiguiente.endText(); contenidoSiguiente.drawLine(500, altura, 500, altura - 30); //Linea inferior contenidoSiguiente.drawLine(300, altura - 30, 500, altura - 30); contenidoSiguiente.drawLine(300, altura, 300, altura - 30); contenidoSiguiente.close(); } else { contenidoSiguiente.close(); } System.out.println("Pagina numero: " + j + " De " + totalPaginas); } contenido.close(); return document; } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error al crear la factura ", "Error", JOptionPane.ERROR_MESSAGE); return null; } }