itext 生成pdf文档

时间:2021-02-18 05:39:39
  1. package com.tool.itext;  
  2.   
  3. import java.io.FileOutputStream;  
  4.   
  5. import com.itextpdf.text.BaseColor;  
  6. import com.itextpdf.text.Document;  
  7. import com.itextpdf.text.Element;  
  8. import com.itextpdf.text.Font;  
  9. import com.itextpdf.text.Image;  
  10. import com.itextpdf.text.PageSize;  
  11. import com.itextpdf.text.Paragraph;  
  12. import com.itextpdf.text.pdf.BaseFont;  
  13. import com.itextpdf.text.pdf.PdfContentByte;  
  14. import com.itextpdf.text.pdf.PdfPTable;  
  15. import com.itextpdf.text.pdf.PdfReader;  
  16. import com.itextpdf.text.pdf.PdfStamper;  
  17. import com.itextpdf.text.pdf.PdfWriter;  
  18.   
  19. public class PdfUtil {  
  20.     // 表头  
  21.     public static final String[] tableHeader = { "出借人(id)", "借款金额", "借款期限",  
  22.             "年利率", "借款开始日", "借款到期日", "截止还款日", "还款本息" };  
  23.   
  24.     // 数据表字段数  
  25.     private static final int colNumber = 8;  
  26.   
  27.     // 表格的设置  
  28.     private static final int spacing = 1;  
  29.   
  30.     // 表格的设置  
  31.     private static final int padding = 1;  
  32.   
  33.     public static void main(String[] args) {  
  34.         // 创建文Pdf文挡50, 50, 50,50左右上下距离  
  35.         Document document = new Document(PageSize.A4);  
  36.         try {  
  37.             // 使用PDFWriter进行写文件操作  
  38.             PdfWriter.getInstance(document,  
  39.                     new FileOutputStream("d:\\学生信息.pdf"));  
  40.             document.open();  
  41.             // 中文字体  
  42.             BaseFont bfChinese = BaseFont.createFont("STSong-Light",  
  43.                     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
  44.             Font fontChinese = new Font(bfChinese, 12, Font.BOLD);  
  45.             // 创建有colNumber(8)列的表格  
  46.             PdfPTable datatable = new PdfPTable(colNumber);  
  47.             // 定义表格的宽度  
  48.             int[] cellsWidth = { 5, 4, 4, 4, 5, 5, 5, 5 };  
  49.             datatable.setWidths(cellsWidth);  
  50.             // 表格的宽度百分比  
  51.             datatable.setWidthPercentage(100);  
  52.             datatable.getDefaultCell().setPadding(padding);  
  53.             datatable.getDefaultCell().setBorderWidth(spacing);  
  54.             // 设置表格的底色  
  55.             datatable.getDefaultCell().setBackgroundColor(BaseColor.WHITE);  
  56.             datatable.getDefaultCell().setHorizontalAlignment(  
  57.                     Element.ALIGN_CENTER);  
  58.             // 添加表头元素  
  59.             for (int i = 0; i < colNumber; i++) {  
  60.                 datatable.addCell(new Paragraph(tableHeader[i], fontChinese));  
  61.             }  
  62.             // 添加子元素  
  63.             for (int i = 0; i < colNumber; i++) {  
  64.                 datatable.addCell(new Paragraph(tableHeader[i], fontChinese));  
  65.             }  
  66.             Paragraph pf = new Paragraph("借款协议", fontChinese);  
  67.             pf.setAlignment(Element.ALIGN_CENTER);  
  68.             pf.setSpacingAfter(10f);  
  69.             document.add(pf);  
  70.             pf = new Paragraph(  
  71.                     "借款协议号:389     借款人:lianhuan515     出借人:详见本协议第一条\n签订日期:2013-05-20 \n借款人通过成如下协议: \n第一条:详情如下表所示: ",  
  72.                     fontChinese);  
  73.             pf.setSpacingAfter(20f);  
  74.             document.add(pf);  
  75.             document.add(datatable);  
  76.             pf = new Paragraph(  
  77.                     "第二条:还款 \n", fontChinese);  
  78.             document.add(pf);  
  79.             document.close();  
  80.             PdfReader reader = new PdfReader("d:\\学生信息.pdf", "PassWord".getBytes());// 选择需要印章的pdf  
  81.             PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(  
  82.                     "d:\\学生信息1.pdf"));// 加完印章后的pdf  
  83.             PdfContentByte over = stamp.getOverContent(1);// 设置在第几页打印印章  
  84.             Image image = Image  
  85.                     .getInstance("D:\\workspace\\old\\WebContent\\images\\zhang.jpg");// 选择透明图片  
  86.             image.setAlignment(1);  
  87.             image.scaleAbsolute(220, 220);// 控制图片大小  
  88.             image.setAbsolutePosition(200, 500);// 控制图片位置  
  89.             over.addImage(image);  
  90.             stamp.close();  
  91.         } catch (Exception e) {  
  92.             e.printStackTrace();  
  93.         }  
  94.       
  95.   
  96.     }  
  97. }  
[html] view plaincopyitext 生成pdf文档itext 生成pdf文档
  1. @RequestMapping(value = "/fileDownload/pdf/{id}.do"method = RequestMethod.GET)  
  2. public void pdfDownload(HttpServletRequest request,  
  3.         HttpServletResponse response, @PathVariable Long id) {  
  4.     /** 获得输出流 **/  
  5.     OutputStream outputStream = null;  
  6.     InputStream in = null;  
  7.     try {  
  8.         /** 文件名,可以从数据库中取 **/  
  9.         String fileName = id + ".pdf";  
  10.   
  11.         /** 获得输入流 **/  
  12.         in = new BufferedInputStream(request  
  13.                 .getSession()  
  14.                 .getServletContext()  
  15.                 .getResourceAsStream(  
  16.                         Constants.FILEPATH + File.separator + fileName));  
  17.   
  18.         /** 存放文件的字节数组,available()返回字节数 **/  
  19.         byte[] buffer = new byte[in.available()];  
  20.   
  21.         /** 从流中将文件读取到字节数组中 **/  
  22.         in.read(buffer);  
  23.   
  24.         /** 转换编码 **/  
  25.         fileName = URLEncoder.encode(fileName, "UTF-8");  
  26.   
  27.         /** 重置response **/  
  28.         response.reset();  
  29.   
  30.         /** 设置HTML头部信息 **/  
  31.         response.setHeader("Content-Disposition", "attachment; filename=\""  
  32.                 + fileName + "\"");  
  33.         response.addHeader("Content-Length", "" + buffer.length);  
  34.         response.setContentType("application/octet-stream;charset=UTF-8");  
  35.   
  36.         outputStream = new BufferedOutputStream(response.getOutputStream());  
  37.   
  38.         /** 从字节数组中将文件写到输出流中 **/  
  39.         outputStream.write(buffer);  
  40.   
  41.         /** 清空输出流 **/  
  42.         outputStream.flush();  
  43.   
  44.         /*** 关闭输入流 */  
  45.   
  46.     } catch (IOException e) {  
  47.         // TODO Auto-generated catch block  
  48.         e.printStackTrace();  
  49.     } finally {  
  50.         try {  
  51.             in.close();  
  52.             outputStream.close();  
  53.         } catch (IOException e) {  
  54.             // TODO Auto-generated catch block  
  55.             e.printStackTrace();  
  56.         }  
  57.   
  58.     }  
  59. }