Wie kann ich dienen, ein PDF in einem browser ohne Speicherung einer Datei auf der server-Seite?
Habe ich zwei Methoden. Man erzeugt eine PDF-Datei auf der server-Seite und einem anderen, downloads die PDF-Datei auf der client-Seite.
Wie kann ich dies tun, ohne es zu speichern in der Seite des Servers und der client-Seite direkt herunterladen.
Im Folgenden werden die beiden Methoden:
public void downloadPDF(HttpServletRequest request, HttpServletResponse response) throws IOException{
response.setContentType("application/pdf");
response.setHeader("Content-disposition","attachment;filename="+ "testPDF.pdf");
FileInputStream fis = null;
DataOutputStream os = null;
try {
File f = new File("C://New folder//itext3.pdf");
response.setHeader("Content-Length",String.valueOf(f.length()));
fis = new FileInputStream(f);
os = new DataOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) >= 0) {
os.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
fis.close();
os.flush();
os.close();
}
response.setHeader("X-Frame-Options", "SAMEORIGIN");
}
Und:
public Document generatePDF() {
Document doc = new Document();
try {
File file = new File("C://New folder//itext_Test2.pdf");
FileOutputStream pdfFileout = new FileOutputStream(file);
PdfWriter.getInstance(doc, pdfFileout);
doc.addAuthor("TestABC");
doc.addTitle("Aircraft Details");
doc.open();
Anchor anchor = new Anchor("Aircraft Report");
anchor.setName("Aircraft Report");
Chapter catPart = new Chapter(new Paragraph(anchor), 1);
Paragraph para1 = new Paragraph();
Section subCatPart = catPart.addSection(para1);
para1.add("This is paragraph 1");
Paragraph para2 = new Paragraph();
para2.add("This is paragraph 2");
doc.add(catPart);
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
return doc;
}
die downloads der PDF-Datei auf der client-Seite code funktioniert
InformationsquelleAutor Mishal Harish | 2015-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Menschen, die Ihnen raten, zu verwenden
response.getOutputStream()
anstatt eineFileOutputStream
Recht. Siehe zum Beispiel die Hallo Servlet aus Kapitel 9 meines Buches:Jedoch manchen Browsern Probleme beim senden von bytes direkt wie diese. Es ist sicherer, die zum erstellen der Datei im Speicher mit einem
ByteArrayOutputStream
und dem browser mitteilen, wie viele bytes es können erwarten, in der Inhalt-header:Für den vollständigen Quellcode finden Sie unter PdfServlet. Sie können versuchen, den code hier: http://demo.itextsupport.com/book/
Sie haben ein Dokument-Objekt (vom Typ
Document
?) die Sie verwenden, um Inhalte generieren. Wie ist das anders als das "schreiben von Inhalt in das Programm"? Auch, Sie sind high-jacking eine alte Frage: sollte man nicht stellen Sie eine Frage als einen Kommentar. Sollten Sie nach eine Frage, als eine Frage. Die Chancen sind, dass Sie sich für die PdfReader/PdfStamper - Objekt. In diesem Fall, warum nicht, Lesen Sie die offizielle Dokumentation?InformationsquelleAutor Bruno Lowagie
Erstellen Sie ein FileOutputStream erzeugt pdf. Aber was Sie tun können, ist die Verwendung der Strom, der in HttpServletResponse auf der server-Seite-Methode und schreiben Sie die Datei direkt.
InformationsquelleAutor mark_o
Erhalten Sie eine
OutputStream
in IhremgeneratePDF
Methode. Wenn Sie übergeben dieresponse.getOutputStream()
zu der Methode erstellen Sie dann die PDF geschrieben werden, um die Antwort direkt.InformationsquelleAutor m4ktub
Nur rufen Sie diese Methode entsprechend aus
downloadPDF()
; z.B.:das diese Methode aufruft:
ByteArrayOutputStream
). Bitte entfernen Sie diese Antwort.Die Frage war nicht über die Speicherung als Datei. Aber ich habe aktualisiert den code nicht zu verwenden FileOutputStream. @Mishal
Das ist schon besser, aber einige Browser den download von Inhalten in Blöcken von 1024 bytes, wenn Sie nicht sagen Ihnen im Vorfeld, wie viele bytes zu erwarten sind. Wenn Sie die Größe einer PDF-Datei ist nicht ein genaues Vielfaches von 1024 bytes ist, wird das PDF bekommt eine Menge Kauderwelsch-bytes am Ende und einigen PDF-Viewern choke auf diese Byte (weil die Zuschauer beginnen das Lesen einer PDF-Datei am Ende der Datei). Daher Ihr Vorschlag,
response.getOutputStream()
funktioniert nicht bei allen Browsern/Viewern...Danke, ist notiert für die Zukunft auf. Alle modernen/gängigen Browser, die display-Problem?
InformationsquelleAutor Brett Walker