itext生成发票套打

Java 专栏收录该内容
21 篇文章 1 订阅

首先制作一个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代码

  1. package com.linkage.invoice;     
  2.     
  3. import java.io.ByteArrayOutputStream;     
  4. import java.io.IOException;     
  5.     
  6. import javax.servlet.ServletException;     
  7. import javax.servlet.ServletOutputStream;     
  8. import javax.servlet.http.HttpServlet;     
  9. import javax.servlet.http.HttpServletRequest;     
  10. import javax.servlet.http.HttpServletResponse;     
  11.     
  12. import com.lowagie.text.DocumentException;     
  13. import com.lowagie.text.Font;     
  14. import com.lowagie.text.pdf.AcroFields;     
  15. import com.lowagie.text.pdf.BaseFont;     
  16. import com.lowagie.text.pdf.PdfContentByte;     
  17. import com.lowagie.text.pdf.PdfReader;     
  18. import com.lowagie.text.pdf.PdfStamper;     
  19.     
  20.     
  21. public class GenPDFServlet extends HttpServlet{     
  22.     
  23.     protected void doGet(HttpServletRequest request, HttpServletResponse response)     
  24.             throws ServletException, IOException {     
  25.              
  26.         request.setCharacterEncoding("GBK");     
  27.         String username = request.getParameter("username");     
  28.         String phonenum = request.getParameter("phonenum");     
  29.         System.out.println(username);     
  30.         System.out.println(phonenum);     
  31.         response.reset();     
  32.              
  33.         ByteArrayOutputStream ba = new ByteArrayOutputStream();     
  34.         /*打开已经定义好字段的pdf模板*/    
  35.         String TemplatePDF = getServletContext().getRealPath("/") + "/invoice.pdf";     
  36.         PdfReader reader = new PdfReader(TemplatePDF);     
  37.              
  38.              
  39.         try {     
  40.             /*将要生成pdf文件的名称*/    
  41.             PdfStamper stamp = new PdfStamper(reader, ba);     
  42.                  
  43.             PdfContentByte under = stamp.getUnderContent(1);     
  44.                  
  45.             /* 使用中文字体 */        
  46.             BaseFont bf = BaseFont.createFont("STSong-Light""UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);         
  47.             Font FontChinese = new Font(bf, 12, Font.NORMAL);         
  48.         
  49.             /* 取出报表模板中的所有字段 */        
  50.             AcroFields form = stamp.getAcroFields();         
  51.         
  52.             /* 为字段赋值,注意字段名称是区分大小写的 */        
  53.             form.setField("username", username);         
  54.             form.setField("phonenum", phonenum);         
  55.         
  56.             stamp.setFormFlattening(true);         
  57.             /* 必须要调用这个,否则文档不会生成的 */        
  58.             stamp.close();         
  59.     
  60.         } catch (DocumentException e) {     
  61.             e.printStackTrace();     
  62.         }     
  63.              
  64.         response.setContentType("application/pdf");         
  65.         /* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */        
  66.         response.setHeader("Content-disposition","attachment; filename="+"report.pdf" );     
  67.         response.setHeader("Cache-Control""must-revalidate, post-check=0, pre-check=0");        
  68.         response.setHeader("Pragma""public");        
  69.         response.setDateHeader("Expires", (System.currentTimeMillis() + 1000));     
  70.         response.setContentLength(ba.size());         
  71.         try {         
  72.             ServletOutputStream out = response.getOutputStream();         
  73.             ba.writeTo(out);         
  74.             out.flush();         
  75.             out.close();         
  76.             ba.close();         
  77.         } catch (IOException e) {         
  78.             e.printStackTrace();         
  79.             System.err.println("A Document error:" + e.getMessage());         
  80.         }         
  81.     
  82.     }     
  83.          
  84. }    

  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值