Springboot利用itext通过模板生成pdf文档带图片功能

发布于 2021-10-12 09:20

环境:springboot2.3.10.RELEASE + itextpdf5.5.13.2


依赖

<dependency>  <groupId>com.itextpdf</groupId>  <artifactId>itextpdf</artifactId>  <version>5.5.13.2</version></dependency><dependency>  <groupId>com.itextpdf</groupId>  <artifactId>itext-asian</artifactId>  <version>5.2.0</version></dependency>

注意:itext-asian该依赖不引入不会报错,但是文本信息不会显示。

制作模版

  • 先通过word制作模版

将该word文档另存为pdf文档。

  • 使用Adobe Acrobat 9 Pro打开刚另存为的pdf文档

1、先打开Adobe Acrobat 9 Pro

注意箭头所指的也需要绘制一个文本域,用来获取位置信息添加图片。

生成PDF工具类

public static void genPdf(Student student, HttpServletResponse response) {  try {    ClassPathResource resource = new ClassPathResource("tml/pdf/student.pdf");    PdfReader pdfReader = new PdfReader(resource.getInputStream()) ;          ByteArrayOutputStream baos = new ByteArrayOutputStream();    PdfStamper stamper = new PdfStamper(pdfReader, baos);    AcroFields af = stamper.getAcroFields();    af.setField("name", student.getName()) ;    af.setField("major", student.getMajor()) ;    af.setField("sno", student.getSno()) ;    af.setField("place", student.getPlace()) ;    // 插入图片    String imgUrl = new ClassPathResource("static/1.png").getURL().getPath() ;    FieldPosition position = af.getFieldPositions("header").get(0) ;    int pageNo = position.page ;    Rectangle signRect = position.position;    float x = signRect.getLeft();    float y = signRect.getBottom();    // 读图片    Image image = Image.getInstance(imgUrl);    // 获取操作的页面    PdfContentByte under = stamper.getOverContent(pageNo);    // 根据域的大小缩放图片    image.scaleToFit(signRect.getWidth(), signRect.getHeight());    // 添加图片    image.setAbsolutePosition(x, y);    under.addImage(image);                // 设置输出pdf    // 如果为false那么生成的PDF文件还能编辑,一定要设为true    stamper.setFormFlattening(true);    stamper.close();    //响应到客户端    String downloadFileName = new String((student.getName() + "个人信息.pdf").getBytes("utf-8"),"iso8859-1");    response.addHeader("Content-Disposition", "attachment;filename="+downloadFileName);    OutputStream os = new BufferedOutputStream(response.getOutputStream());     Document doc = new Document();    PdfCopy copy = new PdfCopy(doc, os);    doc.open();    PdfImportedPage importPage = copy.getImportedPage(new PdfReader(baos.toByteArray()), 1);    copy.addPage(importPage);    doc.close();     response.setContentType("application/pdf");    os.flush();    os.close();              } catch (Exception e) {    logger.error("生成PDF错误:{}", e) ;  }}

接口

@GetMapping("/download")public void download() {      Student student = new Student() ;  student.setMajor("计算机生命与科学") ;  student.setName("李逵") ;  student.setPlace("北京") ;  student.setSno("S001") ;      PdfUtil.genPdf(student, response) ;    }

生成文档

完毕!!!

给个关注呗谢谢

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材