使用JPedal取代PDFBox
http://wanggp.iteye.com/blog/1144177
————————————————————————————————————————————————
之前都是使用PDFBOX0.8版本来实现PDF转为Image,0.8版本的PDFBox转为Image还有N多问题,比如部分扫描PDF无法转换、缺少字体等等问题。而且我们是修改PDFBox源代码来解决上述问题,但是还是不能解决全部问题。
JPedal是一个商业的处理PDF软件,但是JPedal有一个裁切版,裁切版JPedal使用LGPL协议进行开源,可免费使用。如下摘抄官方说明:
JPedal is a commercial PDF library, so it is not free (and it cannot realistically be because no income means no money to fund development and support). OEM customers also get access to the source code so they have free access to the product in the sense they are not limited – they can alter it if they want. Commercial users get free support in the sense we charge everyone a yearly fee to cover general support costs. We also have a cutdown version of the PDF viewer which we release under an LGPL license. This means that you can access the source code and the jar and use them without any payment. You just have to abide by the LGPL license. In this sense it is totally free. We build it from the full version and remove items (so it gets most bug fixes and some features). So it is free in that sense. Our hope is that it will encourage lots of people to use it, to do interesting things with it and some may become commercial clients. And we like to have a free entry-level version – it appeals to the rebel in our nature And being a cut-down version of a commercial product means you are likely to see updates – there are several ‘dead’ free Java PDF libraries because they do not generate any revenues to put back into development and support.
选择使用JPedal替换Pdfbox出于如下方面考虑:
第一:解决扫描类PDF、缺少字体问题,不用修改源代码,解决软件后续维护升级问题。
第二:转换效率高。一个70页PDF,使用PDFBox转换时间为27秒左右,而且使用JPedal的转换时间才16秒,大大地缩短转换时间。
第三:由于只需要把PDFBox转换为Image,暂无其他需求,故裁切版JPedal已可满足需求。
下面使用JPedal 转换为图片的代码
/** instance of PdfDecoder to convert PDF into image */
PdfDecoder decode_pdf = new PdfDecoder(true); /** set mappings for non-embedded fonts to use */
PdfDecoder.setFontReplacements(decode_pdf); /** open the PDF file - can also be a URL or a byte array */ decode_pdf.openPdfFileFromInputStream(in, false);
// decode_pdf.openPdfFile("C:/myPDF.pdf", "password"); //encrypted
// file
// decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF
// decode_pdf.openPdfFileFromURL("http://www.mysite.com/myPDF.pdf",false); /** get page 1 as an image */
// page range if you want to extract all pages with a loop
// int start = 1, end = decode_pdf.getPageCount();
int pageCount = decode_pdf.getPageCount(); if (curPage > pageCount || curPage <= 0)
curPage = pageCount; BufferedImage img = null; img = decode_pdf.getPageAsImage(curPage ); pageCnt=String.valueOf(pageCount); FileOutputStream out;
out = new FileOutputStream(file); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(img);
out.close();
评论
发现最新版本的API有些变化,PdfDecoder.setFontReplacements(decode_pdf);
变为:FontMappings.setFontReplacements(); 但是没有带参数。你的decode_pdf值是“UTF-8”?
使用JPedal取代PDFBox的更多相关文章
- 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...
- 取代SharedPreferences的多进程解决方案
Android的SharedPreferences用来存储一些键值对, 但是却不支持跨进程使用. 跨进程来用的话, 当然是放在数据库更可靠啦, 本文主要是给作者的新库PreferencesProvid ...
- pdfbox加载pdf时遇到wrappedioexception报错处理方式
现在一个项目要对pdf做处理.由于其中一个pdf约为80M左右,用pdfbox读取pdf时遇到了wrappedioexception错误.监控得到说内存不足.于是请教项目经理.他告诉我在Open De ...
- 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较
重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...
- 第1章 重构,第一个案例(3):运用多态取代switch
3. 运用多态取代与价格相关的条件逻辑 3.1 switch和“常客积分”代码的再次搬迁 (1)switch:最好不要在另一个对象的属性上运用switch语句 switch(getMovie().ge ...
- 苹果未来:增强现实设备将会取代iPhone
近日,华尔街知名度相当高的苹果分析师木斯特(Gene Munster)决定转行组建自己的风险投资公司,临走前他发布了最后一份关于苹果的研究报告,他对苹果未来的发展进行了一番预测.Munster表示,以 ...
- 远程桌面不能连接,提示awgina.dll取代错误的解决办法
远程桌面不能连接,错误提示:您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件c:\windows\system32\awgina.dll取代,如下图所示: 原因: ...
- systemctl 取代 service
要使用systemd, linux内核版本要高于: 2.6.39 systemctl的命令格式: systemctl 动作命令(如start stop restart status) 服务名称.ser ...
- 该不该用inline-block取代float? inline和float的区别?
该不该用inline-block取代float? 请看这篇文章引用: jtyjty99999的博客 让块级元素 水平排列的通常方式是float, 但是float可能会带来很多意外的问题 可以考虑用in ...
随机推荐
- Android开发学习之数据存取
Android系统中提供了一种文件读写的方法,可以将一些数据以文件的形式保存在设备中.比如一些word文档,PDF文档,图片,音频,视频文件等. 使用文件读写方法的步骤: 1.调用Context.op ...
- iOS CPU占有率达到了100%甚至更多,然后导致App闪退
今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉. 下面就讲一讲怎么去定位这个问题: 1.打开Xcode,把项 ...
- xcode 在哪里新建category、protocol等文件
1.和以前新建新文件一样.2.当然选IOS啦,不过OS X也有这个选项,然后Objctive-C File. 3.在File Type里选就OK啦.
- asp.net core mvc视频A:笔记3-7.ViewStart与ViewImort
项目位置 放在其它目录应该不会执行! 默认配置 默认配置
- android语音识别技术
今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下: Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如果找不到设置,就 ...
- 基于UDP协议的网络程序
一.下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器 #include <sys/types.h> #include <sys/so ...
- Linux时钟
一.前言 时钟或者钟表(clock)是一种计时工具,每个人都至少有一块,可能在你的手机里,也可能佩戴在你的手腕上.如果Linux也是一个普通人的话,那么她的手腕上应该有十几块手表,包括:CLOCK_R ...
- spring boot几个初始配置文件
一.gradle // https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp compile group: 'com.square ...
- xtrabackup迁移单独一张INNODB表
- centos 下Qt安装 mysql驱动(亲测可行)
(前半部分没有试过,因为我的有mysql驱动,实在抱歉) 1.预防万一,先安装一下mysql-devel(一定要装!). 不安装的话后面编译会出现找不到-lmysqlclient的问题. 2. 开始编 ...