1. package com.wzh.itext;
  2.  
  3. import com.itextpdf.text.Chunk;
  4. import com.itextpdf.text.Document;
  5. import com.itextpdf.text.DocumentException;
  6. import com.itextpdf.text.Element;
  7. import com.itextpdf.text.Font;
  8. import com.itextpdf.text.Image;
  9. import com.itextpdf.text.PageSize;
  10. import com.itextpdf.text.Paragraph;
  11. import com.itextpdf.text.pdf.BaseFont;
  12. import com.itextpdf.text.pdf.PdfPCell;
  13. import com.itextpdf.text.pdf.PdfPTable;
  14. import com.itextpdf.text.pdf.PdfWriter;
  15. import java.io.ByteArrayOutputStream;
  16. import java.io.FileNotFoundException;
  17. import java.io.IOException;
  18. import java.util.logging.Level;
  19. import java.util.logging.Logger;
  20.  
  21. /**
  22. * @date 2015-3-17 12:48:24
  23. * @author y
  24. * @desc
  25. */
  26. public class ItextUtil {
  27.  
  28. /**
  29. * 生成带底图的PDF字节流
  30. * @param swdjz
  31. * @return
  32. */
  33. public static byte[] createPdfBytes(Swdjz swdjz){
  34. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  35. byte []content = null;
  36.  
  37. Document doc = new Document(PageSize.A4.rotate(), 50, 50, 50, 50); //创建文档 ,A4纸,横屏
  38.  
  39. try {
  40. PdfWriter pw = PdfWriter.getInstance(doc, baos);
  41. doc.open();
  42.  
  43. //解决中文不显示问题
  44. BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  45. //定义字体
  46. Font fontChinaTitle14 = new Font(bfChinese, 14, Font.BOLD);
  47. Font fontChina16 = new Font(bfChinese, 16);
  48. Font fontChina14 = new Font(bfChinese, 14);
  49.  
  50. //加载电子税务登记证背景图片
  51. Image imgBg = Image.getInstance(swdjz.getBgPath());
  52. imgBg.setAbsolutePosition(0, 0); //设置图片位置
  53. imgBg.scaleAbsolute(842, 595);//设置图片大小
  54. doc.add(imgBg);
  55.  
  56. // 空行
  57. Paragraph blank = new Paragraph(" ");
  58. doc.add(blank);
  59. doc.add(blank);
  60. doc.add(blank);
  61. doc.add(blank);
  62. doc.add(blank);
  63.  
  64. /*右上角信息*/
  65. //档案号
  66. Chunk c01 = new Chunk(swdjz.getDanh(), fontChina16);
  67. Paragraph snoParagraph01 = new Paragraph();
  68. snoParagraph01.add(c01);
  69. snoParagraph01.setAlignment(Element.ALIGN_RIGHT);
  70. snoParagraph01.setIndentationRight(30);
  71. snoParagraph01.setSpacingBefore(10);
  72. doc.add(snoParagraph01);
  73. //纳税人识别号
  74. Chunk c02 = new Chunk(swdjz.getNsrsbh(), fontChina16);
  75. Paragraph snoParagraph02 = new Paragraph();
  76. snoParagraph02.add(c02);
  77. snoParagraph02.setAlignment(Element.ALIGN_RIGHT);
  78. snoParagraph02.setIndentationRight(28);
  79. doc.add(snoParagraph02);
  80.  
  81. doc.add(blank);
  82. doc.add(blank);
  83.  
  84. /*正文*/
  85. //纳税人名称
  86. Chunk c03 = new Chunk(swdjz.getNsrmc(), fontChina16);
  87. Paragraph snoParagraph03 = new Paragraph();
  88. snoParagraph03.add(c03);
  89. snoParagraph03.setIndentationLeft(220);
  90. doc.add(snoParagraph03);
  91.  
  92. doc.add(blank);
  93.  
  94. //法定代表人
  95. Chunk c04 = new Chunk(swdjz.getFddbr(), fontChina16);
  96. Paragraph snoParagraph04 = new Paragraph();
  97. snoParagraph04.add(c04);
  98. snoParagraph04.setIndentationLeft(220);
  99. doc.add(snoParagraph04);
  100.  
  101. doc.add(blank);
  102.  
  103. //地址
  104. Chunk c05 = new Chunk(swdjz.getDz(), fontChina16);
  105. Paragraph snoParagraph05 = new Paragraph();
  106. snoParagraph05.add(c05);
  107. snoParagraph05.setIndentationLeft(220);
  108. snoParagraph05.setSpacingBefore(3);
  109. doc.add(snoParagraph05);
  110.  
  111. doc.add(blank);
  112.  
  113. //登记注册类型
  114. Chunk c06 = new Chunk(swdjz.getDjzclx(), fontChina16);
  115. Paragraph snoParagraph06 = new Paragraph();
  116. snoParagraph06.add(c06);
  117. snoParagraph06.setIndentationLeft(220);
  118. snoParagraph06.setSpacingBefore(4);
  119. doc.add(snoParagraph06);
  120.  
  121. doc.add(blank);
  122.  
  123. //经营范围
  124. Chunk c07 = new Chunk(swdjz.getJyfw(), fontChina14);
  125. Paragraph snoParagraph07 = new Paragraph();
  126. snoParagraph07.add(c07);
  127. snoParagraph07.setIndentationLeft(220);
  128. doc.add(snoParagraph07);
  129.  
  130. doc.add(blank);
  131.  
  132. //批准设立机关
  133. Chunk c08 = new Chunk(swdjz.getPzsljg(), fontChina16);
  134. Paragraph snoParagraph08 = new Paragraph();
  135. snoParagraph08.add(c08);
  136. if(swdjz.getJyfw().length()>37){
  137. snoParagraph08.setSpacingBefore(-10);
  138. }else{
  139. snoParagraph08.setSpacingBefore(4);
  140. }
  141. snoParagraph08.setIndentationLeft(220);
  142. doc.add(snoParagraph08);
  143.  
  144. doc.add(blank);
  145.  
  146. //扣缴义务
  147. Chunk c09 = new Chunk(swdjz.getKjyw(), fontChina16);
  148. Paragraph snoParagraph09 = new Paragraph();
  149. snoParagraph09.add(c09);
  150. if(swdjz.getJyfw().length()<38){
  151. snoParagraph09.setSpacingBefore(4);
  152. }
  153. snoParagraph09.setIndentationLeft(220);
  154. doc.add(snoParagraph09);
  155.  
  156. doc.add(blank);
  157. doc.add(blank);
  158. doc.add(blank);
  159.  
  160. /*右下角*/
  161. //发证日期
  162. Chunk cYear = new Chunk("一三 ", fontChina16);
  163. Chunk cMonth = new Chunk(" 八 ", fontChina16);
  164. Chunk cDay = new Chunk(" 十二 ", fontChina16);
  165.  
  166. Paragraph snoParagraph10 = new Paragraph();
  167. snoParagraph10.add(cYear);
  168. snoParagraph10.add(cMonth);
  169. snoParagraph10.add(cDay);
  170. snoParagraph10.setSpacingBefore(4);
  171. snoParagraph10.setIndentationRight(45);
  172. snoParagraph10.setAlignment(Element.ALIGN_RIGHT);
  173. doc.add(snoParagraph10);
  174.  
  175. doc.close();
  176.  
  177. content = baos.toByteArray();
  178.  
  179. } catch (FileNotFoundException ex) {
  180. Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
  181. } catch (DocumentException ex) {
  182. Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
  183. } catch (IOException ex) {
  184. Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
  185. }finally{
  186. try {
  187. baos.close();
  188. } catch (IOException ex) {
  189. Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
  190. }
  191. }
  192.  
  193. return content;
  194. }
  195.  
  196. }

