在你看下面文章的时候,强烈建议看下:
关于使用iText库创建PDF文件详细说明:https://www.cnblogs.com/chenpi/p/5534595.html
作为学习,当然希望免费的可以利用一下就好。
推荐:(如果你有钱,还是可以卖一年的,也不是很贵)

首先我们制作需要的excel或者word模板,另存为pdf,利用软件进行编辑。

我们将上面的PDF利用软件编辑。
加水印等等结果如下:

接下来制作表单:


接下来为每一个需要填的内容添加文本域。

导包:

<!-- pdf实现 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.13</version></dependency>

程序:
pdf封装实体:

package com.poi.testpoi.pojo;import lombok.Data;
import lombok.Getter;
import lombok.Setter;@Data
@Getter
@Setter
public class PdfEntity {private String dogNo;private String name;private Integer age;private Integer dogYear;private String brithday;private String reason;private String remark;private String level;private String ability;private String summary;
}

控制层:

package com.poi.testpoi.controller;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.poi.testpoi.pojo.PdfEntity;@Controller
public class PDFController {@RequestMapping("/createPDF")
@ResponseBody
public String  createPDF(HttpServletResponse response) throws DocumentException {// 模板路径 关于路径最好放在配置文件中,我这里只想说明问题String templatePath = "C:\\Users\\zy962\\Desktop\\temp.pdf";// 生成文件路径String filename = "testpdf.pdf";// 创建对象PdfEntity entity = new PdfEntity();entity.setDogNo("NO123456");entity.setName("周毅");entity.setAge(26);entity.setDogYear(4);entity.setBrithday("93.11.18");entity.setReason("已经失去了追人的能力。陷入了一个死循环:我主动找她吧,要是对我没感觉,找了不理我怎么办?于是还没尝试,就不去招惹别人了。");entity.setRemark("并不是每一个单身的人,都代表可撩的状态,有的人早已经对恋爱不抱什么希望。只想好好学习,好好工作,然后发财。");entity.setLevel("到了我这种境界后,就可以和寂寞和睦相处。若有了独自活下去的觉悟,慢慢变老也会充满乐趣。");entity.setAbility("非常羡慕那些能一喜欢/一追就是几年的人,这种恒心,在他来说,一个月、不一个周都做不到,两天应该也许大概能做到。");entity.setSummary("综上结论,面向对象是不存在的,面向过程是不存在的,汪汪汪一只。");Map<String, Object> datas = new HashMap<String, Object>();datas.put("name", entity.getName());datas.put("dogNo", entity.getDogNo());datas.put("age", entity.getAge());datas.put("dogYear", entity.getDogYear());datas.put("brithday", entity.getBrithday());datas.put("reason", entity.getReason());datas.put("remark", entity.getRemark());datas.put("level", entity.getLevel());datas.put("ability", entity.getAbility());datas.put("summary", entity.getSummary());PdfReader reader;OutputStream os = null;ByteArrayOutputStream baos = null;PdfStamper stamper;try {os = response.getOutputStream();// 读入pdf表单reader = new PdfReader(templatePath);baos = new ByteArrayOutputStream();// 根据表单生成一个新的pdfstamper = new PdfStamper(reader, baos);// 获取pdf表单AcroFields formTexts = stamper.getAcroFields();// 设置字体(这里设置为系统字体,你也可以引入其他的字体),不设置很可能,中文无法显示。BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);formTexts.addSubstitutionFont(bf);// 数据查询后,值的植入 强烈推荐键值方式,其他方式很容易混Set<String> keySet =  datas.keySet();for (String key : keySet) {formTexts.setField(key, datas.get(key).toString());}stamper.setFormFlattening(true); // 这个必须设stamper.close();// 创建一个pdf实例Document document = new Document();PdfCopy copy = new PdfCopy(document, os);document.open();PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(baos.toByteArray()), 1);copy.addPage(importedPage);document.close(); // open和close一套// 强制下载//response.reset();response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode(filename, "UTF-8"));} catch (IOException e) {e.printStackTrace();} finally { // 最后一定要关闭流try {baos.close();os.close();} catch (Exception e) {e.printStackTrace();}}return "成功,请去查看";
}
}

运行结果:

我们发现内容并没有显示全,经过调查,Java内部是不能实现的。只能在制作pdf表单的时候设置。设置为多行即可。

我们更改后:

如果有更复杂的实现:再次建议参考:https://www.cnblogs.com/chenpi/p/5534595.html。写的非常的全。

