【java】 iText使用PDF模板生成输出PDF

项目需求涉及到操作pdf模板,根据生成好的模板向里面填充数据

用到的jar包是iText-5.0.6.jar 和iTextAsian.jar

pdf模板效果如下:


  1. importjava.io.ByteArrayOutputStream;

  2. importjava.io.FileOutputStream;

  3. importjava.io.IOException;

  4. importjava.io.OutputStream;

  5. importjava.util.ArrayList;

  6. importjava.util.HashMap;

  7. importjava.util.Map;

  8. importcom.lowagie.text.DocumentException;

  9. importcom.lowagie.text.pdf.AcroFields;

  10. importcom.lowagie.text.pdf.BaseFont;

  11. importcom.lowagie.text.pdf.PdfContentByte;

  12. importcom.lowagie.text.pdf.PdfReader;

  13. importcom.lowagie.text.pdf.PdfStamper;

  14. publicclassTest {

  15. publicstaticvoidmain(String[] args)throwsException {

  16. test();

  17. System.out.println("success");

  18. }

  19. publicstaticvoidtest()throwsIOException, DocumentException {

  20. String fileName = "F:/zxing/zs/zsTemp.pdf";// pdf模板

  21. PdfReader reader = newPdfReader(fileName);

  22. ByteArrayOutputStream bos = newByteArrayOutputStream();

  23. /* 将要生成的目标PDF文件名称 */

  24. PdfStamper ps = newPdfStamper(reader, bos);

  25. PdfContentByte under = ps.getUnderContent(1);

  26. /* 使用中文字体 */

  27. BaseFont bf = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

  28. ArrayList<BaseFont> fontList = newArrayList<BaseFont>();

  29. fontList.add(bf);

  30. /* 取出报表模板中的所有字段 */

  31. AcroFields fields = ps.getAcroFields();

  32. fields.setSubstitutionFonts(fontList);

  33. fillData(fields, data());

  34. /* 必须要调用这个,否则文档不会生成的 */

  35. ps.setFormFlattening(true);

  36. ps.close();

  37. OutputStream fos = newFileOutputStream("F:/zxing/zs/zsResult.pdf");

  38. fos.write(bos.toByteArray());

  39. fos.flush();

  40. fos.close();

  41. bos.close();

  42. }

  43. publicstaticvoidfillData(AcroFields fields, Map<String, String> data)

  44. throwsIOException, DocumentException {

  45. for(String key : data.keySet()) {

  46. String value = data.get(key);

  47. fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的

  48. }

  49. }

  50. publicstaticMap<String, String> data() {

  51. Map<String, String> data = newHashMap<String, String>();

  52. data.put("name","test:");

  53. data.put("bianhao","xx第10000001号");

  54. data.put("amount","1000");

  55. data.put("date","2015年7月7日");

  56. returndata;

  57. }

  58. }



java 操作pdf模板(向指定域添加文本内容和图片)


  1. publicstaticvoidmain(String[] args)

  2. {

  3. try

  4. {

  5. String TemplatePDF = "e:/F-3.pdf";//魔板路径

  6. String outFile = "e:/test.pdf";//生成新的pdf的路径

  7. PdfReader reader = newPdfReader(TemplatePDF);

  8. PdfStamper ps = newPdfStamper(reader,newFileOutputStream(outFile));// 生成的输出流

  9. AcroFields s = ps.getAcroFields();

  10. // 插入文字

  11. insertText(ps, s);

  12. // 插入图片

  13. insertImage(ps, s);

  14. ps.close();

  15. reader.close();

  16. }

  17. catch(Exception e)

  18. {

  19. e.printStackTrace();

  20. }

  21. }

  22. /**

  23. * 插入图片

  24. *

  25. * @param ps

  26. * @param s

  27. * @author WangMeng

  28. * @date 2016年6月16日

  29. */

  30. publicstaticvoidinsertImage(PdfStamper ps, AcroFields s)

  31. {

  32. try

  33. {

  34. List<AcroFields.FieldPosition> list = s.getFieldPositions("QR_CODE");

  35. Rectangle signRect = list.get(0).position;

  36. Image image = Image.getInstance("e:/pdf.jpg");

  37. PdfContentByte under = ps.getOverContent(2);

  38. floatx = signRect.getLeft();

  39. floaty = signRect.getBottom();

  40. System.out.println(x);

  41. System.out.println(y);

  42. image.setAbsolutePosition(x, y);

  43. image.scaleToFit(signRect.getWidth(), signRect.getHeight());

  44. under.addImage(image);

  45. }

  46. catch(Exception e)

  47. {

  48. // TODO Auto-generated catch block

  49. e.printStackTrace();

  50. }

  51. }

  52. /**

  53. * 创建Chunk

  54. *

  55. * @return

  56. * @author WangMeng

  57. * @date 2016年6月16日

  58. */

  59. publicstaticChunk CreateChunk()

  60. {

  61. BaseFont bfChinese;

  62. Chunk chunk = null;

  63. try

  64. {

  65. bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.EMBEDDED);

  66. Font fontChinese = newFont(bfChinese,10*4/3);

  67. chunk = newChunk("张三", fontChinese);

  68. }

  69. catch(Exception e)

  70. {

  71. e.printStackTrace();

  72. }

  73. returnchunk;

  74. }

  75. /**

  76. * 插入文本

  77. *

  78. * @return

  79. * @author WangMeng

  80. * @date 2016年6月16日

  81. */

  82. publicstaticvoidinsertText(PdfStamper ps, AcroFields s)

  83. {

  84. List<AcroFields.FieldPosition> list = s.getFieldPositions("CONNECT_NAME");

  85. Rectangle rect = list.get(0).position;

  86. PdfContentByte cb = ps.getOverContent(1);

  87. PdfPTable table = newPdfPTable(1);

  88. floattatalWidth = rect.getRight() - rect.getLeft() -1;

  89. table.setTotalWidth(tatalWidth);

  90. PdfPCell cell = newPdfPCell(newPhrase(CreateChunk()));

  91. cell.setFixedHeight(rect.getTop() - rect.getBottom() - 1);

  92. cell.setBorderWidth(0);

  93. cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

  94. cell.setHorizontalAlignment(Element.ALIGN_CENTER);

  95. cell.setLeading(0, (float)1.1);

  96. table.addCell(cell);

  97. table.writeSelectedRows(0, -1, rect.getLeft(), rect.getTop(), cb);

  98. }

