From 102a46428b1349375fa0165586289fcef1d142bf Mon Sep 17 00:00:00 2001 From: Servicepoint Date: Wed, 10 Dec 2014 17:33:21 +0100 Subject: [PATCH] =?UTF-8?q?closes=20#2:=20PDF-Dokument=20wird=20nun=20bei?= =?UTF-8?q?=20einer=20Ausleihe=20automatisch=20erzeugt,=20in=20einem=20tmp?= =?UTF-8?q?-Ordner=20erstellt=20und=20ge=C3=B6ffnet.=20Wenn=20das=20Progra?= =?UTF-8?q?mm=20beendet=20wird,=20wird=20der=20tmp-Ordner=20geleert.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/katho/kBorrow/Settings.java | 4 + src/de/katho/kBorrow/Util.java | 15 +++ .../controller/NewLendingController.java | 100 +++++++++++++++--- src/de/katho/kBorrow/gui/MainWindow.java | 14 ++- src/de/katho/kBorrow/gui/NewLendingPanel.java | 5 +- 5 files changed, 120 insertions(+), 18 deletions(-) diff --git a/src/de/katho/kBorrow/Settings.java b/src/de/katho/kBorrow/Settings.java index 80d111a..39c112e 100644 --- a/src/de/katho/kBorrow/Settings.java +++ b/src/de/katho/kBorrow/Settings.java @@ -108,4 +108,8 @@ public class Settings { e.printStackTrace(); } } + + public String getSettingsDir(){ + return filePath; + } } diff --git a/src/de/katho/kBorrow/Util.java b/src/de/katho/kBorrow/Util.java index 6ea291c..ab7eda0 100644 --- a/src/de/katho/kBorrow/Util.java +++ b/src/de/katho/kBorrow/Util.java @@ -1,7 +1,9 @@ package de.katho.kBorrow; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Random; public class Util { public static String getCurrentDate(){ @@ -10,4 +12,17 @@ public class Util { return dateFormat.format(date); } + + public static String generateRandomString(int length) { + char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + + for (int i = 0; i < length; i++) { + char c = chars[random.nextInt(chars.length)]; + sb.append(c); + } + + return sb.toString(); + } } diff --git a/src/de/katho/kBorrow/controller/NewLendingController.java b/src/de/katho/kBorrow/controller/NewLendingController.java index 4d9113c..f9f97f8 100644 --- a/src/de/katho/kBorrow/controller/NewLendingController.java +++ b/src/de/katho/kBorrow/controller/NewLendingController.java @@ -3,10 +3,13 @@ package de.katho.kBorrow.controller; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; +import java.awt.Desktop; +import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -14,6 +17,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import de.katho.kBorrow.Settings; +import de.katho.kBorrow.Util; import de.katho.kBorrow.data.KArticle; import de.katho.kBorrow.data.KLender; import de.katho.kBorrow.data.KLending; @@ -32,14 +37,16 @@ public class NewLendingController { private FreeArticleTableModel freeArticleModel; private LendingTableModel lendingTableModel; private ArticleTableModel articleTableModel; + private Settings settings; - public NewLendingController(DbConnector pDbCon, HashMap pModels){ + public NewLendingController(DbConnector pDbCon, HashMap pModels, final Settings pSettings){ dbCon = pDbCon; userListModel = (UserListModel)pModels.get("userlistmodel"); lenderModel = (LenderModel)pModels.get("lendermodel"); freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel"); articleTableModel = (ArticleTableModel)pModels.get("articletablemodel"); lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel"); + settings = pSettings; } /** @@ -90,34 +97,97 @@ public class NewLendingController { } - // TODO http://www.coderanch.com/how-to/java/PDFBoxExample private void createPdfFile(int pLendingId){ KLending lending = lendingTableModel.getLendingById(pLendingId); KArticle article = articleTableModel.getArticleById(lending.getArticleId()); KUser user = userListModel.getUserById(lending.getUserId()); - KLender lender = lenderModel.getLenderById(lending.getLenderId()); + KLender lender = lenderModel.getLenderById(lending.getLenderId()); PDDocument doc = new PDDocument(); - PDPage page = new PDPage(); + PDPage page = new PDPage(PDPage.PAGE_SIZE_A4); + PDRectangle rect = page.getMediaBox(); doc.addPage(page); - PDFont font = PDType1Font.HELVETICA; + PDFont fontNormal = PDType1Font.HELVETICA; + PDFont fontBold = PDType1Font.HELVETICA_BOLD; + + String[] text = { + "Artikel: ", + "Verliehen von: ", + "Ausgeliehen an: ", + "Start der Ausleihe: ", + "Voraussichtliche Rückgabe: " + }; + String[] vars = { + article.getName(), + user.getName()+" "+user.getSurname(), + lender.getName()+" "+lender.getSurname()+" ("+lender.getStudentnumber()+")", + lending.getStartDate(), + lending.getExpectedEndDate() + }; try { - PDPageContentStream contentStream = new PDPageContentStream(doc, page); - contentStream.beginText(); - contentStream.setFont(font, 12); - contentStream.moveTextPositionByAmount(100, 700); - contentStream.drawString("hallo"); - contentStream.drawString("hallo2"); - contentStream.endText(); - contentStream.close(); + File file = createRandomFile(); - doc.save("test.pdf"); + PDPageContentStream cos = new PDPageContentStream(doc, page); + + cos.beginText(); + cos.moveTextPositionByAmount(100, rect.getHeight() - 100); + cos.setFont(fontBold, 16); + cos.drawString("Ausleihe #"+lending.getId()); + cos.endText(); + + int i = 0; + + while (i < text.length){ + cos.beginText(); + cos.moveTextPositionByAmount(100, rect.getHeight() - 25*(i+2) - 100 ); + cos.setFont(fontBold, 12); + cos.drawString(text[i]); + cos.moveTextPositionByAmount(rect.getWidth() / 2 - 100, 0); + cos.setFont(fontNormal, 12); + cos.drawString(vars[i]); + cos.endText(); + i++; + } + + i = i+2; + cos.setLineWidth(1); + cos.addLine(100, rect.getHeight() - 25*(i+2) - 100, 300, rect.getHeight() - 25*(i+2) - 100); + cos.closeAndStroke(); + + i++; + + cos.beginText(); + cos.moveTextPositionByAmount(100, rect.getHeight() - 25*(i+2) - 100); + cos.setFont(fontNormal, 12); + cos.drawString("Unterschrift "+lender.getName()+" "+lender.getSurname()); + cos.endText(); + + cos.close(); + doc.save(file); doc.close(); + + if(Desktop.isDesktopSupported()){ + Desktop desktop = Desktop.getDesktop(); + if(desktop.isSupported(Desktop.Action.OPEN)){ + desktop.open(file); + } + } } catch (IOException | COSVisitorException e) { - // TODO Auto-generated catch block e.printStackTrace(); } + } + + private File createRandomFile() throws IOException{ + File dir = new File(settings.getSettingsDir()+"/tmp"); + File file = new File(settings.getSettingsDir()+"/tmp/"+Util.generateRandomString(8)+".pdf"); + if(!dir.isDirectory()) dir.mkdir(); + if(!file.isFile()) file.createNewFile(); + else { + file.delete(); + file.createNewFile(); + } + return file; } } diff --git a/src/de/katho/kBorrow/gui/MainWindow.java b/src/de/katho/kBorrow/gui/MainWindow.java index 2a4fdf7..8ea19d7 100644 --- a/src/de/katho/kBorrow/gui/MainWindow.java +++ b/src/de/katho/kBorrow/gui/MainWindow.java @@ -9,7 +9,9 @@ import org.jdesktop.swingx.JXErrorPane; import org.jdesktop.swingx.error.ErrorInfo; + import java.awt.BorderLayout; +import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; @@ -53,6 +55,16 @@ public class MainWindow { frame.setBounds(100, 100, 600, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // Delete all files in tmp-dir + Runtime.getRuntime().addShutdownHook(new Thread(){ + public void run(){ + File dir = new File(set.getSettingsDir()+"/tmp/"); + if(dir.isDirectory()){ + for(File file : dir.listFiles()) file.delete(); + } + } + }); + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -73,7 +85,7 @@ public class MainWindow { tabbedPane = new JTabbedPane(JTabbedPane.TOP); frame.getContentPane().add(this.tabbedPane, BorderLayout.CENTER); - tabbedPane.addTab("Neue Ausleihe", new NewLendingPanel(this.dbCon, models)); + tabbedPane.addTab("Neue Ausleihe", new NewLendingPanel(this.dbCon, models, set)); tabbedPane.addTab("Ausleihen verwalten", new ManageLendingsPanel(this.dbCon, models)); tabbedPane.addTab("Artikel verwalten", new ArticlePanel(this.dbCon, models)); tabbedPane.addTab("Benutzer verwalten", new UserPanel(this.dbCon, models)); diff --git a/src/de/katho/kBorrow/gui/NewLendingPanel.java b/src/de/katho/kBorrow/gui/NewLendingPanel.java index b29ee6a..eede3a2 100644 --- a/src/de/katho/kBorrow/gui/NewLendingPanel.java +++ b/src/de/katho/kBorrow/gui/NewLendingPanel.java @@ -28,6 +28,7 @@ import javax.swing.border.TitledBorder; import org.jdesktop.swingx.JXDatePicker; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; +import de.katho.kBorrow.Settings; import de.katho.kBorrow.Util; import de.katho.kBorrow.controller.NewLendingController; import de.katho.kBorrow.converter.LenderNameConverter; @@ -70,7 +71,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList * @param dbCon * @throws IOException */ - public NewLendingPanel(final DbConnector dbCon, HashMap pModel) throws IOException { + public NewLendingPanel(final DbConnector dbCon, HashMap pModel, final Settings pSettings) throws IOException { setLayout(null); articleId = -1; @@ -78,7 +79,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList freeArticleTableModel = (FreeArticleTableModel)pModel.get("freearticletablemodel"); userListModel = (UserListModel)pModel.get("userlistmodel"); lenderModel = (LenderModel)pModel.get("lendermodel"); - newLendingController = new NewLendingController(dbCon, pModel); + newLendingController = new NewLendingController(dbCon, pModel, pSettings); JTable freeArticleTable = new JTable(freeArticleTableModel); freeArticleTable.setRowHeight(30);