Java tutorial
package de.schneefisch.fruas.transactions; import java.io.IOException; import java.sql.SQLException; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType1Font; import de.schneefisch.fruas.database.CustomerDAO; import de.schneefisch.fruas.database.DeliveryNoteDAO; import de.schneefisch.fruas.database.DeliveryNotePositionDAO; import de.schneefisch.fruas.database.FiCustomerDAO; import de.schneefisch.fruas.database.LicenseDAO; import de.schneefisch.fruas.database.LocationDAO; import de.schneefisch.fruas.database.MaintenanceDAO; import de.schneefisch.fruas.database.ProductDAO; import de.schneefisch.fruas.model.Bill; import de.schneefisch.fruas.model.Customer; import de.schneefisch.fruas.model.DeliveryNote; import de.schneefisch.fruas.model.DeliveryNotePosition; import de.schneefisch.fruas.model.FiCustomer; import de.schneefisch.fruas.model.License; import de.schneefisch.fruas.model.Location; import de.schneefisch.fruas.model.Maintenance; import de.schneefisch.fruas.model.Product; public class BillPDFCreator { private Bill bill; private DeliveryNote deliveryNote; private Customer customer; private FiCustomer fiCustomer; private Location location; private List<DeliveryNotePosition> deliveryNotePositions; public BillPDFCreator(Bill bill) { this.bill = bill; DeliveryNoteDAO dnDAO = new DeliveryNoteDAO(); DeliveryNotePositionDAO dnpDAO = new DeliveryNotePositionDAO(); LicenseDAO lDAO = new LicenseDAO(); CustomerDAO cDAO = new CustomerDAO(); FiCustomerDAO fDAO = new FiCustomerDAO(); LocationDAO locDAO = new LocationDAO(); try { this.deliveryNote = dnDAO.selectDeliveryNoteById(bill.getDeliveryNoteId()); this.deliveryNotePositions = dnpDAO.selectAllPositionsForDeliveryNote(deliveryNote.getId()); License license = lDAO.selectLicenseById(deliveryNotePositions.get(0).getLicenseId()); this.customer = cDAO.searchCustomerById(license.getCustomerId()); this.fiCustomer = fDAO.selectFiCustomer(customer.getFiKuId()); this.location = locDAO.findLocationByFiCustomerId(fiCustomer.getId()); } catch (SQLException e) { e.printStackTrace(); } } public void createPDF() { String filename = "Rechnung-" + bill.getId() + ".pdf"; try { PDDocument doc = new PDDocument(); PDPage page = new PDPage(); doc.addPage(page); PDPageContentStream content = new PDPageContentStream(doc, page); content.beginText(); content.setFont(PDType1Font.HELVETICA, 14); content.newLineAtOffset(70, 750); content.showText("Schneefisch GmbH"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 13); content.newLineAtOffset(70, 725); content.showText("Nibelungenplatz 1"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 14); content.newLineAtOffset(70, 700); content.showText("D-60318 Frankfurt am Main"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 640); content.showText(fiCustomer.getName()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 620); content.showText("Rechnungsprfung"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 600); content.showText(location.getStreet() + " " + location.getHouseNumber()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 580); content.showText(location.getPostalCode() + " " + location.getCity()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 540); content.showText("Rechnung " + bill.getId() + " fuer KN " + fiCustomer.getId()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 520); content.showText("Sehr geehrte Damen und Herren, "); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 500); content.showText("hiermit erlauben wir uns fr unsere Lieferung Nr. " + deliveryNote.getId() + " vom " + deliveryNote.getDate()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, 485); content.showText("folgenden Betrag in Rechnung zu stellen:"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(75, 470); content.showText("POS"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(120, 470); content.showText("Bezeichnung"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, 470); content.showText("Preis"); content.endText(); int count = 1; float yoffset = 460; for (DeliveryNotePosition dnp : deliveryNotePositions) { LicenseDAO licDAO = new LicenseDAO(); License license = licDAO.selectLicenseById(dnp.getLicenseId()); ProductDAO pDAO = new ProductDAO(); Product product = pDAO.searchProductById(license.getProductId()); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(75, yoffset); content.showText(Integer.toString(count)); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(120, yoffset); content.showText(product.getName()); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(120, yoffset - 20); content.showText("Lizenz: " + license.getId() + " von " + license.getSoldDate() + " bis " + license.getEndDate() + "."); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, yoffset - 20); content.showText("Eur " + product.getPrice() * ((100 - license.getDiscount()) / 100)); content.endText(); if (license.getMaintenanceId() == 0) { content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(120, yoffset - 40); content.showText("Ohne Maintenance-Vertrag."); content.endText(); } else { MaintenanceDAO mDAO = new MaintenanceDAO(); Maintenance maintenance = mDAO.searchMaintenanceById(license.getMaintenanceId()); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(120, yoffset - 40); content.showText("Mit " + maintenance.getInfo() + " als Maintenance-Vertrag."); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, yoffset - 40); content.showText("Eur " + maintenance.getPrice()); content.endText(); } count++; yoffset -= 100; } content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("Summe "); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, yoffset); content.showText(String.valueOf("EUR " + bill.getPrice())); content.endText(); yoffset -= 20; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("USt. 19%"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, yoffset); double ust = (bill.getPrice() * 0.19); content.showText(String.valueOf("EUR " + ust)); content.endText(); yoffset -= 20; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("Gesamtsumme"); content.endText(); content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(440, yoffset); double priceTotal = bill.getPrice() + ust; content.showText(String.valueOf("EUR " + priceTotal)); content.endText(); yoffset -= 40; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("Wir bitten Sie, den Gesamtbetrag von EUR " + priceTotal + " auf unser Konto 123456,"); content.endText(); yoffset -= 20; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("bei der Bank Unserort, BLZ4321, IBAN123 zu berweisen. Zahlungsziel: 30 Tage netto."); content.endText(); yoffset -= 25; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("Mit freundlichen Gruessen"); content.endText(); yoffset -= 20; content.beginText(); content.setFont(PDType1Font.HELVETICA, 12); content.newLineAtOffset(70, yoffset); content.showText("Schneefisch GmbH"); content.endText(); content.close(); doc.save(filename); doc.close(); System.out.println(filename + " erstellt in: " + System.getProperty("user.dir")); } catch (IOException e) { System.out.println(e.getMessage()); } catch (SQLException e) { e.printStackTrace(); } } }