Hallo alle zusammen,
ich bin noch ein Java-Anfänger und bin neu hier im Forum, habe mir aber schon oft Beiträge hier durch gelesen. Bevor jetzt die Kommentare kommen, in anderen Posts erst einmal zu schauen und Google zu verwenden, das habe ich zu diesen Problemen, die ich hier habe die letzten drei Tage gemacht und keine für mich optimale Lösung gefunden oder eine welche ich verstanden habe.
Grundsätzlich über das Programm:
Ich habe ein Programm geschrieben, welches mir auf der GUI Daten aus einer Datenbank in einer Tabelle ausgibt. Es gibt außerdem die Buttons Speichern und Drucken. Bei Speichern kann der Anwender über einen FileChooser den Pfad wählen, an welchen dann eine PDF-Datei mit der Tabelle angelegt wird.
Beim Drucken möchte ich, dass der Standard-Druck-Dialog auf geht, in welchem der Anwender den gewünschten Drucken auswählen kann und dann das PDF-File gedruckt wird. Hierbei soll dieses aber nicht gespeichert werden, also habe ich es mir so vorgestellt, auch ein PDF-File der Tabelle zu generieren und automatisch in einen temp-Ordner oder so ähnlich zu speichern, dieses dann über einen Druck-Dialog zu drucken, und anschließend das File wieder zu löschen.
Für die PDF-Generierung habe ich in Eclipse, im Java Build Path, die Libraries für iText 5.4.5 geladen.
1. Frage:
Die PDF-Generierung funktioniert, wenn ich das Programm in Eclipse ausführ, einwandfrei, doch wenn ich eine runable -jar Datei erzeuge und das Programm darüber ausführ, funktioniert die PDF-Generierung nicht, besser gesagt das Fenster öffnet sich erst garnicht, aber wenn ich den Inhalt meiner Methode createPDF() auskommentier und damit eine jar-Datei erzeug, öffnet sich das Fenster. Insofern gehe ich davon aus, dass es irgendein Problem mit meiner createPDF() Methode gibt.
Hat das was mit den Libraries zu tun oder an was liegt das sonst, da es ja funktioniert, wenn ich es über Eclipse ausführen lass?
Hier der Programmausschnitt meiner Methode createPDF():
2. Frage:
Welche Funktion verwendet man am besten zum Drucken? Ich bin zum einen auf PrintJob gestoßen, da hatte ich aber das Problem dass ich nicht wusste, wie ich diesem mein PDF-File zum Drucken übergeben kann. Ich denk mir dass das irgendwie gehen muss, aber ich hab absolut nichts gefunden. Wahrscheinlich war ich einfach zu dumm dafür. Weiß einer wie das geht oder gibt es einen besseren Weg?
3. Frage:
Da ich mit dem PrintJob nicht weiter gekommen bin, mach ich es über folgenden Dialog, das funktioniert auch, nur leider wenn ich dann Drucke, wird das PDF-File auch geöffnet, was ich nicht möchte.
Es wär echt klasse wenn mir jemand weiter helfen könnte
ich bin noch ein Java-Anfänger und bin neu hier im Forum, habe mir aber schon oft Beiträge hier durch gelesen. Bevor jetzt die Kommentare kommen, in anderen Posts erst einmal zu schauen und Google zu verwenden, das habe ich zu diesen Problemen, die ich hier habe die letzten drei Tage gemacht und keine für mich optimale Lösung gefunden oder eine welche ich verstanden habe.
Grundsätzlich über das Programm:
Ich habe ein Programm geschrieben, welches mir auf der GUI Daten aus einer Datenbank in einer Tabelle ausgibt. Es gibt außerdem die Buttons Speichern und Drucken. Bei Speichern kann der Anwender über einen FileChooser den Pfad wählen, an welchen dann eine PDF-Datei mit der Tabelle angelegt wird.
Beim Drucken möchte ich, dass der Standard-Druck-Dialog auf geht, in welchem der Anwender den gewünschten Drucken auswählen kann und dann das PDF-File gedruckt wird. Hierbei soll dieses aber nicht gespeichert werden, also habe ich es mir so vorgestellt, auch ein PDF-File der Tabelle zu generieren und automatisch in einen temp-Ordner oder so ähnlich zu speichern, dieses dann über einen Druck-Dialog zu drucken, und anschließend das File wieder zu löschen.
Für die PDF-Generierung habe ich in Eclipse, im Java Build Path, die Libraries für iText 5.4.5 geladen.
1. Frage:
Die PDF-Generierung funktioniert, wenn ich das Programm in Eclipse ausführ, einwandfrei, doch wenn ich eine runable -jar Datei erzeuge und das Programm darüber ausführ, funktioniert die PDF-Generierung nicht, besser gesagt das Fenster öffnet sich erst garnicht, aber wenn ich den Inhalt meiner Methode createPDF() auskommentier und damit eine jar-Datei erzeug, öffnet sich das Fenster. Insofern gehe ich davon aus, dass es irgendein Problem mit meiner createPDF() Methode gibt.
Hat das was mit den Libraries zu tun oder an was liegt das sonst, da es ja funktioniert, wenn ich es über Eclipse ausführen lass?
Hier der Programmausschnitt meiner Methode createPDF():
Java:
private void createPDF(final File file) {
Thread t = new Thread() {
@Override
public void run() {
tabelle = new PdfPTable(myTableModel.getColumnCount());
tabelle.setWidthPercentage(100);
tabelle.getDefaultCell().enableBorderSide(Rectangle.BOX);
// Titel
df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
head = new Paragraph("Tabelle - " + df.format(new GregorianCalendar().getTime()), new Font(FontFamily.HELVETICA, 14, Font.BOLD));
head.setSpacingAfter(15f);
// Spaltentitel
for (int i = 0; i < colNames.length; i++) {
cell = new PdfPCell(new Phrase(colNames[i], new Font(FontFamily.HELVETICA, 10)));
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
tabelle.addCell(cell);
}
// Tabelleninhalt
for (int colCnt = myTableModel.getColumnCount(), rowCnt = myTableModel.getRowCount(), i = 0; i < rowCnt; i++) {
for (int j = 0; j < colCnt; j++) {
try{
String value = myTableModel.getValueAt(i, j).toString();
tabelle.addCell(new Phrase(value, new Font(FontFamily.HELVETICA, 10)));
} catch (NullPointerException e) {
tabelle.addCell(new Phrase("", new Font(FontFamily.HELVETICA, 10)));
}
}
}
document = new Document(PageSize.A4, 20, 20, 15, 15);
try {
PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
document.add(head);
document.add(tabelle);
document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
};
t.start();
}
2. Frage:
Welche Funktion verwendet man am besten zum Drucken? Ich bin zum einen auf PrintJob gestoßen, da hatte ich aber das Problem dass ich nicht wusste, wie ich diesem mein PDF-File zum Drucken übergeben kann. Ich denk mir dass das irgendwie gehen muss, aber ich hab absolut nichts gefunden. Wahrscheinlich war ich einfach zu dumm dafür. Weiß einer wie das geht oder gibt es einen besseren Weg?
Java:
file = new File("temp/print.pdf");
createPDF(file);
PrinterJob pj = PrinterJob.getPrinterJob();
if (pj.printDialog()) {
try {
pj.print();
}
catch (IOException e) {
e.printStackTrace();
}
}
file.delete();
3. Frage:
Da ich mit dem PrintJob nicht weiter gekommen bin, mach ich es über folgenden Dialog, das funktioniert auch, nur leider wenn ich dann Drucke, wird das PDF-File auch geöffnet, was ich nicht möchte.
Java:
file = new File("temp/print.pdf");
createPDF(file);
Desktop.getDesktop().print(file);
Es wär echt klasse wenn mir jemand weiter helfen könnte