Servlet 中:

  1. response.setContentType("application/pdf");
  2.  
  3. ServletOutputStream sos = response.getOutputStream();
  4.  
  5. response.setHeader("Content-Disposition", "attachment;filename="
  6. + new String(swdjz.getNsrmc().getBytes(), "iso-8859-1"));
  7.  
  8. byte [] content = ItextUtil.createPdfBytes(swdjz);
  9.  
  10. BufferedOutputStream bos = new BufferedOutputStream(sos);
  11. bos.write(content);
  12.  
  13. bos.close();

使用iText生成带底图的PDF的更多相关文章

  1. doc文档生成带目录的pdf文件方法

    准备软件: 福昕PDF阅读器 下载地址:http://rj.baidu.com/soft/detail/12882.html?ald 安装福昕PDF阅读器,会自动安装pdf打印机. 准备好设置好各级标 ...

  2. 在linux环境下使用itext生成pdf

    转载请注明出处 https://www.cnblogs.com/majianming/p/9537173.html 项目中需要对订单生成pdf文件,在不断的尝试之后,终于生成了比较满意的pdf文档. ...

  3. 【PDF】java使用Itext生成pdf文档--详解

    [API接口]  一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...

  4. java使用iText生成pdf表格

    转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...

  5. 使用itext生成pdf的,各种布局

    代码如下,jar包为itext.jar,itextAsia.jar,最好都是最新的 :2张图片也在最后贴出,把图片放到D盘可以直接生成制定格式的pdf. 最后生成的pdf如下: 代码如下: packa ...

  6. Java Itext 生成PDF文件

    利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...

  7. 用itext生成PDF报错:Font 'STSong-Light1' with 'UniGB-UCS2-H' is not recognized.

    用itext生成PDF报错,加上try catch捕获到异常是 BaseFont bFont = BaseFont.createFont("STSong-Light1", &quo ...

  8. 使用iText生成pdf文件

    前言 折腾了一早上的iText,下面主要介绍一下如何使用iText通过java代码生成pdf文档,以及如何输出包含中文的pdf文档. 首先,要说明的是,我用的是iText-7(java),下载链接是: ...

  9. Itext简绍及操作PDF文件

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

随机推荐

  1. PowerShell控制台输出符号+函数参数类型指定+文本内容读取

    There are several ways: Write-Host: Write directly to the console, not included in function/cmdlet o ...

  2. chrome浏览器测试js函数

    1.直接在console中写入代码 2.既要写函数,又要写执行函数的代码. 不关闭网页,函数能够在内存中存活很久 浏览器都能记住函数. 当然,在其他页面无效.

  3. SDL2.0 学习笔记-1 windows下的第一个测试程序

    SDL全称是Simple DirectMedia Layer,是一个开源的.跨平台(win32,linux,mac)的多媒体开发c语言库. 官方网站 http://www.libsdl.org/ 第一 ...

  4. HDU_2018——母牛产小牛的问题,递推

    Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛?   Input 输入数据由多 ...

  5. sourceTree初识

    GUI for git|SourceTree|入门基础 目录 SourceTree简介 SourceTree基本使用 SourceTree&Git部分名词解释 相关连接推荐 一.SourceT ...

  6. thinkphp+datatables+ajax 大量数据服务器端查询

    今天一白天全耗在这个问题上了,知乎2小时除外... 现在19:28分,记下来以备后查. 问题描述:从后台数据库查询人员信息,1w多条,使用一个好看的基于bootstrap的模板 Bootstrap-A ...

  7. 【转】Mac访问Windows共享文件夹

    相信大多数的用户用Windows访问Windows的共享文件夹是一件很容易的事,但是如果用Mac来访问Windows共享文件夹就会遇到很多的麻烦了,尤其是设置是比较有区别的吗,接下来的将用图文交大家怎 ...

  8. ios 常用字符串NSString的操作

    //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8S ...

  9. 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本号之前Cocos2d- ...

  10. acd LCM Challenge(求1~n的随意三个数的最大公倍数)

    Problem Description Some days ago, I learned the concept of LCM (least common multiple). I've played ...