package fachlogik;
import java.awt.Image;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfCopyFields;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
/**
* Diese Klasse wird zum generieren der PDF`s verwendet
*/
public class Pdf {
/**
* Diese HashMap enthält alle Variablen, die für das Erstellen der PDF
* notwendig sind.
*/
static HashMap parameter = new HashMap
();
//static HashMap<String, Object> parameter = new HashMap<String, Object>();
static JasperReport jasperReport;
static JasperPrint jPrint;
static Image wappen;
static byte[] pdfKompl_byte = null;
// Methode für Erstellung des Sachdatenauzuges
/**
* Mit Hilfe dieser Methode wird die PDF für den Kartendruck erzeugt. <br>
* Zu beginn werden die entsprechenden Parameter der HashMap übergeben.
* Anschliessend werden die einzelenen PDF erzeugt und in einem
* Tempverzeichnis abgespeichert. <br>
* Diese erzeugten PDF´s werden zu einer zusammengefügt und letztendlich im
* Browser anzeigt
*/
public static void creat_pdf(String aufnahmeausschuss, String aufnahmestr,
String plzort, String aufnahmeort, String ortsteil, String gmd,
String gmk, String flst, String str, String nr, String bwNr,
String stag, String bwert, String entw, String nuta, String beit,
String bauw, String gez, String gfz, String grz, String bmz,
String flae, String gtie, String gbrei, String verg, String verf,
String bod, String acza, String grza, String aufw, String weer,
String erstellungsausschuss, String erstellungsort,
String plzOrtStrNr, String verordnung, String fundstelle,
String stichtag, String farbe) {
String name;
if (aufnahmeausschuss.indexOf("Kreis")>=0)
//contains("Kreis"))
name = " der Kreisfreien Stadt " + aufnahmeort + " ";
// ggf Ort über
else
name = " im Landkreis " + aufnahmeausschuss + " ";
// füllen der Hashmap
// Daten des Aufnahmeausschuss der hashmap hinzufügen
parameter.put("aAufnahmeAusschuss", name);
parameter.put("aStrAufnahmeAusschuss", aufnahmestr);
parameter.put("aOrtAufnahmeAusschuss", plzort);
if (erstellungsausschuss.indexOf("Kreis")>=0)
//contains("Kreis"))
name = "Gutachterausschuss der Kreisfreien Stadt " + erstellungsort;
else {
if (erstellungsausschuss.indexOf("Oberer")>=0){
//contains("Oberer")) {
name = "Oberer Gutachterausschuss Staatsbetrieb Geobasisinformation und Vermessung Sachsen";
} else
name = "Gutachterausschuss des Landkreis "
+ erstellungsausschuss;
}
// Daten des Erstellungsausschuss der Hashmap hinzufügen
parameter.put("aErstellungsAusschuss", name);
parameter.put("aPLZOrtStrNrErstellungsAusschuss", plzOrtStrNr);
// Daten für die Sachdatenauskunft der Hashmap hinzufügen
parameter.put("aOrtsteil", ortsteil);
parameter.put("aStr", str);
parameter.put("aHnr", nr);
parameter.put("aGmd", gmd);
parameter.put("aGmk", gmk);
parameter.put("aFlst", flst);
parameter.put("aBwNr", bwNr);
parameter.put("aSTag", stag);
parameter.put("aBwert", bwert + " ");
parameter.put("aEntw", entw);
parameter.put("aNuta", nuta);
parameter.put("aBeit", beit);
parameter.put("aBauw", bauw);
parameter.put("aGez", gez);
parameter.put("aGfz", gfz);
parameter.put("aGrz", grz);
parameter.put("aBmz", bmz);
parameter.put("aFlae", flae);
parameter.put("aGtie", gtie + " m");
parameter.put("aGbrei", gbrei + " m ");
parameter.put("aVerg", verg);
parameter.put("aVerf", verf);
parameter.put("aBod", bod);
parameter.put("aAcza", acza);
parameter.put("aGrza", grz);
parameter.put("aAufw", aufw);
parameter.put("aWeer", weer);
// wappenbild hinzufügen
Image wappen = null;
try {
if (farbe.indexOf("w")>=0){
//contains("w")) {
// scharzWeiss druck
wappen = ImageIO.read(Datenbank.template("wappen_sw"));
} else {
// farbiger Druck
wappen = ImageIO.read(Datenbank.template("wappen_bunt"));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
parameter.put("aWappen", wappen);
// Daten für Bodenrichtwert Erlaeuterung der Hashmap hinzufügen
String fund = verordnung + " " + fundstelle + " ermittelt.";
parameter.put("aVerordnungFundstelleErmitteln.", fund);
// Pdf erzeugen
try {
Document document = new Document();
// ByteArrayOutputStream erzeugen
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
String file = (Datenbank.template("Sachdaten")).toString();
jasperReport = JasperCompileManager.compileReport(file);
jPrint = JasperFillManager.fillReport(jasperReport, parameter,
new JREmptyDataSource());
// Pdf wird in Hauptspeicher geschrieben
pdfKompl_byte = JasperExportManager.exportReportToPdf(jPrint);
HttpServletResponse response = Datenbank.getResponse();
document.close();
response.setContentType("application/pdf");
response.setContentLength(baos.size());
// Pdf wird im Browser angezeigt
ServletOutputStream servletOutputStream = response
.getOutputStream();
baos.writeTo(servletOutputStream);
servletOutputStream.write(pdfKompl_byte, 0, pdfKompl_byte.length);
servletOutputStream.flush();
System.out.println(new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
.format(new Date()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Mit Hilfe dieser Methode wird die PDF für den Sachdatenabgabe erzeugt. <br>
* Zu beginn werden die entsprechenden Parameter der HashMapübergeben.
* Anschliessend wird die PDF erzeugt undim Browser darstellt.
*/
public static void creat_pdf(String aufnahmeausschuss, String aufnahmestr,
String plzort, String aufnahmeort, String bbox,
String kartengrundlage, String massstab, String gmd, String gmk,
String flst, String bwNr, String erstellungsausschuss,
String erstellungsort, String plzOrtStrNr, String verordnung,
String fundstelle, String stichtag, String format, String farbe) {
String name = null;
// byte[]pdf2_byte=null;
// byte[]pdf3_byte =null;
// Bezeichnung des AufnahmeAusschuss erstellen
if (aufnahmeausschuss.indexOf("Kreis")>=0)
//contains("Kreis"))
name = " der Kreisfreien Stadt " + aufnahmeort + " ";// ggf Ort über
else
name = " im Landkreis " + aufnahmeausschuss + " ";
// Daten des AufnahmeAusschuss der Hashmap hinzufügen
parameter.put("aAufnahmeAusschuss", name);
parameter.put("aStrAufnahmeAusschuss", aufnahmestr);
parameter.put("aOrtAufnahmeAusschuss", plzort);
// Bezeichnung des ErstellungsAusschuss erstellen
if (erstellungsausschuss.indexOf("Kreis")>=0)
//contains("Kreis"))
name = "Gutachterausschuss der Kreisfreien Stadt " + erstellungsort
+ " ";
else {
if (erstellungsausschuss.indexOf("Oberer")>=0){
//contains("Oberer")) {
name = " "
+ "Oberer Gutachterausschuss Staatsbetrieb Geobasisinformation und Vermessung Sachsen";// +
// "Staatsbetrieb Geobasisinformation und Vermessung Sachsen (GeoSN)Oberer Gutachterausschuss";
} else
name = "Gutachterausschuss des Landkreis "
+ erstellungsausschuss + " ";
}
// Daten des Erstellungsausschuss der Hashmap hinzufügen
parameter.put("aErstellungsAusschuss", name);
parameter.put("aPLZOrtStrNrErstellungsAusschuss", plzOrtStrNr);
// Daten für Lagebeschreiben etc. der Hashmap hinzufügen
parameter.put("aGmd", gmd);
parameter.put("aGmk", gmk);
parameter.put("aFlst", flst);
parameter.put("aBwNr", bwNr);
// Daten fuer die Kartenauskunft der Hashmap hinzufügen
parameter.put("aMaßstab", massstab);
parameter.put("aKartengrundlage", kartengrundlage);
// zerlegen der BoundingBox um Koordinaten für Rahmenbeschriftung
// zuerhalten
StringTokenizer tokenizer;
tokenizer = new StringTokenizer(bbox, ",");
String rw1 = tokenizer.nextToken();
String hw1 = tokenizer.nextToken();
String rw2 = tokenizer.nextToken();
String hw2 = tokenizer.nextToken();
parameter.put("aRw1", rw1);
parameter.put("aHw1", hw1);
parameter.put("aRw2", rw2);
parameter.put("aHw2", hw2);
String fund = verordnung + " " + fundstelle + " mit Stichtag zum "
+ stichtag + " ermittelt.";
parameter.put(
"aVerordnungFundstelleErmittelnMitStichtagzum..ermittelt.",
fund);
// wappen hinzufügen
try {
if (farbe.indexOf("w")>=0){
//contains("w")) {
// schwarzWeiss druck ist gewünscht
wappen = ImageIO.read(Datenbank.template("wappen_sw"));
} else {
// Farbdruck ist gewünscht
wappen = ImageIO.read(Datenbank.template("wappen_bunt"));
}
parameter.put("aWappen", wappen);
tokenizer = new StringTokenizer(massstab, ":");
String massstabszahl_string = tokenizer.nextToken();
massstabszahl_string = tokenizer.nextToken();
Image massstabsleiste = ImageIO.read(Datenbank
.template(massstabszahl_string));
parameter.put("aMassstabsBild", massstabsleiste);
// für eine schreibart entscheiden -- später nach fertigstellung der
// XML
format = format.replaceAll("a", "");
//format = format.replace("a", "");
format = format.replaceAll("A", "");
// Entsprechende Mapvorlage laden
int formatzahl = Integer.parseInt(format);
String template = "";
switch (formatzahl) {
case 0: {
template = (Datenbank.template("A0")).toString();
}
break;
case 1: {
template = (Datenbank.template("A1")).toString();
}
break;
case 2: {
template = (Datenbank.template("A2")).toString();
}
break;
case 3: {
template = (Datenbank.template("A3")).toString();
}
break;
case 4: {
template = (Datenbank.template("A4")).toString();
}
break;
}
jasperReport = JasperCompileManager.compileReport(template);
jPrint = JasperFillManager.fillReport(jasperReport, parameter,
new JREmptyDataSource());
// Speicherung als Temporäre Datei
pdfKompl_byte = JasperExportManager.exportReportToPdf(jPrint);
/*
* // Anhang erzeugen erst einmal heraus genommen wenn die richtige
* pdf vorhanden ist wird wieder ergänzt
*
* jasperReport = JasperCompileManager
* .compileReport("D:\\LV14hofm\\Erlauterung_map.jrxml");
*
* jPrint = JasperFillManager.fillReport(jasperReport, parameter,
* new JREmptyDataSource());
*
* pdf2_byte = JasperExportManager.exportReportToPdf(jPrint);
*
* PdfReader reader3 = null;
*
* if (farbe.equals("bunt")) { jasperReport = JasperCompileManager
* .compileReport("D:\\LV14hofm\\legende_bunt.jrxml");
*
* jPrint = JasperFillManager.fillReport(jasperReport, parameter,
* new JREmptyDataSource());
*
* pdf3_byte= JasperExportManager.exportReportToPdf(jPrint);
*
*
* reader3 = new PdfReader(pdf3_byte); } else { jasperReport =
* JasperCompileManager
* .compileReport("D:\\LV14hofm\\legende_sw.jrxml");
*
* jPrint = JasperFillManager.fillReport(jasperReport, parameter,
* new JREmptyDataSource());
*
* pdf2_byte = JasperExportManager.exportReportToPdf(jPrint);
*
* reader3 = new PdfReader(pdf3_byte); }
*/
// Pdf´s zusammenfuegen
PdfReader reader1 = new PdfReader(pdfKompl_byte);
// PdfReader reader2 = new PdfReader(
// pdf2_byte);
HttpServletResponse response = Datenbank.getResponse();
ServletOutputStream servletOutputStream = response
.getOutputStream();
PdfCopyFields copy = new PdfCopyFields(servletOutputStream);
copy.addDocument(reader1);
// copy.addDocument(reader2);
// copy.addDocument(reader3);
copy.close();
servletOutputStream.write(pdfKompl_byte, 0, pdfKompl_byte.length);
servletOutputStream.flush();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}