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:
@@ -108,4 +108,8 @@ public class Settings {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public String getSettingsDir(){
|
||||
return filePath;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, Object> pModels){
|
||||
public NewLendingController(DbConnector pDbCon, HashMap<String, Object> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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<String, Object> pModel) throws IOException {
|
||||
public NewLendingPanel(final DbConnector dbCon, HashMap<String, Object> 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);
|
||||
|
||||
Reference in New Issue
Block a user