This example covers the follwing topics
- Dynamically generate PDF from Java Servlet with data from MySQL database
- Specify document properties such as Author, Title, Creation Date, Page Size, etc.
- Create Text with various font size and style
- Create a Paragraph
- Create anchor and anchor reference
- Create a multiple page document
package com.as400samplecode;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import com.itextpdf.text.Anchor;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class GeneratePDF extends HttpServlet {
private static final long serialVersionUID = 1L;
public GeneratePDF() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get the output stream for writing binary data in the response.
ServletOutputStream os = response.getOutputStream();
//set the response content type to PDF
response.setContentType("application/pdf");
//create a new document
Document doc = new Document();
//create some special styles and font sizes
Font bfBold18 = new Font(FontFamily.TIMES_ROMAN, 18, Font.BOLD, new BaseColor(0, 0, 0));
Font bfBold12 = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLDITALIC, new BaseColor(0, 0, 0));
Font bf12 = new Font(FontFamily.TIMES_ROMAN, 12);
Connection conn = null;
PreparedStatement stmt = null;
String sql = null;
try{
//create an instance of the PdfWriter using the output stream
PdfWriter.getInstance(doc, os);
//document header properties
doc.addAuthor("betterThanZero");
doc.addCreationDate();
doc.addProducer();
doc.addCreator("MySampleCode.com");
doc.addTitle("DemoPDF");
doc.setPageSize(PageSize.LETTER);
doc.open();
//add a new paragraph
doc.add( new Paragraph("List of Countries...", bfBold18));
//connection to the MySQL database
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
conn = ((DataSource) ctx.lookup("jdbc/mysql")).getConnection();
//just get 10 countries from my database for demo
sql = "Select * from country where name >= 'C' order by name,code LIMIT 0,10";
stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
//create an anchor reference
Anchor anchor = new Anchor(rs.getString("name").trim(),bfBold12);
anchor.setReference("#" + rs.getString("code").trim());
//add the anchor to the document
doc.add(anchor);
//add an empty line
doc.add( Chunk.NEWLINE );
}
// Move cursor to the first row
rs.first();
while(rs.next()){
//start a new page here
doc.newPage();
//create a new paragraph for each country
Paragraph countryParagraph = new Paragraph();
//create an anchor
Anchor anchor = new Anchor(rs.getString("name"), bfBold18);
anchor.setName(rs.getString("code").trim());
//add the anchor to the paragraph
countryParagraph.add(anchor);
//add the paragraph to the document
doc.add(countryParagraph);
//add some detail information about the country
doc.add( new Paragraph("Country Code: " + rs.getString("code").trim(), bf12));
doc.add( new Paragraph("Continent: " + rs.getString("continent").trim(), bf12));
doc.add( new Paragraph("Region: " + rs.getString("region").trim(), bf12));
doc.add( new Paragraph("Life Expectancy: " + rs.getString("lifeExpectancy").trim(), bf12));
doc.add( new Paragraph("GNP: " + rs.getString("gnp").trim(), bf12));
}
rs.close();
stmt.close();
stmt = null;
conn.close();
conn = null;
doc.close();
}catch(DocumentException e){
e.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
}
}


No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.