2016-08-26 6 views
2

Ich habe ein Servlet, das ein PDF-Dokument an den anfordernden Benutzer zurückgibt. Wenn es von einem Browser aufgerufen wird, wird das PDF-Dokument automatisch heruntergeladen. Nun muss ich dieses Servlet von Java (Standalone-Code, nicht Server-Seite) aufrufen. Sobald dieser Java-Code das PDF-Dokument erhält, muss es mithilfe der Apache PDF Box API in Bilder konvertiert werden.BufferedReader in Datei konvertieren

So sieht mein Java-Code aus. Es schreibt Bytes auf den Bildschirm.

URL url = new URL("http://localhost:8080/Stream/Document&type=pdf"); 
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
String line = in.readLine(); 
System.out.println(line); 
in.close(); 

und das ist, wie der Code es zu Bildern konvertiert sieht aus wie

String pdfFileName = "myfile.pdf"; 
PDDocument document = PDDocument.load(new File(pdfFileName)); 

Jetzt muss ich diese beiden, so dass die PDF-Datei zu kombinieren, die (im Speicher heruntergeladen wird, würde es vorziehen, nicht zu schreibe es in Dateisystem) wird in JPG konvertiert. Anstatt also einen fest codierten Dateinamen zu übergeben, muss ich das BufferedReader-Objekt irgendwie in das File-Objekt konvertieren und es als Eingabe an PDDocument übergeben.

Ich bin nicht in der Lage zu erkennen, wie diese Umwandlung passieren würde.

+1

Hinweis: https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/ pdmodel/PDDocument.html # load (java.io.InputStream) (und ** InputStream ** Reader) –

+1

Ihr erster Fehler ist, dass PDF-Dateien keine Zeichendaten sind und mit einem 'InputStream' gelesen werden sollten, nicht mit einem' Reader' . – EJP

Antwort

1

From the docs, PDDocument kann auch von einem Byte-Array oder InputStream geladen werden.

Verwenden Sie einfach den Eingangsstrom von Ihrem url und übergeben Sie diesen an PDDocument.load(InputStream).

+0

Ich habe folgendes versucht [code] \t URL url = neue URL ("http: // localhost: 8080/Stream/Dokument & type = pdf"); \t \t InputStream in = url.openStream(); \t \t PDDocument Dokument = PDDocument.load (in); \t \t document.close(); [/ code] aber es gibt mir die folgenden Fehler [code] java.io.IOException: Fehler: Header enthält keine version \t bei org.apache.pdfbox.pdfparser.PDFParser.parse (PDFParser .java-: 244) \t bei org.apache.pdfbox.pdmodel.PDDocument.load (PDDocument.java:973) \t bei org.apache.pdfbox.pdmodel.PDDocument.load (PDDocument.java:875) [/ Code] – swati

+2

Es scheint, dass Ihr Servlet Daten sendet, die kein PDF sind. Können Sie dieses PDF mit einem normalen PDF-Viewer öffnen? –

1

Sie könnten load(InputStream input) (https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/pdmodel/PDDocument.html#load(java.io.InputStream)) und direkt Hand url.openStream() dazu verwenden.

UPDATE: Tilman Hausherr Kommentar berücksichtigen könnten Sie try-with-resources verwenden:

final URL url = new URL("http://localhost:8080/Stream/Document&type=pdf"); 
    final PDDocument document; 
    try (InputStream urlStream = url.openStream()) { 
     document = PDDocument.load(urlStream); 
    } 
+1

Vergessen Sie nicht, den Stream zu schließen. –