利用 ICEpdf 快速实现 pdf 文件预览功能
之前工作中,需要实现一个在线预览pdf的功能,一开始用的的 jQuery-media 插件来实现的,后来感觉有点慢,就继续寻找更好的替代品,直到遇见了 ICE pdf。。。
ICEpdf (官网:http://www.icesoft.org/java/home.jsf) 原理是基于 Java SE 中的 Swing 实现的 (谁说 Swing 没有用武之地了。。。) ,将一个 PDF 文件作为一个 Document 对象,调用封装的方法,将该文件的每一页生成一张图片!
关键代码如下:
public static void main(String[] args) {
String filePath = "test.pdf";
// open the file
Document document = new Document();
try {
document.setFile(filePath);
} catch (PDFException e) {
System.out.println("parsing PDF document failure" + e);
} catch (PDFSecurityException e) {
System.out.println("encrytion not supported " + e);
} catch (IOException e) {
System.out.println("IOException " + e);
}
// save page captures to file
float scale = 2.0f;
float rotation = 360f;
// Paint each pages content to an image and write the image to file
System.out.println("The number of page: " + document.getNumberOfPages());
for (int i = 0; i < 5; i++) {
BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_TRIMBOX, rotation, scale);
try {
System.out.println("capturing page: " + i);
File file = new File("imageCapture_" + i + ".png");
ImageIO.write(image, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
}
// clean up resources
document.dispose();
}
我的 jar 包用的是 icepdf-core-6.0.0.jar ,
首先,声明一个 Document 对象,调用 setFile(String filePath) 方法,参数为 pdf 绝对或者相当路径;
变量 scale 代表放缩比例,默认为 1,越大生成的图片越清晰;
变量 rotation 为旋转角度,360度一个周期,可以设置任意值试试;
然后调用 getPageImage() 方法,生成图片流,然后对图片进行处理,可以输出到本地,也可以以流的形式传到页面,实现快速预览的效果。

最后,我利用这个功能,在首次预览时,生成对应页码图片到本地或者服务器,第二次预览则直接查看图片,使得用户体验更好~
利用 ICEpdf 快速实现 pdf 文件预览功能的更多相关文章
- Vue PDF文件预览vue-pdf
最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,GitHub地址:https:// ...
- java 文件转成pdf文件 预览
一.前端代码 //预览功能 preview: function () { //判断选中状态 var ids =""; var num = 0; $(".checkbox& ...
- iOS实现pdf文件预览,上下翻页、缩放,读取pdf目录
最近有个朋友想做一个pdf预览,要求能够上下滑动翻页.带缩放.目录跳转功能. 因为之前我只做过简单的预览,那时直接用uiwebview实现的,这次找了下资料,发现一个比较好的库. 其原理实现: 自定义 ...
- PDF文件预览和下载
背景:项目中实现pdf文件的预览以及下载 环境:jdk1.8.SpringBoot2.0.Maven PDF.js下载地址将下载的源码拷入项目中 修改viewer.js: 将default ...
- 利用js加载本地图片预览功能
直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...
- vue使用kkfileview文件预览功能
1.环境要求: java 1.8+ 2.部署运行: 本机以及虚拟机上运行: 1.从https://gitee.com/kekingcn/file-online-preview/releases地址下载 ...
- vue中如何实现pdf文件预览?
今天产品提出一个优化的需求,就是之前我们做的图片展示就是一个img标签搞定,由于我们做的是海外后台管理系统,那边的人上传的文件时pdf格式,vue本事是不支持这种格式文件展示的,于是就google搜索 ...
- win10打文件预览功能
- JS通过使用PDFJS实现基于文件流的预览功能
需求: 使用JS实现PDF文件预览功能 备选方案: 使用ViewerJS,官网 http://viewerjs.org/ 使用PDFJS,官网 https://mozilla.github.io/ ...
随机推荐
- MySQL 笔记整理(20) --幻读是什么,幻读有什么问题?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 20) --幻读是什么,幻读有什么问题? 我们先来看看表结构和初始化数据 ...
- git@oschina使用入门(图形界面版)
首先,如果你想使用git@oschina ,你的电脑上必须先有git工具:你可以从这里获取谷歌提供的git.exe http://git-scm.com/当然,如果你能熟练通过命令行操作git,那么这 ...
- 在一般处理程序里面读写session
1.引用命名空间 using System.Web.SessionState; 2.继承IRequiresSessionState接口 3.利用httpcontext类读写即可 context.ses ...
- cesium随笔 — 简单实现获取三维范围(包括相机高度)
代码 // 获取当前三维范围 function getCurrentExtent() { // 范围对象 var extent = {}; // 得到当前三维场景 var scene = viewer ...
- mongodb 备份脚本
###############备份脚本#!/bin/bash basepath="/data/backup/dump$(date +%Y%m%d%H%M%S)" if [ ! -d ...
- 0基础浅谈反射型xss (1)
0X1:在学习xss之前,先快速学习相关的HTML代码 1. <input>标签 文本域用法: <input type="text" /> Type的作 ...
- Android中线程和线程池
我们知道线程是CPU调度的最小单位.在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的.在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,Inte ...
- 浅谈HashMap原理,记录entrySet中的一些疑问
HashMap的底层的一些变量: transient Node<K,V>[] table; //存储数据的Node数组 transient Set<java.util.Map.Ent ...
- Chrome控制台打印输出彩色调试信息
我们都知道Chrome浏览器在控制台可以通过console.log("Hello");输出调试信息.但是每次打印的内容是黑白的难免有些单调,今天偶然的发现某网站居然能够打印彩色调试 ...
- python 之 比较哪个数据大小
#定义一个字典info={}#定义比较的人数n=int(input("请输入你要比较的人数"))#循环while(n): #输入a,b 两个数据 ,分别代表学号 和分数 # 把输入 ...