Hallo!
Ich habe ein Programm geschrieben, welches Informationen aus einer PDF ausließt und in eine andere überträgt. Wenn ich das Programm über Eclipse starte, tut es dies auch ganz brav. Wenn ich nun jedoch die exportierte Datei mit einer Batch-Datei öffne, werden die Strings merhrmals in die neue PDF Datei geschrieben und ich habe absolut keine Ahnung wodran das liegen könnte. ^^
Ich hoffe ihr habt verstanden was ich meine und habt vlt. sogar einen passenden Lösungsansatz
Hier der Quellcode:
Ich habe ein Programm geschrieben, welches Informationen aus einer PDF ausließt und in eine andere überträgt. Wenn ich das Programm über Eclipse starte, tut es dies auch ganz brav. Wenn ich nun jedoch die exportierte Datei mit einer Batch-Datei öffne, werden die Strings merhrmals in die neue PDF Datei geschrieben und ich habe absolut keine Ahnung wodran das liegen könnte. ^^
Ich hoffe ihr habt verstanden was ich meine und habt vlt. sogar einen passenden Lösungsansatz
Hier der Quellcode:
Java:
package mariusPDF;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.TimeUnit;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
public class Main {
static String userhome = System.getProperty("user.home");
static String pdfName = "";
static StringBuffer buff = new StringBuffer();
static PdfReader reader = null;
static String[] splitbuff;
public static void start() {
File f = new File(userhome + "/Desktop/Bestellung-IBN/");
File[] fileArray = f.listFiles();
for (int i = 0; i < fileArray.length; i++) {
String fileS = fileArray[i].toString();
if (fileS.endsWith(".pdf")) {
try {
reader = new PdfReader(fileS);
pdfName = fileArray[i].getName().replace(".pdf", "");
int numberOfPages = reader.getNumberOfPages();
String s = "";
for (int j = 1; j <= numberOfPages; j++) {
s = PdfTextExtractor.getTextFromPage(reader, j);
buff.append(s + "\n");
}
splitbuff = buff.toString().split("\n");
if (splitbuff[0].equals("Bosch Thermotechnik GmbH")) {
Bosch.main();
} else {
Ait.main();
}
} catch (IOException e) {
}
i = fileArray.length;
}
}
pdfName = "";
buff = new StringBuffer();
reader = null;
splitbuff = null;
watch();
}
public static void main(String[] args) {
watch();
}
public static <DirectoryWatchService> void watch() {
File f2 = new File(userhome + "/Desktop/Bestellung-IBN/");
File[] fileArray2 = f2.listFiles();
if (fileArray2.length > 2) {
start();
}
try {
Path path = Paths.get(userhome + "/Desktop/Bestellung-IBN");
WatchService watchService = path.getFileSystem().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
WatchKey watchKey = null;
while (true) {
watchKey = watchService.poll(50, TimeUnit.DAYS);
if (watchKey != null) {
watchKey.pollEvents().stream().forEach(event -> {
start();
});
}
watchKey.reset();
}
} catch (IOException e) {
} catch (InterruptedException e) {
}
}
static boolean isInt(String num) {
try {
Integer.parseInt(num);
return true;
} catch (NumberFormatException e) {
}
return false;
}
}
Java:
package mariusPDF;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class Bosch {
static String AnlageObjekt = "";
static String AnlageAnlage = "";
static String AnlageOrt = "";
static String AnlageStraßeHausnummer = "";
static String AnlageStiegeStockRaum = "";
static String RechempfKundennummer = "";
static String RechempfStraßeHausnummer = "";
static String RechempfOrt = "";
static String RechempfTelefon = "";
static String WarenLeistungsEmpf = "";
public static void main() {
boolean lever = true;
for (int i = 0; i < Main.splitbuff.length; i++) {
if (Main.splitbuff[i].equals("Stockwerk/Raum/Gebäudekürzel:")) {
AnlageStiegeStockRaum = Main.splitbuff[i + 1];
}
if (Main.splitbuff[i].equals("Anlagenstandort:")) {
AnlageStraßeHausnummer = Main.splitbuff[i + 3];
AnlageOrt = Main.splitbuff[i + 4];
}
if (Main.splitbuff[i].equals("Auftraggeber: Rechnungsempfänger:")) {
RechempfKundennummer = Main.splitbuff[i + 1].split(" ")[3];
String[] splitWort = Main.splitbuff[i + 3].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (Main.isInt(splitWort[j].split("")[0])) {
if (lever) {
while (j + 1 != splitWort.length) {
RechempfStraßeHausnummer = RechempfStraßeHausnummer + splitWort[j + 1] + " ";
j++;
}
j = splitWort.length;
lever = false;
}
}
}
lever = false;
splitWort = Main.splitbuff[i + 4].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (Main.isInt(splitWort[j].split("")[0])) {
if (lever) {
RechempfOrt = splitWort[j];
while (j + 1 != splitWort.length) {
RechempfOrt = RechempfOrt + " " + splitWort[j + 1];
j++;
}
} else {
lever = true;
}
}
}
lever = false;
splitWort = Main.splitbuff[i + 5].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (splitWort[j].equals("Telefonnr.:")) {
if (lever) {
while (j + 1 != splitWort.length) {
RechempfTelefon = RechempfTelefon + splitWort[j + 1] + " ";
j++;
}
} else {
lever = true;
}
}
}
if (RechempfTelefon == "") {
lever = false;
splitWort = Main.splitbuff[i + 6].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (splitWort[j].equals("Mobilnr.:")) {
if (lever) {
while (j + 1 != splitWort.length) {
RechempfTelefon = RechempfTelefon + splitWort[j + 1] + " ";
j++;
}
} else {
lever = true;
}
}
}
}
}
if (Main.splitbuff[i].equals("Anlagen-ID.:")) {
String[] splitWort = Main.splitbuff[i + 1].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (splitWort[j].equals("Objekt:")) {
if (Main.isInt(splitWort[j + 1].split("")[0])) {
AnlageObjekt = splitWort[j + 1];
}
}
if (splitWort[j].equals("Anlage:")) {
if (Main.isInt(splitWort[j + 1].split("")[0])) {
AnlageAnlage = splitWort[j + 1];
}
}
}
}
String[] splitWort = Main.splitbuff[i].split(" ");
for (int j = 0; j < splitWort.length; j++) {
if (splitWort[j].equals("Waren-/Leistungsempfänger:")) {
splitWort = Main.splitbuff[i + 2].split(" ");
if (splitWort.length < 4) {
WarenLeistungsEmpf = Main.splitbuff[i + 2];
}
}
}
}
add();
}
private static void add() {
try {
PdfReader reader = new PdfReader(Main.userhome + "/Desktop/Bestellung-IBN/Muster/IBNProtokoll-Bosch.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
Main.userhome + "/Desktop/Bestellung-IBN/IBN's/Bosch/IBN-" + Main.pdfName + ".pdf"));
reader.close();
AcroFields form = stamper.getAcroFields();
form.setField("StraßeHausnummer 3", AnlageStiegeStockRaum);
form.setField("StraßeHausnummer 2", AnlageOrt);
form.setField("StraßeHausnummer 1", AnlageStraßeHausnummer);
form.setField("Anlage", AnlageAnlage);
form.setField("Anlagenstandort Objekt", AnlageObjekt);
form.setField("1", RechempfStraßeHausnummer);
form.setField("2", RechempfOrt);
form.setField("3", RechempfTelefon);
form.setField("Auftraggeber Rechnungsempfänger", RechempfKundennummer);
form.setField("Warenund Leistungsempfänger", WarenLeistungsEmpf);
stamper.close();
Path p1 = Paths.get(Main.userhome + "/Desktop/Bestellung-IBN/" + Main.pdfName + ".pdf");
Path p2 = Paths
.get(Main.userhome + "/Desktop/Bestellung-IBN/IBN's/Bosch/Bestellungen/" + Main.pdfName + ".pdf");
Files.move(p1, p2, REPLACE_EXISTING);
AnlageObjekt = "";
AnlageAnlage = "";
AnlageOrt = "";
AnlageStraßeHausnummer = "";
AnlageStiegeStockRaum = "";
RechempfKundennummer = "";
RechempfStraßeHausnummer = "";
RechempfOrt = "";
RechempfTelefon = "";
WarenLeistungsEmpf = "";
} catch (FileNotFoundException e) {
} catch (IOException e) {
} catch (DocumentException e) {
}
}
}
Java:
package mariusPDF;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
public class Ait {
static String ArtikelNr = "";
static String Produkt = "";
static String Kunde = "";
static String Seriennummer = "";
static String Installateur = "";
static boolean lever = true;
public static void main() {
for (int i = 0; i < Main.splitbuff.length; i++) {
switch (Main.splitbuff[i]) {
case "Pos. Artikelnr. Beschreibung":
try {
String[] splitWort = Main.splitbuff[i + 1].split(" ");
ArtikelNr = splitWort[1];
} catch (Exception e) {
}
break;
}
String[] splitWort = Main.splitbuff[i].split(" ");
for (int j = 0; j < splitWort.length; j++) {
switch (splitWort[j]) {
case "Produkt:":
for (int k = 2; k < splitWort.length; k++) {
Produkt = Produkt + splitWort[k] + " ";
}
break;
case "Seriennummer:":
String[] splitchar = splitWort[j + 1].split("");
for (int k = 0; k < splitchar.length; k++) {
if (lever) {
if (Main.isInt(splitchar[k]) || splitchar[k].equals("-")) {
Seriennummer = Seriennummer + splitchar[k];
} else {
lever = false;
}
}
}
lever = true;
break;
case "Installateur:":
int k = i + 1;
while (!Main.splitbuff[k].startsWith("Ansprechpartner:")) {
if (Main.splitbuff[k].startsWith("Tel.")) {
Installateur = Installateur + Main.splitbuff[k].replace("Tel.", "") + "\n";
} else {
Installateur = Installateur + Main.splitbuff[k] + "\n";
}
k++;
}
String[] temp = Installateur.split("\n");
Installateur = "";
for (int l = 0; l < temp.length; l++) {
if (l != 1 && l != temp.length - 1) {
Installateur = Installateur + temp[l] + "\n";
} else {
Installateur = Installateur + temp[l] + " ";
}
}
break;
case "Standort:":
k = i;
while (!Main.splitbuff[k].startsWith("Wunschtermin:")) {
if (Main.splitbuff[k].startsWith("Tel.")) {
Kunde = Kunde + Main.splitbuff[k].replace("Tel.", "") + "\n";
} else if (Main.splitbuff[k].startsWith("Standort:")) {
Kunde = Kunde + Main.splitbuff[k].replace("Standort:", "") + "\n";
} else if (Main.splitbuff[k].startsWith("Fax") || Main.splitbuff[k].startsWith("Zusatz")) {
} else if (Main.splitbuff[k].startsWith("Mobil")) {
Kunde = Kunde + Main.splitbuff[k].replace("Mobil", "") + "\n";
} else if (Main.splitbuff[k].startsWith("Mail")) {
Kunde = Kunde + Main.splitbuff[k].replace("Mail", "") + "\n";
} else {
Kunde = Kunde + Main.splitbuff[k] + "\n";
}
k++;
}
temp = Kunde.split("\n");
Kunde = "";
for (int l = 0; l < temp.length; l++) {
if (l != 1 && l != temp.length - 1) {
Kunde = Kunde + temp[l] + "\n";
} else {
Kunde = Kunde + temp[l] + " ";
}
}
break;
}
}
}
add();
}
private static void add() {
try {
PdfReader reader = new PdfReader(Main.userhome + "/Desktop/Bestellung-IBN/Muster/IBNProtokoll-ait.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
Main.userhome + "/Desktop/Bestellung-IBN/IBN's/ait/IBN-" + Main.pdfName + ".pdf"));
reader.close();
AcroFields form = stamper.getAcroFields();
form.setField("Textfeld2[0]", Seriennummer);
form.setField("Textfeld15[1]", Kunde);
form.setField("Textfeld15[0]", Installateur);
form.setField("Textfeld1[0]", Produkt);
form.setField("Textfeld3[0]", ArtikelNr);
stamper.close();
Path p1 = Paths.get(Main.userhome + "/Desktop/Bestellung-IBN/" + Main.pdfName + ".pdf");
Path p2 = Paths
.get(Main.userhome + "/Desktop/Bestellung-IBN/IBN's/ait/Bestellungen/" + Main.pdfName + ".pdf");
Files.move(p1, p2, REPLACE_EXISTING);
ArtikelNr = "";
Produkt = "";
Kunde = "";
Seriennummer = "";
Installateur = "";
} catch (FileNotFoundException e) {
} catch (IOException e) {
} catch (DocumentException e) {
}
}
}