使用iText动态生成pdf,并用pdf.js在线预览
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在线预览相关推荐
- js在线预览pdf文件
js在线预览PDF文件 一.效果预览 二.实现代码: <html> <head> <meta http-equiv="Content-Type" co ...
- java零碎要点010---Java实现office文档与pdf文档的在线预览功能
最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...
- java 预览word文档_Java实现office文档与pdf文档的在线预览功能
最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...
- php+预览和下载pdf文件,vue实现在线预览pdf文件和下载(pdf.js)
最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件, ...
- html js 在线预览 pdf word xls等
1.前端实现pdf文件在线预览功能 方式一.pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面.在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 <a ...
- pdf.js在线预览PDF文件实现
pdf.js是一款功能比较强大的在线预览PDF插件,自带"打印","搜索","翻页"等功能,强大且实现方便,并且兼容性比较好(兼容ie10及 ...
- js在线预览pdf,doc,xls,jpg等文件
由于项目需要,需要在上传文件后在线预览所上传的文件.最开始我的思路就是想到各种插件什么的.比如说pdf.js.pdfobject,但最后都没能达到我所想要的效果. 最后我发现,原来,只需要一个很简单的 ...
- html做在线预览pdf文件,html中在线预览pdf文件之pdf在线预览插件
html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件! 翻来覆去找到两种办法 ,最后采用了jquery.media.js插件 方式一 将pdf ...
- html 在线预览pdf功能,html中在线预览pdf文件之pdf在线预览插件
html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件!javascript 翻来覆去找到两种办法 ,最后采用了jquery.media.js插 ...
最新文章
- luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
- std::shuffle-c++
- 【uva 1614】Hell on the Markets(算法效率--贪心)
- redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?
- Python+Anaconda+PyCharm的安装和基本使用
- 开心哲理---您的妻子! --转by yp
- 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
- C# MP3操作类,能播放指定的mp3文件,或播放嵌入的资源中的Mp3文件
- 吉大网络教育护理学专升本病例分析
- ubuntu安装nividia驱动
- 计算机文件自动备份到移动硬盘,电脑文件定时自动备份到移动硬盘,有什么方法?...
- 页面可视化搭建工具业界的轮子
- VAX v10.9.2062.0-52pj vDie 分析 【转载请注明出处】
- VBA使用PING测试网络连接
- FreeDOM —— 一个可迁移的网页信息抽取模型
- linux 在指定区域分配内存 c语言,C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存...
- 解除带宽限速,提升电脑网速
- flutter引入高德地图_玩玩Flutter Web —— 实现高德地图插件
- 单目深度估计数据集:NYU Depth Dataset V2
- 如何从手机远程控制uTorrent
热门文章
- Romberg算法(Matlab实现)
- Delphi 2007 代码补全、语句提示的快捷键是什么?
- 【网络】HTTP请求报文和响应报文
- 关于用迅雷会下载到比较旧的资源版本?
- Acrel-3200远程预付费电能管理系统 在福州万宝产业园的应用
- 搞懂集中度分析——GIS跨学科
- 华兴资本公布上半年财报:经调整利润5110万美元
- Python爬取腾讯动漫全站漫画详细教程(附带源码)
- 支付业务稳健,到店电商快速放量,移卡迎来价值评估新锚点
- linux time效率,time(),gettimeofday()及GetTickCount()效率比较