sammeln, um die Input (pdf der) und verschmelzen zu einem einzigen PDF-Dokument von PDFMergerUtility verwendet, ist unter meinem Code (Servlets mit Glassfish-Server)IO Exception Stream geschlossen mit PDFMergerUtility
static HttpsURLConnection connectionGet;
static List<InputStream> sources = new ArrayList<>();
Integer totalPageCount = Integer.parseInt(pageCountValue);
try {
for (int i = 1; i <= totalPageCount; i++) {
String inputValue = countryCode + "/" + kindCode;
String pdfUrl = "abc.org/rest-services/published-data/images/" + inputValue + "/fullimage.pdf?Range=" + i;
URL pdfDownload = new URL(pdfUrl);
connectionGet = (HttpsURLConnection) pdfDownload.openConnection();
String authorizationHeader1 = "Bearer " + getToken;
connectionGet.setRequestProperty("Authorization", authorizationHeader1);
connectionGet.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connectionGet.setRequestMethod("GET");
int pageResponseCode = connectionGet.getResponseCode();
if (pageResponseCode != 404) {
sources.add(connectionGet.getInputStream());
}
}
PDFMergerUtility pdfMerger = new PDFMergerUtility();
pdfMerger.addSources(sources);
String pdfFileName = countryCode+kindCode+".pdf";
String contextPath = request.getServletContext().getRealPath("/");
pdfMerger.setDestinationFileName(contextPath+pdfFileName);
try {
pdfMerger.mergeDocuments();
} catch (COSVisitorException ex) {
Logger.getLogger(PDFDownloadResult.class.getName()).log(Level.SEVERE, null, ex);
}
out.println("Document Downloaded Successfully in below server Path" + "<p><b>" +contextPath + pdfFileName+ "</b>");
} catch (IOException e) {
} finally {
// cleanup
sources.stream().forEach((source) -> {
IOUtils.closeQuietly(source);
});
}
connectionGet.disconnect();
Alles wie erwartet funktioniert. wenn sie ausgeführt werden jedoch ein zweites Mal, wenn ich die folgende Fehlermeldung erhalten: Strom
Severe: java.io.IOException: stream is closed
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.ensureOpen(HttpURLConnection.java:3295)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3320)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at java.io.PushbackInputStream.read(PushbackInputStream.java:139)
at org.apache.pdfbox.io.PushBackInputStream.read(PushBackInputStream.java:90)
at org.apache.pdfbox.io.PushBackInputStream.peek(PushBackInputStream.java:68)
at org.apache.pdfbox.io.PushBackInputStream.isEOF(PushBackInputStream.java:156)
at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1517)
at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:360)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:186)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1235)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1202)
at org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:235)
at org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:192)
Edited geschlossen: das Problem IOUtils.closeQuietly(source);
Quellenwert ist nicht gelöscht propelry
Beispiel: exexuted in erstem Mal (nach deploy) wird die Zählung sein 2 (Quellen-Liste), so dass das erzeugte Dokument ohne Probleme
ich versuche dann zum zweiten Mal zu laufen, übernimmt aktuelle Gesamtseitenzahl 3 ist, nun die Quellen zählen wird 5, das ist falsch
so wenden Sie sich bitte h ELP mir, wie kann klar die sources
Liste, nachdem das Dokument
Die Ausführung der zweiten Zeit bedeutet, dass das Programm das zweite Mal ausgeführt oder als Methode zum zweiten Mal während der Ausführung aufgerufen wird. –
@karthi: Dies ist Web-Anwendung ausführen, das erste Mal ist es gut und das nächste Mal produzieren strem close Ausnahme – Prabu
Ob Sie versucht, ohne disconnect() -Funktion? –