Der Ursprung des Problems:
Vor nicht allzu langer Zeit habe ich ein kleines Projekt zur Generierung von PDF-Berichten über JSP durchgeführt, das mir die Augen geöffnet hat. Einige der Informationen des Unternehmens bilden HTML-Berichte über das Netzwerk. Obwohl der IE den darin angezeigten Inhalt direkt ausdrucken kann, sieht es aus Sicht der Benutzeroberfläche nicht sehr schön aus, wenn die HTML-Anzeigeergebnisse direkt ausgedruckt werden. Wenn Sie es in eine PDF-Datei konvertieren und dann ausdrucken, ist der Druckeffekt viel besser.
Einführung in iText
iText ist eine Open-Source-Java-Klassenbibliothek, die zum einfachen Generieren von PDF-Dateien verwendet werden kann. Sie können die neueste Version der Klassenbibliothek herunterladen, indem Sie http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948 besuchen. Nachdem der Download abgeschlossen ist, erhalten Sie ein .jar-Paket den JDK-Klassenpfad, um ihn zu verwenden. Wenn chinesische, japanische und koreanische Zeichen in der generierten PDF-Datei erscheinen müssen, müssen Sie auch das Paket iTextAsian.jar herunterladen, indem Sie http://itext.sourceforge.net/downloads/iTextAsian.jar besuchen.
Zur Verwendung der iText-Klassenbibliothek finden Sie unter http://www.lowagie.com/iText/tutorial/index.html ein ausführlicheres Tutorial. Dieses Tutorial beginnt von vorne und führt systematisch in die Methoden und Techniken zum Platzieren von Texten, Bildern, Tabellen usw. in PDF-Dateien ein. Nachdem Sie dieses Tutorial gelesen haben, werden Sie in der Lage sein, einige einfache bis komplexe PDF-Dateien zu erstellen. Der Versuch, alle Schwierigkeiten, die beim Generieren von PDF-Dateien auftreten, mithilfe von Tutorials zu lösen, ist jedoch zweifellos ein Luxus. Daher ist es sehr wichtig, die iText-API-Dokumentation zu lesen. Wenn Leser die Klassenbibliothek herunterladen, können sie auch die Dokumentation der Klassenbibliothek herunterladen.
So verwenden Sie iText zum Generieren von PDF-Berichten in einem Java-Programm.
Das Folgende ist das einfachste Beispiel im obigen Tutorial. Dieses Beispiel zeigt das allgemeine Programm-Framework zum Generieren von PDF-Dateien über iText. Der Leser muss lediglich den Inhalt, den er in die PDF-Datei einfügen möchte, zwischen den beiden Anweisungen document.open(); und document.close(); hinzufügen. In diesem Beispiel wird der PDF-Datei lediglich eine Textzeile „Hello World“ hinzugefügt.
Document document = new Document();
try
{
PdfWriter.getInstance(document, new FileOutputStream("Chap0101.pdf
"
)
)
; DocumentException de)
{
System.err.println(de.getMessage());
}
Catch(IOException ioe)
{
System.err.println(ioe.getMessage()
}
document.close
();
Das obige Beispiel: Der Rahmen des Programms ist sehr klar und unkompliziert. Die Angabe der Position von Text, Bildern und Tabellen in PDF-Dateien ist jedoch eine sehr mühsame Aufgabe. Außer dem Prozess, die Position im Programm ständig zu ändern, dann das Programm auszuführen, die PDF-Datei zu generieren und zu beobachten, ob die Position der Elemente im PDF angemessen ist, scheint es keine andere bessere Methode zu geben.
Wie man PDF-Berichte über JSP generiert,
ist in iText-Tutorials nicht verfügbar, und im Internet gibt es relativ wenige relevante Informationen. Ich habe einmal gesehen, wie jemand auf CSDN postete und nach Implementierungsdetails fragte, und jemand antwortete auf das Implementierungsprinzip: Zuerst wird eine PDF-Datei auf dem Server generiert, und dann entscheidet sich der Benutzer, sie herunterzuladen oder zu öffnen, indem er auf den Hyperlink klickt, der auf die PDF-Datei verweist. Das ist eine Idee oder eine der Ideen. Dieser Artikel verwirklicht diese Idee, gibt eine weitere Idee und setzt sie auf zwei Arten um.
1) PDF-Dateien direkt auf dem Server generieren.
<%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%>
<%
String filename = "PDF"+(new Random()).nextInt ()+".pdf" ;
Document document = new Document(PageSize.A4);
ServletOutputStream
out1 = Response.getOutputStream();
try
{
PdfWriter.getInstance(document, new FileOutputStream(filename) );
);
document.add(new Paragraph("Hello World"));
document.close();
}
Catch(Exception e){}%>
Das obige Programm generiert eine statische PDF-Datei auf dem Server. Offensichtlich sollte der Name der bei jedem Lauf erhaltenen PDF-Datei eindeutig sein und nicht dupliziert werden. Dieses Programm verwendet eine Zufallsfunktion, um die generierten PDF-Dateien zu benennen. Der Nachteil dieses Programms besteht darin, dass bei jeder Ausführung eine PDF-Datei auf dem Server generiert wird. Wenn diese nicht rechtzeitig gelöscht wird, wird die Anzahl der Dateien immer größer. Dies ist offensichtlich etwas, was der Website-Betreuer nicht möchte sehen.
2) Übertragen Sie die PDF-Datei in Form eines Streams in den Cache des Clients. Dies hat den Vorteil, dass keine „Relikte“ auf dem Server zurückbleiben.
i) Generieren Sie direkt über die JSP-Seite
<%@
page import="java.io.*,java.awt.Color,com.lowagie.text.*,com.lowagie.text.pdf.*"%>
<%
Response.setContentType( "application/pdf" );
Document
document = new Document();
ByteArrayOutputStream(
)
;
document.close();
DataOutput
output
= new DataOutputStream( Response.getOutputStream() )
; length; i++ )
{
output.writeByte( bytes[i]
}
%>
ii) Erzeugt durch Servlet
import java.io.*;
import javax.servlet.*
;
importcom.lowagie.text
.
*;
HttpServletResponse-Antwort)
löst IOException,ServletException
{
Document document = new Document(PageSize.A4, 36,36,36,36);
ByteArrayOutputStream
ba = new ByteArrayOutputStream();
try
{
PdfWriterwriter = PdfWriter.getInstance(document, ba);
.open();
document.add(new Paragraph("Hello World"));
}
Catch(DocumentException de)
{
de.printStackTrace
("A Document error:" +de.getMessage() );
}
document.close();
Response.setContentLength
(ba.size())
;
ba.writeTo(out)
. ();
}
Letztendlich
in meinem Projekt den zweiten Ansatz verwendet. Der Quellcode dieses Artikels wurde auf meinem Tomcat4 debuggt. Ich hoffe, es kann allen Komfort bieten.
Jeder kann es gerne verwenden. Wenn Sie es erneut drucken möchten, geben Sie bitte die Quelle an.