Java中操作pdf模板生成pdf相关推荐

  1. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  2. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  3. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...

    Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...

  4. Java使用Adobe Acrobat DC根据PDF模板生成PDF文件

    制作模板 首先需要安装Adobe Acrobat DC来制作模板 打开dc工具-->准备表单,然后打开你需要制作的pdf源文件 将文本域拖到你需要代码替换的位置 你可以双击文本域修改当前文本域的 ...

  5. java 根据PDF模板生成PDF文件并导出

    1.准备操作的maven包 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpd ...

  6. java itextpdf使用HTML模板生成pdf文件,并设置table

    我们这里是maven项目,导入相应jar包: <dependency><groupId>org.freemarker</groupId><artifactId ...

  7. Java按照固定pdf模板生成pdf文件——itext

    第一步:生成pdf模板 先用word写好固定格式的文档,再利用wps将文档转成pdf文件,然后利用Adobe Acrobat DC(此工具是收费的,可以百度搜索进行破解)进行表单域编辑(如下图),编辑 ...

  8. java pdf stamper_java 通过pdf模板,生成PDF,并下载到本地-Go语言中文社区

    注意:本例子是从向模板定义的变量赋值,而不是从无到有的来生成pdf 直接就能用 maven依赖: com.lowagie itext 4.2.1 工具类: package com.upincar.pd ...

  9. android手机生成pdf格式文件,Android根据pdf模板生成pdf文件

    1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat = 3 ne ...

最新文章

  1. 计算机辅助焊接过程控制,重型车辆计算机辅助焊接工艺自动设计系统.pdf
  2. 关于量子计算,你应该知道的七个事实
  3. 智能车竞赛技术报告 | 智能车视觉 - 首都师范大学 - 首师智能视觉
  4. opentracing
  5. 图像的放大与缩小(2)——双线性插值放大与均值缩小
  6. 如何使用.NET配置文件(一)
  7. elasticsearch mapping之index
  8. 二叉树构建及双向链表
  9. C# 获取进程或线程的信息
  10. 3 张图带你走近蚂蚁mPaaS音视频通话组件
  11. 查阅 arXiv 论文新神器,一行代码比较版本差别,Github 新开源!
  12. 视觉SLAM笔记(9) Eigen
  13. mysql connector放在哪_关于MySQL Connector/C++那点事儿
  14. 关于word中插入知网e-study插件问题
  15. PHP 利用CURL抓取页面内容
  16. 华硕aura完全卸载_AURA神光同步是什么意思?AURA SYNC神光同步教程
  17. 嵌入式驱动工程师开发学习路线
  18. NTC热敏电阻的主要技术参数
  19. Linux获取外网IP
  20. R语言学习-复杂网络中心度计算

热门文章

  1. 互联网时代真的人人都是产品经理吗?
  2. x86架构与ARM架构(AGX、TX2、NX等)下配置带ROS插件的QtCreator(Qt+ROS+ubuntu18)(源码编译安装方式)
  3. vue解决ios不能自动唤起手机数字键盘问题
  4. 微信公众号markdown编辑器
  5. 信息安全技能树(SecWiki中Web安全工程师职位建议)
  6. 内蒙古大学计算机考研资料汇总
  7. 匝间短路故障学习历程(六) -- 批处理问题
  8. 浅谈RFID 智能柜系统
  9. 【机器学习】集成学习投票法:投票回归器(VotingRegressor) 投票分类器(VotingClassifier)
  10. 【小米oj】 小米兔的轨迹