前言

作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过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格式等。如有其它更好的方式或建议,欢迎留言一块交流!

java导出pdf格式_Java导出Pdf格式表单相关推荐

  1. java作品设计报告书_java实验报告书格式模板.doc

    java实验报告书格式模板.doc 广东第二师范学院 计算机科学系 实验报告Java实验报告实验名称 实验分组号 实 验 人 班 级 学 号 实验指导教师 实验场地 实验时间 成 绩 a51ced6b ...

  2. java修改图章图片_Java 处理PDF图章(印章)——图片图章、动态图章

    图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门机关权威的重要指示物,常见于各种格式的文件.文档中.对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现.本篇文档分享通过 ...

  3. java.util.date的格式_java.util.Date格式将yyyy-mm-dd转换为mm-dd-yyyy

    我有一个java.util.Date,格式为yyyy-mm-dd. 我希望它的格式为mm-dd-yyyy 以下是我尝试进行此转换的示例util: // Setting the pattern Simp ...

  4. java pdf 水印_Java 在PDF中添加水印——文本/图片水印

    水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下java示例,将分别使用inserttextwatermark(pdfpagebas ...

  5. java excel条件格式_Java 使用条件格式高亮Excel单元格

    通常Excel文档包含了很多行和列,为了方便查看和分析其中的数据,我们可利用条件格式将某些符合特定要求的数据高亮显示出来.比如,高亮低于或高于平均值的数值.高亮最高值或最低值.高亮重复或唯一的数值.本 ...

  6. java给文件添加水印_Java在PDF中添加水印(文本/图片水印)

    水印是一种十分常用的防伪手段,常用于各种文档.资料等.常见的水印,包括文字类型的水印.图片或logo类型的水印.以下Java示例,将分别使用insertTextWatermark(PdfPageBas ...

  7. java 去掉pdf文字_Java 删除PDF中的附件

    在PDF中添加附件,可分两种情况,一种是直接把文档作为附件插入到PDF,一种是注释附件,即将文档通过注释的形式插入到PDF页面中的指定位置,通过点击注释,即可打开注释中的附件文档.同样的,在我们删除P ...

  8. java 设置pdf 编码格式_Java 在PDF中添加条形码

    条形码,是由宽度不等的多个黑条和空白所组成,用以表达一组信息的图形标识符.通过给文档添加条形码,可以直观,快捷地访问和分享一些重要的信息.本文就将通过使用Java程序来演示如何在PDF文档中添加Cod ...

  9. java怎么注释多行注释_java的注释格式和多行注释和单行注释

    所有javadoc命令都只能出现于"/**"注释中.但和平常一样,注释结束于一个"*/".主要通过两种方式来使用javADOc:嵌入的html,或使用" ...

  10. java读取pdf签名_Java 获取PDF中的数字签名信息

    一.概述及程序环境要求 本文以Java代码演示如何获取PDF文档中的数字签名信息,包括签名人.签名位置.日期.原因.联系方式.签名在文档中的坐标等等. 程序环境包括: Spire.Pdf.jar(ja ...

最新文章

  1. 就业丨得益于AI,这五个行业岗位需求将呈现显著增长趋势
  2. ToolStripStatusLabel设置时间自动更新
  3. 产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等
  4. latex插入gif_如何将照片和GIF插入Google幻灯片
  5. wenzhixin bootstrap-table 点击table单元格改变颜色
  6. 微信怎么at所有人_微信分付怎么开通,入口在这里,简单几步教你快速开通
  7. 我做的相册视频,总结07年的生活!
  8. 夜曲编程Python入门课程Pro
  9. 设计模式系列2-设计模式分类及23种设计模式中英文名称对照
  10. 计算机导论课程思政,《计算机导论》课程教学中的思政教育.doc
  11. PHP 二维数组的合并与去重
  12. windows下cmd 查找/关闭端口
  13. java delphi aes加密算法_谁有C#与delphi通用的AES加密算法
  14. Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)
  15. 读“技术的执念”有感
  16. linux gns3使用教程,《GNS3实战指南》——2.4 在Ubuntu Linux上安装
  17. Echarts之饼图
  18. CAPM资产定价模型
  19. 4k纸是几厘米乘几厘米_4k纸多大,纸张的大小规格
  20. oracle 触发器管理(以及行级触发器中有两个伪变量 :new 与 :old 的使用方法)(三个谓词inserting、deleting、updating的使用方法)

热门文章

  1. 【无标题】半导体器件特性曲线测试方法的研究
  2. matlab神经网络原理应用实例pdf,MATLAB神经网络原理与实例精解
  3. 如何进入mysql命令界面
  4. 英语在计算机专业的作用,计算机专业英语的重要性.doc
  5. 执行力强的人九个特点
  6. java合并2个txt文本,Java实现多个文档合并输出到一个文档
  7. Android 9.0系统源码_包管理机制(二)PackageInstaller安装APK
  8. 通达OA2008从windows环境移植到linux部署手册
  9. android sns空间代码,Android视频分享SNS类APP完整源码(服务端+客户端)
  10. [Java] Appfuse tapestry 小记