itextpdf处理PDF,用文本域的方式
注意字体要用windows的字体,pdf用软件设置文本域
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
@ApiOperation(value = "导出 PDF简历")@GetMapping("exportServantpdf") // public Object selectMatchIng(HttpServletResponse response, Long servantId) throws UnsupportedEncodingException {// 指定解析器System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");Servant servant = servantService.selectByPrimaryKey(servantId);if (null == servant) {return null;}String filename = servant.getServantName().substring(0, 1) + "阿姨.pdf";response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename, "UTF-8"));OutputStream os = null;PdfStamper ps = null;PdfReader reader = null;try {// 2 读入pdf模板ClassPathResource resource = new ClassPathResource("pdf/jianli.pdf");InputStream inputStream = resource.getInputStream();reader = new PdfReader(inputStream);// 3 根据表单生成一个新的pdfos = response.getOutputStream();ps = new PdfStamper(reader, os);// 4 获取pdf表单AcroFields form = ps.getAcroFields();// 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示String fontPath = ClassPathResource.class.getClassLoader().getResource("pdf/simsun.ttc").toString();BaseFont bf = BaseFont.createFont(fontPath + ",1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);form.addSubstitutionFont(bf);// 简历PDF文件信息填充serevantPdfCompent.fillServantPdf(servantId, servant, ps, form);ps.setFormFlattening(true);// 关闭填充// -------------------------------------------------------------System.out.println("===============PDF导出成功=============");} catch (Exception e) {System.out.println("===============PDF导出失败=============");e.printStackTrace();} finally {try {ps.close();reader.close();os.close();} catch (Exception e) {e.printStackTrace();}}return null;}
package com.jzlife.nurse.compent;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;import javax.imageio.ImageIO;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;import com.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfStamper;/*** PDF填充* @author lurunzhen**/
@Component
public class ServantPdfCompent {@AutowiredServantService servantService;@AutowiredFileStorageCompent fileStorageCompent;@AutowiredServantStateService servantStateService;@AutowiredAppraisalItemService appraisalItemService;public void fillServantPdf(Long servantId, Servant servant, PdfStamper ps, AcroFields form)throws IOException, DocumentException, BadElementException, MalformedURLException {//基础信息ServantInfo servantInfo = servantService.selectServantInfoById(servantId);form.setField("bianhao",servant.getServantNo());form.setField("xingming",servant.getServantName().substring(0,1)+"阿姨");form.setField("jingyan",servantInfo.getWorkExperience());form.setField("nianling",IdCard.getAgeByIdCard(servantInfo.getIdCard())+"");form.setField("jiguan",servantInfo.getNativePlace());form.setField("mingzu",servantInfo.getNation());form.setField("xueli",servantInfo.getEducation());form.setField("shuxiang",servantInfo.getZodiac());form.setField("putonghua",servantInfo.getMandarin());//头像try {headImage(servant, ps, form);} catch (Exception e) {e.printStackTrace();}//服务模式try {serviceModel(servantId, ps, form);} catch (Exception e) {e.printStackTrace();}//背调,体检try {investigation(servantId, ps, form);} catch (Exception e) {e.printStackTrace();}//工作经历List<ServantResume> resumeList = servantService.selectResumeByServantId(servantId);if(null!=resumeList&&resumeList.size()>0) {String str="";for(ServantResume re:resumeList) {String st=DateUtil.dateToString(re.getStartTime(), "yyyy.M");String ed=DateUtil.dateToString(re.getEndTime(), "yyyy.M");String content=re.getContent();String line=st+"-"+ed+" "+content+"\n";str=str+line;}form.setField("gongzuojingli",str);}//技能和分数条,认证的技能try {skillAndScoreLine(servantId, ps, form);} catch (Exception e) {e.printStackTrace();}//其他技能(标签)List<ServantLabel> servantLabel = servantService.selectServantLabelByservantId(servantId);if(null!=servantLabel&&servantLabel.size()>0) {String str="";for(ServantLabel s:servantLabel) {str=str+"【"+s.getLabelName()+"】 ";}form.setField("qitajineng",str);}}/*** //背调合格,体检合格,用图片代替* @param servantId* @param ps* @param form* @throws BadElementException* @throws MalformedURLException* @throws IOException* @throws DocumentException*/private void investigation(Long servantId, PdfStamper ps, AcroFields form)throws BadElementException, MalformedURLException, IOException, DocumentException {List<ServantBatch> selectIsPass = appraisalItemService.selectIsPass(servantId);ServantState servantState = servantStateService.selectByServantId(servantId);// 获取域起始坐标位置int renzheng = form.getFieldPositions("renzheng").get(0).page;//如果页数固定可填数字Rectangle signRect = form.getFieldPositions("renzheng").get(0).position;PdfContentByte pdfbyte = ps.getOverContent(renzheng);//第1页 //如果页数固定可填数字float x = signRect.getLeft();float y = signRect.getBottom();if(null==selectIsPass||selectIsPass.size()==0) {//为空时,背调通过String imgPath = ClassPathResource.class.getClassLoader().getResource("pdf/rz_beidiao.png").toString();Image image =Image.getInstance(imgPath);image.scaleToFit(image.getWidth(), image.getHeight()); //图片对称image.setAbsolutePosition(x, y);x=x+160;pdfbyte.addImage(image);}if(null!=servantState&&servantState.getInspectState().equals(1)) {//体检通过String imgPath = ClassPathResource.class.getClassLoader().getResource("pdf/rz_tijian.png").toString();Image image =Image.getInstance(imgPath);image.scaleToFit(image.getWidth(), image.getHeight()); //图片对称image.setAbsolutePosition(x, y);x=x+160;pdfbyte.addImage(image);}}private void serviceModel(Long servantId, PdfStamper ps, AcroFields form)throws BadElementException, MalformedURLException, IOException, DocumentException {//1钟点工保姆 2白班保姆 3住家保姆,4月嫂 图片代替List<ServantSer> servantser = servantService.selectServantServiceById(servantId);if(null!=servantser&&servantser.size()>0) {ServantSer svs=servantser.get(0);if(null==svs.getServicePattern()) {return;}String [] ms=svs.getServicePattern().split(",");// 获取域起始坐标位置int fuwumoshi = form.getFieldPositions("fuwumoshi").get(0).page;//如果页数固定可填数字Rectangle signRect = form.getFieldPositions("fuwumoshi").get(0).position;PdfContentByte pdfbyte = ps.getOverContent(fuwumoshi);//第1页 //如果页数固定可填数字float x = signRect.getLeft();float y = signRect.getBottom();for(String s:ms) {//画长条图String imgPath = ClassPathResource.class.getClassLoader().getResource("pdf/ms_"+s+".png").toString();Image image =Image.getInstance(imgPath);image.scaleToFit(image.getWidth(), image.getHeight()); //图片对称image.setAbsolutePosition(x, y);x=x+100;pdfbyte.addImage(image);}}}/*** 头像图片* @param servant* @param ps* @param form* @throws BadElementException* @throws MalformedURLException* @throws IOException* @throws DocumentException*/private void headImage(Servant servant, PdfStamper ps, AcroFields form)throws BadElementException, MalformedURLException, IOException, DocumentException {FileStorage fileimage = fileStorageCompent.selectByPrimaryKey(servant.getBustUrlId());try {if(null!=fileimage) {BufferedImage originalImage = ImageIO.read(new File(fileimage.getFileFullPath()+"/"+fileimage.getFileName()));int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB: originalImage.getType();BufferedImage resizeImagePng = ImagePixelConvert.resizeImageWithHint2(originalImage, type); File nf=new File(fileimage.getFileFullPath()+"/"+"pdf_"+fileimage.getFileName());ImageIO.write(resizeImagePng, "png", nf);//重新等比压缩图片Image image = Image.getInstance(nf.getPath());
// Image image = Image.getInstance("D:\\tou.jpg");
// image.scaleToFit(195, 220); //图片对称 无效int touxiang = form.getFieldPositions("touxiang").get(0).page;//如果页数固定可填数字Rectangle signRect = form.getFieldPositions("touxiang").get(0).position;PdfContentByte under = ps.getOverContent(touxiang);float x = signRect.getLeft();float y = signRect.getBottom();image.setAbsolutePosition(x, y);under.addImage(image); }} catch (Exception e) {e.printStackTrace();}}/*** 技能和分数条* @param servantId* @param ps* @param form* @throws BadElementException* @throws IOException* @throws DocumentException*/private void skillAndScoreLine(Long servantId, PdfStamper ps, AcroFields form)throws BadElementException, IOException, DocumentException {List<ServantAppraisalState> appraisalState = servantService.selectByServantId(servantId);if(null!=appraisalState&&appraisalState.size()>0) {// 获取域起始坐标位置int jinengtiaoPage = form.getFieldPositions("jinengtiao").get(0).page;//如果页数固定可填数字Rectangle signRect = form.getFieldPositions("jinengtiao").get(0).position;PdfContentByte pdfbyte = ps.getOverContent(jinengtiaoPage);//第1页 //如果页数固定可填数字float x = signRect.getLeft();float y = signRect.getTop();String str="";for(ServantAppraisalState s:appraisalState) {if(s.getState().equals(1)) {//有效str=str+"【"+s.getItemName()+"】 "+s.getItemLevel()+"分\n";//画长条图BufferedImage bfimage = ImagePixelConvert.createBufferedImage(30*Integer.parseInt(s.getItemLevel()), 18);//30*10分,20Image image =Image.getInstance(bfimage,null);//Y轴递减减,页面显示下移动y=y-22;//20是字体大小image.setAbsolutePosition(x, y);y=y-4;pdfbyte.addImage(image);}}form.setField("jineng",str);}}
}
itextpdf处理PDF,用文本域的方式相关推荐
- 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题
解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 参考文章: (1)解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 (2)https://www.cnblogs.com/ ...
- java 取pdf 文本域_Java iText填写PDF模版文本域空白问题
public static void main(String[] args) throws DocumentException, IOException { PdfReader reader = ne ...
- java使用itextpdf生成pdf并填充自定义数据
项目中有个需求,对于已有的数据生成对应的发票pdf或者合同pdf,这些pdf具有一些特性,就是pdf有固定的格式,类似于表格,我们只要往表格里面填充数据即可.当然,也会涉及到签章,二维码等需求. 总体 ...
- itext文本域自动换行_Java导出Pdf格式表单
前言 作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求 需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 Ado ...
- JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行
1.前言 前一段时间遇到一个制作Pdf的业务,自己下来摸索了一下,基本上解决.将其中遇到的几个问题及解决方法做以记录,仅供大家参考. 首先在这里对于刚接触该类型业务的同学说明下,ItexPdf支持使用 ...
- java pdf表单域实现_Java 创建PDF表单域 - 文本框、复选框、列表框、组合框、按钮等...
表单域包括文本框.复选框.列表框.组合框.按钮和签名域等,主要用于收集用户填写或选择的数据.这篇文章将介绍如何在Java应用程序中给PDF文档添加表单域. 导入jar文件 本文所使用的PDF类库是Fr ...
- css设置字体颜色、文本对齐方式、首行缩进、文本装饰、列表样式、鼠标样式、禁止文本域拖拽、轮廓线、块级元素对齐方式、文字溢出设置
color:设置字体颜色: 取值方式有:1.颜色值red,green等 .2.十六进制#FF0000,#FF2313等.3.RGB代码rgb(225,225,112)或rgb(100%,55%,0%) ...
- spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
文章目录 前言 一.java 导出PDF 的几个工具 1. PDF Box 2. JasperReports/jFreeReport导出 报表 PDF 3. itextpdf 导出PDF(敲重点) 二 ...
- Pdf文本域替换,iText替换pdf文本域
替换pdf字段主要工具 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf& ...
- itextpdf通过pdf模板生成pdf文件
itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...
最新文章
- 防止******ADSL的一些技巧
- Packet Tracer 5.0建构CCNA实验攻略(3)——Cisco VTP
- Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
- 提高代码质量 CheckStyle FindBugs PMD
- Linux环境搭建nginx负载
- 手动封装element-ui里面的button组件
- docker jenkins 公钥_代码自动发布docker(20.10.1)+k8s(1.20.1)
- 如何记录和不寻常的唤醒中断源
- arm nodejs_英伟达打算收购Arm,或将成有史以来最大半导体收购案
- linux下比较文件并输出,Linux使用diff命令比较文件的方法
- VMWare学习总结(1)——Centos7安装完毕后无法联网的解决方法
- 医疗小程序源码_零售小程序源码,零售小程序商城
- LoadRunner压力测试案列
- 共享单车数据集_共享单车数据可视化分析
- 共享打印机无法访问计算机,win7系统文件夹和打印机共享后无法访问的解决方法...
- Spring依赖注入和简单demo
- Linkerd 2.10(Step by Step)—设置服务配置文件
- 服务器系统开机黑屏只有个鼠标,Win7系统开机却显示黑屏并只有鼠标光标该怎么办...
- Git扩展工具--GitExtension的安装和配置--2021-8-22
- 500内部服务器错误。你查找的资源存在问题,因而无法显示