首先制作一个pdf模板
1. 打开Adobe Acrobat,选择“文件 > 创建PDF(F)> 从扫描仪(S)…”, 将原始单据《银行开立个人账户申请书》扫描后保存为“bank.jpg”。
2. 在Word中创建一个空白的A4规格文档,文件保存为“empty.doc”。
3. 选择“文件 > 创建PDF(F)> 从文件(F)…”打开“empty.doc”文件,在Adobe Acrobat 7.0中生成一个空白的pdf文件,另存为“empty.pdf”。
4. 在Adobe Acrobat中选择“文档(D)> 添加水印和背景(B)… ”,在文件“来源”区域中选择“从文件” 点击“浏览”,选择“bank.jpg”。
注意在“位置和外观”中,垂直对齐为:“上边”;水平对齐为:“左边”,点击“确定”。
5. 保存文件为“BankTemplet.pdf”。
6. BankTemplet.pdf文件
打开“BankTemplet.pdf”文件,选择“工具(T)> 高级编辑工具(A)> 文本域工具(T)”,在需要打印数据项的位置放置文本框,调整合适的大小,设置文本域的名称、字体、外观、格式、动作等属性。
如:在开户人栏的“姓名”数据项拖放一个文本域名称为CLIENT_NAME,字体为“宋体”字号为“12”。7 按S-2-2-6的方法依次定义其他的数据项文本域。
注:域名要大写,可以使用数字。
8. 替换“BankTemplet.pdf”文件中的背景:
方法(一):选择“文档(D)> 添加水印和背景(B)… ”,在文件“来源”区域中选择“从文件”。 点击“浏览”选择“empty.pdf”,背景图消失,点击“确定”。
方法(二):选择“文档(D)> 添加水印和背景(B)… ”,在文件“来源”区域中选择“从文本” 在右侧的输入框中只输入空格符,点击“确定”
9. 保存“BankTemplet.pdf”模板文件,套打格式的模板制作完成。
创建一个servlet
Java代码
- package com.linkage.invoice;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.lowagie.text.DocumentException;
- import com.lowagie.text.Font;
- import com.lowagie.text.pdf.AcroFields;
- import com.lowagie.text.pdf.BaseFont;
- import com.lowagie.text.pdf.PdfContentByte;
- import com.lowagie.text.pdf.PdfReader;
- import com.lowagie.text.pdf.PdfStamper;
- public class GenPDFServlet extends HttpServlet{
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("GBK");
- String username = request.getParameter("username");
- String phonenum = request.getParameter("phonenum");
- System.out.println(username);
- System.out.println(phonenum);
- response.reset();
- ByteArrayOutputStream ba = new ByteArrayOutputStream();
- /*打开已经定义好字段的pdf模板*/
- String TemplatePDF = getServletContext().getRealPath("/") + "/invoice.pdf";
- PdfReader reader = new PdfReader(TemplatePDF);
- try {
- /*将要生成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("username", username);
- form.setField("phonenum", phonenum);
- stamp.setFormFlattening(true);
- /* 必须要调用这个,否则文档不会生成的 */
- stamp.close();
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- response.setContentType("application/pdf");
- /* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */
- response.setHeader("Content-disposition","attachment; filename="+"report.pdf" );
- response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
- response.setHeader("Pragma", "public");
- response.setDateHeader("Expires", (System.currentTimeMillis() + 1000));
- 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());
- }
- }
- }
-