前言

作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式

模拟需求

需求:按照下面格式导出pdf格式的学生成绩单

准备工作

Excel软件

Adobe Acrobat XI Pro软件

模板制作

第一步:利用Excel制作出上述表单,设置好字体、行高、列宽等,如下:

第二步:按照给定模板做好Excel表单后,删除需要后期填充的数据

第三步:打开Adobe Acrobat XI Pro软件,开始依据Excel模板制作PDF模板

1、单击创建、选择创建表单按钮

2、选择从现有文档创建,选择前面制作的Excel模板

3、点击工具,编辑表单

4、此时表单中只有一个文本域,我们可以点击添加新的文本域的形式来添加表头和结尾。也可以在pdf上添加一些其他控件。制作完成后如下:

5、可以通过鼠标在域中右键和属性中修改域的位置,字体、颜色、换行等

6、将制作好的表单保存

项目实现

第一步:创建基于maven的Java项目

第二步:引入itext的pom依赖

com.itextpdf

itextpdf

5.5.10

com.itextpdf

itext-asian

5.2.0

第六步:将上面制作的pdf模板放到Resources目录下,编写PdfUtils工具类

package com.whw.pdf;

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.pdf.*;

import java.io.*;

import java.util.ArrayList;

public class PdfUtils {

public static void exportMapMZydPdf(String templatePath,String savePath,String fileName) throws DocumentException {

ByteArrayOutputStream byteArrayOutputStream = null;

PdfReader pdfReader = null;

FileOutputStream fileOutputStream=null;

try {

fileOutputStream=new FileOutputStream(savePath+"//"+fileName);

byteArrayOutputStream = new ByteArrayOutputStream();

pdfReader = new PdfReader(templatePath);

PdfStamper pdfStamper = new PdfStamper(pdfReader, byteArrayOutputStream);

//获取模板所有域参数

AcroFields acroFields = pdfStamper.getAcroFields();

//解决中文字体不显示的问题

BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

ArrayList fontArrayList = new ArrayList();

fontArrayList.add(baseFont);

acroFields.setSubstitutionFonts(fontArrayList);

acroFields.setField("head", "xxx同学成绩单");

acroFields.setField("yuwen", "116");

acroFields.setField("shuxue", "115");

acroFields.setField("yingyu", "110");

acroFields.setField("zhengzhi", "89");

acroFields.setField("lishi", "90");

acroFields.setField("shengwu", "85");

acroFields.setField("dili", "83");

acroFields.setField("yinyue", "78");

acroFields.setField("tiyu", "88");

acroFields.setField("meishu", "80");

acroFields.setField("xiguan", "优秀");

acroFields.setField("nengli", "优秀");

acroFields.setField("xuexi", "优秀");

acroFields.setField("jl", "优秀");

acroFields.setField("weisheng", "良好");

acroFields.setField("pingyu", " 在校表现优秀。你关心同学,有很强的集体荣誉感,对待工作细致负责,学习上也比较踏实。老师相信你还有很大潜力没有挖掘出来,你要相信自己,不断挑战自我,加油!");

acroFields.setField("jc", "三号学生");

acroFields.setField("school", "xx市第一高级中学");

pdfStamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为true

pdfStamper.flush();

pdfStamper.close();

//设置纸张,可以在Excel制作是设定好纸张大小

Document doc = new Document(PageSize.A5);

PdfCopy copy = new PdfCopy(doc,fileOutputStream);

doc.open();

PdfImportedPage importPage = copy.getImportedPage(new PdfReader(byteArrayOutputStream.toByteArray()), 1);

try {

copy.addPage(importPage);

} catch (BadPdfFormatException e) {

e.printStackTrace();

}

doc.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (byteArrayOutputStream != null) {

try {

byteArrayOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (fileOutputStream != null) {

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (pdfReader != null) {

pdfReader.close();

}

}

}

public static void main(String[] args) throws IOException {

try {

String savePath="C://Users//hua//Desktop//";

String fileName="xxx同学成绩单.pdf";

exportMapMZydPdf("/成绩单模板.pdf",savePath,fileName);

} catch (DocumentException e) {

e.printStackTrace();

}

}

}

第三步:运行main方法进行测试,并查看导出后的文件

写在最后

​1、此种方式对Pdf居中自动换行支持性不好,可以根据文本域的宽度所能容纳的字数,创建多个文本域,对值进行手动分割填充到多个文本域。

​ 2、C#开发时处理Excel文件可用NPOI插件进行数据导入导出,处理PDF文件可用ITextSharp插件。

上述介绍只是导出pdf表单的一种方式,也可以直接利用itext进行手动创作pdf表单或者导出Excel或World后台转换为pdf格式等。如有其它更好的方式或建议,欢迎留言一块交流!

itext文本域自动换行_Java导出Pdf格式表单相关推荐

  1. itext文本域自动换行_iText+Flying Saucer生成pdf文档,中文不显示和不自动换行问题...

    一.重写Breaker,添加中文识别 // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov. // Jad home page: ...

  2. itext文本域自动换行_iText+Flying Saucer生成pdf文档,重写Breaker中文可以换行,但是英文单词会截断问题

    网上有好多重新的Breaker的案例或者代码,但是如果其中涉及到英文,那么单词也会直接被拦腰截断,这不是我们想要的结果,我有重写了一下Breaker,完美解决这个问题,废话不多说,代码如下: pack ...

  3. java jsp导出pdf文件_JSP页面导出PDF格式文件

    JSP页面导出PDF格式文件基本在前端页面可以全部完成 添加下载链接的点击事件 var downPdf = document.getElementById("downLoad"); ...

  4. Revit导出PDF格式图纸流程及“批量导出图纸”

    一.Revit导出PDF格式图纸流程 1.点击左上方"应用程序菜单"即"R"图标,进择"打印"选项. 2.在弹出的对话框中,需要设置图纸&q ...

  5. bootstrap table export插件导出pdf格式文件中文乱码问题解决办法

    bootstrap table export插件导出pdf格式文件中文乱码的问题折腾了我整整两天,网上到处都是改源码,自己设置字体的方案,我都没搞定.结果今天看到官方文档(地址:GitHub - hh ...

  6. itext7 给PDF增加表单域并设置值

    给pdf增加表单域,支持中文,如需之前其他字体只需将ttf文件放入到项目的font文件夹下即可 具体请参考我在码云上托管的项目:https://gitee.com/shisenlin/tool

  7. Android pdf填充表单,预览,图片填充,水印添加

    前言 需求是这样的,客户需要用户登录app后录入个人信息,然后由手机端帮助将录入的信息填充到pdf, 用户录入的部分图片需要填充到pdf模板的最后面,还需要给每一页pdf都加上水印,生成后给用户预览 ...

  8. css文本,背景,动画和html列表,表格,表单总结

    css文本标签的应用 文本 text-shadow文本阴影:1px 2px 3px color 第1个长度值用来设置对象的阴影水平偏移值.可以为负值 第2个长度值用来设置对象的阴影垂直偏移值.可以为负 ...

  9. java 重复提交_java解决重复提交表单

    在前端代码写一个随机数出来,把这个随机数放在两个地方,一个是session域对象中,一个是表单的隐藏域中.传到后台进行比对,根据这两个值是不是一致,一致的话不是表单重复提交,不一致就是表单重复提交.注 ...

最新文章

  1. TCP/IP 10.1集成IS-IS协议
  2. R数据分析实战学习笔记(5)
  3. 设计模式快速学习(五)原型模式
  4. viewport理解
  5. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)
  6. Scala实现Mapreduce程序4-----数据去重
  7. VS连接SQL Server 2008,并实现登录和注册功能
  8. java运行html代码,java代码运行html
  9. 免费抠人像、抠图网站
  10. 计算机am3代表,拨开重重迷雾 AMD处理器历代接口解谜
  11. 72个炫酷的CSS技巧
  12. html照片360度旋转展示,纯js实现360度旋转预览图片特效
  13. 大一c语言挂科分数烟台大学,知乎烟大 | 在烟大挂科是一种什么体验
  14. 华为手机各代系拆机图
  15. 尼日利亚一油罐车发生爆炸 造成数十人遇难
  16. 有关未雨绸缪:我国电子商务税收策略的思索
  17. windows System32 与SysWOW64区别
  18. 安超云专家荟 | 中立而自由的ArSDN
  19. 计算机网就是因特网对吗,计算机因特网的介绍
  20. 针对乐视网的主页无法打开的解决办法

热门文章

  1. 《数字图像处理(第三版)》 第三章 数字图像处理 笔记3 (直方图处理 - 直方图均衡)
  2. vue3 - 网页在线预览 office word 文档,打开 .doc / .docx 文件显示并解析文档内容功能效果(超详细示例功能源码,复制粘贴后开箱即用)
  3. 摸鱼,是员工给公司的福报
  4. [Android开发] Json解析工具类,一个类搞定Json的解析
  5. 递归算法遍历并删除目录
  6. 简单介绍DeepFaceLab(DeepFake)的使用以及容易被忽略的事项
  7. #欧姆龙#EIP通讯配置 简单攻略
  8. VMware Workstation 无法连接到虚拟机
  9. 跑cyclegan时遇到了ConnectionError: HTTPConnectionPool(host=‘localhost‘, port=8097): Max retries exceeded
  10. 网关Gateway zuul总结和面试