还有就是这种设置具体位置也有可能会用到的。

     // 通过域名获取所在页和坐标,左下角为起点String imgpath="e:/aa.png";int pageNo = form.getFieldPositions("img").get(0).page;Rectangle signRect = form.getFieldPositions("img").get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);

springboot实现pdf打印和预览相关推荐

  1. SpringBoot(十五)_springboot实现预览pdf

    最近,项目上要做个打印的东西,还要预览.我想就直接生成pdf预览,然后用户选择打印 于是,昨天找了找资料.一般用itext 进行转pdf.于是我就用springboot试了试,代码比较简单,现在只是简 ...

  2. DevExpress的PdfViewer添加工具栏实现PDF打开、预览、保存、打印

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  3. window.print() 前端页面打印与预览PDF

    window.print()打印是浏览器自带的打印,实现原理是将html转换为pdf可以在线预览打印或者导出pdf,在任何网页上可通过Ctil+p快捷键调出浏览器打印程序,它可将整个网页打印出来,在我 ...

  4. Springboot + layui + FTP文件上传删除 + HTTP文件下载预览 + pdf.js文件预览(项目实战总结)

    文件管理 0.需求及前言 1.前端,上传按钮嵌入数据表格中 2.利用IIS部署FTP文件服务器 3.后台FTP连接和文件操作 4.FTP遇到的问题和解决方案 5.预览PDF文件V1.0:FTP+临时文 ...

  5. SpringBoot实现万能文件在线预览,已开源,真香!!!

    欢迎关注方志朋的博客,回复"666"获面试宝典 推荐一个用Spring Boot搭建的文档在线预览解决方案: kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对 ...

  6. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

  7. ABAP 如何判断调用smartforms时是进行打印还是预览

    原文地址:ABAP 如何判断调用smartforms时是进行打印还是预览作者:Lemon SAP在调用smartforms 时,在打印时有直接打印和预览两个选择,有时候需要区别用户的操作是打印还是预览 ...

  8. Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

    Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...

  9. 引用pdf插件在线预览的问题

    引用pdf插件在线预览带中文名称文件报错解决 解决 由图可知插件pdf.js在解析带有中文的pdf文件时出现乱码问题 直接去改pdf.js比较麻烦且不好改,我们可以在预览pdf时候这么定义: Prin ...

  10. Android实现PDF格式文件预览

    前言: 接着上一篇的博客,在搜索出手机内的.pdf格式文件后,实现pdf文件的预览的方式有很多, 1.Android PdfViewer项目地址: https://github.com/barteks ...

最新文章

  1. 3种方式理解旋转变换
  2. 切换JAVAC的方法
  3. static和构造函数初始化顺序
  4. JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用
  5. 会python学php难吗_会python再学php难吗
  6. python基本输入输出系统_Python的输入输出
  7. 获取淘宝开发平台的sessionKey
  8. DBA自述:非科班出身,如何成为Oracle ACE
  9. 那些高曝光的Annotation(@ComponentScan、@PropertySource与@PropertySources、@Import与ImportResource)
  10. c++调用栈库函数_大华 | C/C++ 校招笔试题
  11. python使用密钥加密的表述_python - PythonGnuPG生成密钥,对消息进行加密和解密 - SO中文参考 - www.soinside.com...
  12. DB2操作指南及命令大全
  13. 电脑与电脑之间快速传输大文件的方法
  14. Redundant Paths(边双连通分量缩点+思维构造)
  15. 训练过程出现trian_dice一直大于1(mask范围0-255转为0-1)
  16. linux系统重启后找不到硬盘,戴尔电脑重装系统后找不到硬盘或找不到引导设备怎么办?...
  17. 架构探险-轻量级微服务架构_第3部分-单活动架构+一些时髦的Dagger
  18. Linux命令——bash
  19. PHP有没有 原子性,PHP程序的原子性和PHP的文件锁
  20. LeetCode 1155. 掷骰子的N种方法 每日一题

热门文章

  1. Unity-Chan Toon Shader 2 介绍
  2. Peoplesoft Pentest
  3. 一次失败的华为校园大使面试经历
  4. 交换机上网显示本地未连接服务器,本地连接提示受限制或无连接,处理思路?...
  5. 损失函数(MSE和交叉熵)
  6. 征途服务器 文件夹需手,手游新征途手工架设服务端+配套双客户端+架设流程+服务器部署文档等...
  7. 庐陵文化(作者:王剑冰,河南省作协副主席)
  8. pytorch转onnx报错的可能原因traced region did not have observable data dependence
  9. 电脑仙人掌机器人作文_仙人掌作文3篇
  10. html5 div 颜色代码,div 字体颜色