Java有很多生成pdf的工具库,常用的有Apache PdfBox,iText,POI。我的项目里用的是iText。
下面说下详细步骤:
后台引入依赖:

      <!--pdf生成类库--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><!--pdf支持亚洲字体--><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

Java代码:

 /**标题字体*/private static Font titleFont = new Font(PdfUtils.chineseFont, 35, Font.BOLD, PdfUtils.baseColor);/**单元格字体*/private static Font cellFont = new Font(PdfUtils.chineseFont, 10, Font.NORMAL, PdfUtils.baseColor);@GetMapping("/getPdf")public void getPdf(String teacherName, HttpServletResponse response) {// 创建Pdf文档对象Document doc = new Document(PageSize.A4);PdfWriter pdfWriter = null;try {//指定pdf导出位置,这里我们直接将它导出给response的输出流,如果要导出到磁盘上的话就用FileOutputStreampdfWriter = PdfWriter.getInstance(doc, response.getOutputStream());doc.open();//*******添加第一页内容**********Paragraph title = PdfUtils.createCenterParagraph("三年1班学生表", titleFont);//设置文本块下间距title.setSpacingAfter(80);//将文本块加入pdf文档中doc.add(title);Paragraph teacher = PdfUtils.createRightParagraph("老师:" + teacherName, cellFont);doc.add(teacher);//******添加第二页内容***********//将纸张由竖向改为横向Rectangle rectangle = new Rectangle(PageSize.A4);doc.setPageSize(rectangle.rotate());doc.newPage();//创建一个有4列的表PdfPTable table = PdfUtils.createCenterTable(4);ArrayList<PdfPRow> tableRows = table.getRows();//表头PdfPCell[] headerCells = new PdfPCell[4];headerCells[0] = PdfUtils.createCell("姓名", cellFont);headerCells[1] = PdfUtils.createCell("学号", cellFont);headerCells[2] = PdfUtils.createCell("住址", cellFont);headerCells[3] = PdfUtils.createCell("性别", cellFont);PdfPRow headerRow = new PdfPRow(headerCells);tableRows.add(headerRow);for (int i = 0; i < 5; i++) {PdfPCell[] cells = new PdfPCell[4];cells[0] = PdfUtils.createCell("学生"+i, cellFont);cells[1] = PdfUtils.createCell(""+i, cellFont);cells[2] = PdfUtils.createCell("住址"+i, cellFont);cells[3] = PdfUtils.createCell(i%2 == 1? "男":"女", cellFont);PdfPRow row = new PdfPRow(cells);tableRows.add(row);}doc.add(table);doc.close();} catch (Exception e) {e.printStackTrace();} finally {if (doc != null) {doc.close();}if (pdfWriter != null) {pdfWriter.close();}}}

Pdf工具类:

/*** pdf工具类*/
@Slf4j
public class PdfUtils {public static BaseFont chineseFont;public static BaseColor baseColor;static {try {//设置宋体chineseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);baseColor = BaseColor.BLACK;} catch (DocumentException | IOException e) {log.error("设置pdf初始字体异常", e);}}/*** 创建一个水平居中的文字段落* @param content 内容* @param font 字体* @return*/public static Paragraph createCenterParagraph(String content, Font font) {Paragraph result = new Paragraph(content, font);result.setAlignment(Paragraph.ALIGN_CENTER);return result;}/*** 创建一个向右对齐的文字段落* @param content 内容* @param font 字体* @return*/public static Paragraph createRightParagraph(String content, Font font) {Paragraph result = new Paragraph(content, font);result.setAlignment(Paragraph.ALIGN_RIGHT);return result;}/*** 创建一个文字段落,对齐方式自定义* @param content 内容* @param font 字体* @param alignment 对齐方式* @return*/public static Paragraph createParagraph(String content, Font font, int alignment) {Paragraph result = new Paragraph(content, font);result.setAlignment(alignment);return result;}/*** 创建一个水平居中的表* @param numColumns 表的列数* @return*/public static PdfPTable createCenterTable(int numColumns) {PdfPTable result = new PdfPTable(numColumns);result.setHorizontalAlignment(PdfPTable.ALIGN_CENTER);return result;}/*** 创建一个单元格,单元格内容水平居中垂直居中* @param content 单元格内容* @param font 字体* @return*/public static PdfPCell createCell(String content, Font font) {PdfPCell result = new PdfPCell(new Phrase(content, font));//设置单元格内容垂直居中result.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);//设置党员个内容水平居中result.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);return result;}
}

下载pdf.js,下载地址https://github.com/mozilla/pdf.js/archive/gh-pages.zip
将压缩包中的web和build两个文件夹放到项目中

创建一个index.html页面进行测试,注意路径问题

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>pdf在线预览</title>
</head>
<body>
<input type="button" onclick="openPDF()" value="点我打开pdf预览"/>
<script>function openPDF(){var url="/getPdf";//引入的pdf.js文件夹的路径下的web/viewer.html 参数:后台流文件URL+teacherName=?//注意路径问题 %3D是“=”号的转义,window.open("./pdfjs/web/viewer.html?file="+ url + "?teacherName%3D陈大大");}</script>
</body>
</html>

程序启动后浏览器访问127.0.0.1:8080/index.html,测试结果如下


这篇博客的代码在github上:https://github.com/chenzhixiang111/pdf-preview

使用iText动态生成pdf,并用pdf.js在线预览相关推荐

  1. js在线预览pdf文件

    js在线预览PDF文件 一.效果预览 二.实现代码: <html> <head> <meta http-equiv="Content-Type" co ...

  2. java零碎要点010---Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  3. java 预览word文档_Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  4. php+预览和下载pdf文件,vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件, ...

  5. html js 在线预览 pdf word xls等

    1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <a ...

  6. pdf.js在线预览PDF文件实现

    pdf.js是一款功能比较强大的在线预览PDF插件,自带"打印","搜索","翻页"等功能,强大且实现方便,并且兼容性比较好(兼容ie10及 ...

  7. js在线预览pdf,doc,xls,jpg等文件

    由于项目需要,需要在上传文件后在线预览所上传的文件.最开始我的思路就是想到各种插件什么的.比如说pdf.js.pdfobject,但最后都没能达到我所想要的效果. 最后我发现,原来,只需要一个很简单的 ...

  8. html做在线预览pdf文件,html中在线预览pdf文件之pdf在线预览插件

    html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件! 翻来覆去找到两种办法 ,最后采用了jquery.media.js插件 方式一 将pdf ...

  9. html 在线预览pdf功能,html中在线预览pdf文件之pdf在线预览插件

    html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件!javascript 翻来覆去找到两种办法 ,最后采用了jquery.media.js插 ...

最新文章

  1. luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
  2. std::shuffle-c++
  3. 【uva 1614】Hell on the Markets(算法效率--贪心)
  4. redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?
  5. Python+Anaconda+PyCharm的安装和基本使用
  6. 开心哲理---您的妻子! --转by yp
  7. 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
  8. C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
  9. 吉大网络教育护理学专升本病例分析
  10. ubuntu安装nividia驱动
  11. 计算机文件自动备份到移动硬盘,电脑文件定时自动备份到移动硬盘,有什么方法?...
  12. 页面可视化搭建工具业界的轮子
  13. VAX v10.9.2062.0-52pj vDie 分析 【转载请注明出处】
  14. VBA使用PING测试网络连接
  15. FreeDOM —— 一个可迁移的网页信息抽取模型
  16. linux 在指定区域分配内存 c语言,C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存...
  17. 解除带宽限速,提升电脑网速
  18. flutter引入高德地图_玩玩Flutter Web —— 实现高德地图插件
  19. 单目深度估计数据集:NYU Depth Dataset V2
  20. 如何从手机远程控制uTorrent

热门文章

  1. Romberg算法(Matlab实现)
  2. Delphi 2007 代码补全、语句提示的快捷键是什么?
  3. 【网络】HTTP请求报文和响应报文
  4. 关于用迅雷会下载到比较旧的资源版本?
  5. Acrel-3200远程预付费电能管理系统 在福州万宝产业园的应用
  6. 搞懂集中度分析——GIS跨学科
  7. 华兴资本公布上半年财报:经调整利润5110万美元
  8. Python爬取腾讯动漫全站漫画详细教程(附带源码)
  9. 支付业务稳健,到店电商快速放量,移卡迎来价值评估新锚点
  10. linux time效率,time(),gettimeofday()及GetTickCount()效率比较