Liebes Forum,
Ich befasse mich gerade damit, mehrere PDFs aus unterschiedlichen Quellen zu einem PDF "outPdf.pdf" zusammenzufassen.
Ich verwende org.apache.pdfbox und org.apache.commons.io.FileUtils
Was ich schon habe
Vorarbeiten:
PDFMergerUtility mergerUtility = new PDFMergerUtility();
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
Aufgabe 1. kopiere ein PDF von der Festplatte in outPdf.pdf. Funktioniert.
mergerUtility.addSource(new File("c:\\temp\\pdf1.pdf"));
Aufgabe 2: Erzeuge ein PDF in einem byteArray (z.B. mit jasper) und kopiere es in outPdf.pdf. Funktionert.
byte[] bytearray;
bytearray = pdfErzeuger.machEinPdf();
mergerUtility.addSource(new ByteArrayInputStream(bytearray));
Aufgabe 3: Hole ein PDF von einem Webserver und kopiere es in outPdf.pdf.
Funktioniert, aber gefällt mir so nicht.
URL pdfURL = new URL("http://www.nsa.gov/pdf/AngelasMails.pdf");
File tempFile = new File("c:\\temp\\pdfweb.pdf");
FileUtils.copyURLToFile(pdfURL, tempFile);
mergerUtility.addSource(tempFile);
outPdf.pdf Wirklichkeit werden lassen:
mergerUtility.setDestinationStream(byteArrayOutStream);
mergerUtility.mergeDocuments();
... und ab mit byteArrayOutStream als PDF auf die Festplatte oder als Antwort zum Browser.
Frage:
Was mir bei Aufgabe 3 nicht gefällt ist, dass ich den Umweg über die Festplatte gehe.
Was ich möchte wäre sowas:
FileUtils.copyURLToInputStream(pdfURL, new ByteArrayInputStream(bytearrayFromWeb));
mergerUtility.addSource(new ByteArrayInputStream(bytearrayFromWeb));
Problem: FileUtils.copyURLToInputStream wäre toll, gibt es aber nicht. Siehe :rtfm:
Gibt es einen möglichst kurzen, direkten Weg, eine Datei per URL zu holen und in einen ByteArray zu stecken?
Ich befasse mich gerade damit, mehrere PDFs aus unterschiedlichen Quellen zu einem PDF "outPdf.pdf" zusammenzufassen.
Ich verwende org.apache.pdfbox und org.apache.commons.io.FileUtils
Was ich schon habe
Vorarbeiten:
PDFMergerUtility mergerUtility = new PDFMergerUtility();
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
Aufgabe 1. kopiere ein PDF von der Festplatte in outPdf.pdf. Funktioniert.
mergerUtility.addSource(new File("c:\\temp\\pdf1.pdf"));
Aufgabe 2: Erzeuge ein PDF in einem byteArray (z.B. mit jasper) und kopiere es in outPdf.pdf. Funktionert.
byte[] bytearray;
bytearray = pdfErzeuger.machEinPdf();
mergerUtility.addSource(new ByteArrayInputStream(bytearray));
Aufgabe 3: Hole ein PDF von einem Webserver und kopiere es in outPdf.pdf.
Funktioniert, aber gefällt mir so nicht.
URL pdfURL = new URL("http://www.nsa.gov/pdf/AngelasMails.pdf");
File tempFile = new File("c:\\temp\\pdfweb.pdf");
FileUtils.copyURLToFile(pdfURL, tempFile);
mergerUtility.addSource(tempFile);
outPdf.pdf Wirklichkeit werden lassen:
mergerUtility.setDestinationStream(byteArrayOutStream);
mergerUtility.mergeDocuments();
... und ab mit byteArrayOutStream als PDF auf die Festplatte oder als Antwort zum Browser.
Frage:
Was mir bei Aufgabe 3 nicht gefällt ist, dass ich den Umweg über die Festplatte gehe.
Was ich möchte wäre sowas:
FileUtils.copyURLToInputStream(pdfURL, new ByteArrayInputStream(bytearrayFromWeb));
mergerUtility.addSource(new ByteArrayInputStream(bytearrayFromWeb));
Problem: FileUtils.copyURLToInputStream wäre toll, gibt es aber nicht. Siehe :rtfm:
Gibt es einen möglichst kurzen, direkten Weg, eine Datei per URL zu holen und in einen ByteArray zu stecken?