下面这个servlet代码填充模板(见附件中testEx.pdf文件)中的字段,代码如下:
java 代码
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.*;
- import com.lowagie.text.*;
- import com.lowagie.text.pdf.*;
- public class GenPdfServlet extends HttpServlet {
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException,
- java.io.IOException {
- response.reset();
- ByteArrayOutputStream ba = new ByteArrayOutputStream();
- try {
- /* 打开已经定义好字段以后的pdf模板 */
- String TemplatePDF = getServletContext().getRealPath(".")
- + "testEx.pdf";
- PdfReader reader = new PdfReader(TemplatePDF);
- /* 将要生成的目标PDF文件名称 */
- PdfStamper stamp = new PdfStamper(reader, ba);
- PdfContentByte under = stamp.getUnderContent(1);
- /* 使用中文字体 */
- BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
- BaseFont.NOT_EMBEDDED);
- Font FontChinese = new Font(bf, 12, Font.NORMAL);
- /* 取出报表模板中的所有字段 */
- AcroFields form = stamp.getAcroFields();
- /* 为字段赋值,注意字段名称是区分大小写的 */
- form.setField("name", "lixy");
- form.setField("age", "26");
- stamp.setFormFlattening(true);
- /* 必须要调用这个,否则文档不会生成的 */
- stamp.close();
- } catch (DocumentException de) {
- de.printStackTrace();
- System.err.println("A Document error:" + de.getMessage());
- }
- response.setContentType("application/pdf");
- /* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */
- // response.setHeader("Content-disposition","attachment; filename="
- // +"report.pdf" );
- response.setContentLength(ba.size());
- try {
- ServletOutputStream out = response.getOutputStream();
- ba.writeTo(out);
- out.flush();
- out.close();
- ba.close();
- } catch (IOException e) {
- e.printStackTrace();
- System.err.println("A Document error:" + e.getMessage());
- }
- }
- }