注意字体要用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,用文本域的方式相关推荐

  1. 解决部分浏览器不能显示itext生成的PDF文件文本域内容问题

    解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 参考文章: (1)解决部分浏览器不能显示itext生成的PDF文件文本域内容问题 (2)https://www.cnblogs.com/ ...

  2. java 取pdf 文本域_Java iText填写PDF模版文本域空白问题

    public static void main(String[] args) throws DocumentException, IOException { PdfReader reader = ne ...

  3. java使用itextpdf生成pdf并填充自定义数据

    项目中有个需求,对于已有的数据生成对应的发票pdf或者合同pdf,这些pdf具有一些特性,就是pdf有固定的格式,类似于表格,我们只要往表格里面填充数据即可.当然,也会涉及到签章,二维码等需求. 总体 ...

  4. itext文本域自动换行_Java导出Pdf格式表单

    前言 作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求 需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 Ado ...

  5. JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行

    1.前言 前一段时间遇到一个制作Pdf的业务,自己下来摸索了一下,基本上解决.将其中遇到的几个问题及解决方法做以记录,仅供大家参考. 首先在这里对于刚接触该类型业务的同学说明下,ItexPdf支持使用 ...

  6. java pdf表单域实现_Java 创建PDF表单域 - 文本框、复选框、列表框、组合框、按钮等...

    表单域包括文本框.复选框.列表框.组合框.按钮和签名域等,主要用于收集用户填写或选择的数据.这篇文章将介绍如何在Java应用程序中给PDF文档添加表单域. 导入jar文件 本文所使用的PDF类库是Fr ...

  7. css设置字体颜色、文本对齐方式、首行缩进、文本装饰、列表样式、鼠标样式、禁止文本域拖拽、轮廓线、块级元素对齐方式、文字溢出设置

    color:设置字体颜色: 取值方式有:1.颜色值red,green等 .2.十六进制#FF0000,#FF2313等.3.RGB代码rgb(225,225,112)或rgb(100%,55%,0%) ...

  8. spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具

    文章目录 前言 一.java 导出PDF 的几个工具 1. PDF Box 2. JasperReports/jFreeReport导出 报表 PDF 3. itextpdf 导出PDF(敲重点) 二 ...

  9. Pdf文本域替换,iText替换pdf文本域

    替换pdf字段主要工具 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf& ...

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

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

最新文章

  1. 防止******ADSL的一些技巧
  2. Packet Tracer 5.0建构CCNA实验攻略(3)——Cisco VTP
  3. Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
  4. 提高代码质量 CheckStyle FindBugs PMD
  5. Linux环境搭建nginx负载
  6. 手动封装element-ui里面的button组件
  7. docker jenkins 公钥_代码自动发布docker(20.10.1)+k8s(1.20.1)
  8. 如何记录和不寻常的唤醒中断源
  9. arm nodejs_英伟达打算收购Arm,或将成有史以来最大半导体收购案
  10. linux下比较文件并输出,Linux使用diff命令比较文件的方法
  11. VMWare学习总结(1)——Centos7安装完毕后无法联网的解决方法
  12. 医疗小程序源码_零售小程序源码,零售小程序商城
  13. LoadRunner压力测试案列
  14. 共享单车数据集_共享单车数据可视化分析
  15. 共享打印机无法访问计算机,win7系统文件夹和打印机共享后无法访问的解决方法...
  16. Spring依赖注入和简单demo
  17. Linkerd 2.10(Step by Step)—设置服务配置文件
  18. 服务器系统开机黑屏只有个鼠标,Win7系统开机却显示黑屏并只有鼠标光标该怎么办...
  19. Git扩展工具--GitExtension的安装和配置--2021-8-22
  20. 500内部服务器错误。你查找的资源存在问题,因而无法显示

热门文章

  1. 生成树协议(一)STP协议原理简介:广播风暴、MAC地址表震荡实验、STP工作原理、BPDU简介、STP故障处理
  2. 心理学与生活 -人格与动机
  3. 为谷歌浏览器Chrome创建多个用户
  4. 风云唐太宗(上部)精要
  5. 安卓手机版php服务器地址,Almp——安卓系统上搭建本地php服务器环境
  6. python处理图片文件,python 间接处理webp图片文件
  7. 网页磁贴模板_文本磁贴(登录)模板 (HTML)
  8. 项目管理中,如何有效地把控项目风险?
  9. 读 稻盛和夫《干法》
  10. python求三角形斜边-python 已知三条边求三角形的角度案例