closes #2: PDF-Dokument wird nun bei einer Ausleihe automatisch erzeugt,

in einem tmp-Ordner erstellt und geöffnet.
Wenn das Programm beendet wird, wird der tmp-Ordner geleert.
This commit is contained in:
Servicepoint
2014-12-10 17:33:21 +01:00
parent 831d3bda09
commit 102a46428b
5 changed files with 120 additions and 18 deletions

View File

@@ -108,4 +108,8 @@ public class Settings {
e.printStackTrace(); e.printStackTrace();
} }
} }
public String getSettingsDir(){
return filePath;
}
} }

View File

@@ -1,7 +1,9 @@
package de.katho.kBorrow; package de.katho.kBorrow;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Random;
public class Util { public class Util {
public static String getCurrentDate(){ public static String getCurrentDate(){
@@ -10,4 +12,17 @@ public class Util {
return dateFormat.format(date); 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();
}
} }

View File

@@ -3,10 +3,13 @@ package de.katho.kBorrow.controller;
import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; 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.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@@ -14,6 +17,8 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; 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.KArticle;
import de.katho.kBorrow.data.KLender; import de.katho.kBorrow.data.KLender;
import de.katho.kBorrow.data.KLending; import de.katho.kBorrow.data.KLending;
@@ -32,14 +37,16 @@ public class NewLendingController {
private FreeArticleTableModel freeArticleModel; private FreeArticleTableModel freeArticleModel;
private LendingTableModel lendingTableModel; private LendingTableModel lendingTableModel;
private ArticleTableModel articleTableModel; private ArticleTableModel articleTableModel;
private Settings settings;
public NewLendingController(DbConnector pDbCon, HashMap<String, Object> pModels){ public NewLendingController(DbConnector pDbCon, HashMap<String, Object> pModels, final Settings pSettings){
dbCon = pDbCon; dbCon = pDbCon;
userListModel = (UserListModel)pModels.get("userlistmodel"); userListModel = (UserListModel)pModels.get("userlistmodel");
lenderModel = (LenderModel)pModels.get("lendermodel"); lenderModel = (LenderModel)pModels.get("lendermodel");
freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel"); freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel");
articleTableModel = (ArticleTableModel)pModels.get("articletablemodel"); articleTableModel = (ArticleTableModel)pModels.get("articletablemodel");
lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel"); 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){ private void createPdfFile(int pLendingId){
KLending lending = lendingTableModel.getLendingById(pLendingId); KLending lending = lendingTableModel.getLendingById(pLendingId);
KArticle article = articleTableModel.getArticleById(lending.getArticleId()); KArticle article = articleTableModel.getArticleById(lending.getArticleId());
KUser user = userListModel.getUserById(lending.getUserId()); KUser user = userListModel.getUserById(lending.getUserId());
KLender lender = lenderModel.getLenderById(lending.getLenderId()); KLender lender = lenderModel.getLenderById(lending.getLenderId());
PDDocument doc = new PDDocument(); PDDocument doc = new PDDocument();
PDPage page = new PDPage(); PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
PDRectangle rect = page.getMediaBox();
doc.addPage(page); 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 { try {
PDPageContentStream contentStream = new PDPageContentStream(doc, page); File file = createRandomFile();
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100, 700);
contentStream.drawString("hallo");
contentStream.drawString("hallo2");
contentStream.endText();
contentStream.close();
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(); doc.close();
if(Desktop.isDesktopSupported()){
Desktop desktop = Desktop.getDesktop();
if(desktop.isSupported(Desktop.Action.OPEN)){
desktop.open(file);
}
}
} catch (IOException | COSVisitorException e) { } catch (IOException | COSVisitorException e) {
// TODO Auto-generated catch block
e.printStackTrace(); 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;
} }
} }

View File

@@ -9,7 +9,9 @@ import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo; import org.jdesktop.swingx.error.ErrorInfo;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
@@ -53,6 +55,16 @@ public class MainWindow {
frame.setBounds(100, 100, 600, 500); frame.setBounds(100, 100, 600, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 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 { try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
@@ -73,7 +85,7 @@ public class MainWindow {
tabbedPane = new JTabbedPane(JTabbedPane.TOP); tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(this.tabbedPane, BorderLayout.CENTER); 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("Ausleihen verwalten", new ManageLendingsPanel(this.dbCon, models));
tabbedPane.addTab("Artikel verwalten", new ArticlePanel(this.dbCon, models)); tabbedPane.addTab("Artikel verwalten", new ArticlePanel(this.dbCon, models));
tabbedPane.addTab("Benutzer verwalten", new UserPanel(this.dbCon, models)); tabbedPane.addTab("Benutzer verwalten", new UserPanel(this.dbCon, models));

View File

@@ -28,6 +28,7 @@ import javax.swing.border.TitledBorder;
import org.jdesktop.swingx.JXDatePicker; import org.jdesktop.swingx.JXDatePicker;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
import de.katho.kBorrow.Settings;
import de.katho.kBorrow.Util; import de.katho.kBorrow.Util;
import de.katho.kBorrow.controller.NewLendingController; import de.katho.kBorrow.controller.NewLendingController;
import de.katho.kBorrow.converter.LenderNameConverter; import de.katho.kBorrow.converter.LenderNameConverter;
@@ -70,7 +71,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
* @param dbCon * @param dbCon
* @throws IOException * @throws IOException
*/ */
public NewLendingPanel(final DbConnector dbCon, HashMap<String, Object> pModel) throws IOException { public NewLendingPanel(final DbConnector dbCon, HashMap<String, Object> pModel, final Settings pSettings) throws IOException {
setLayout(null); setLayout(null);
articleId = -1; articleId = -1;
@@ -78,7 +79,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
freeArticleTableModel = (FreeArticleTableModel)pModel.get("freearticletablemodel"); freeArticleTableModel = (FreeArticleTableModel)pModel.get("freearticletablemodel");
userListModel = (UserListModel)pModel.get("userlistmodel"); userListModel = (UserListModel)pModel.get("userlistmodel");
lenderModel = (LenderModel)pModel.get("lendermodel"); lenderModel = (LenderModel)pModel.get("lendermodel");
newLendingController = new NewLendingController(dbCon, pModel); newLendingController = new NewLendingController(dbCon, pModel, pSettings);
JTable freeArticleTable = new JTable(freeArticleTableModel); JTable freeArticleTable = new JTable(freeArticleTableModel);
freeArticleTable.setRowHeight(30); freeArticleTable.setRowHeight(30);