Pdfbox在linux下生成pdf,java调用pdfbox转pdf文件为图片文件,有中文时在windows上正常,部署到linux下乱码...

最近遇到了一个很头疼的问题,我们的项目移动端需要一个读pdf的功能,但是手机端开发人员说移动端是用jquerymobile做的,不能直接甩pdf文件过去(原因是pdf文件太大),于是乎我们想到了2个解决方案。

第一个:把pdf转成html丢过去,大家都方便,但是前期我们项目经理用的是pdfbox,死活都把pdf文件中的图片和表格转换不了,只能转文本文字,所以最后决定弃用掉。

第二个:那就是把pdf转换成图片文件,每页转成一张图片,可以生成2套图片传递过去,一套大图,一套小图,列表的时候显示小图,单击某个小图的时候显示对应大图,这样就ok了。不过想法倒是正确的,但是实现的时候出现问题了。用pdfbox转换图片倒是能够转换出来,windows上测试也没有任何问题,但是当项目发布到服务器(linux)上的时候,出现严重的问题了,那就是中文图片乱码了。。。这下悲剧了,百度google了一天,还是无解。最后实在用pdfbox处理不了中文的问题,决定换一个工具,那就是icepdf,icepdf是一款既有开源又要收费版的工具(我目前用的是开源的,没去除水印),换了icepdf之后,一切问题都引刃而解了,再也无中文乱码问题啦,icepdf对中文支持非常强大,并且能够轻松生成缩略图和大图。

下面是核心代码:

public static void main(String[] args) { new ICEPdf().converPdfToImg("D:\\2.pdf", "D:\\myxiao\\image_", "jpg",1.0f); } /** * 转换指定pdf文件为图片到指定的文件夹目录下 * @param pdfFilePath需要转换的pdf文件路径 * @param imgPushPath需要存放转换后的图片文件目录路径 * @param toFormat需要转换的图片格式(如:jpg/png等) * @param imgScaling图片缩放的比例 * @return 转换后图片的文件名集合 */ public List converPdfToImg(String pdfFilePath,String imgPushPath,String toFormat,float imgScaling){ //定义Document,用于转换图片         Document document = new Document();         List filePathList = new ArrayList();         try {             document.setFile(pdfFilePath);         } catch (Exception ex) {         ex.printStackTrace();         }         // save page caputres to file.         float rotation = 0f;         // 循环把每页的数据转换成对应的图片         for (int i = 0; i < document.getNumberOfPages(); i++) {             BufferedImage image = (BufferedImage)             document.getPageImage(i,GraphicsRenderingHints.SCREEN,Page.BOUNDARY_CROPBOX, rotation, imgScaling);             RenderedImage rendImage = image;             try {                 System.out.println("/t capturing page " + i);                 File file = new File(imgPushPath + i + "." + toFormat);                 ImageIO.write(rendImage, toFormat , file);                 filePathList.add(i + "." + toFormat);             } catch (IOException e) {                 e.printStackTrace();             }             image.flush();         }         // 清理document资源         document.dispose();                  return filePathList; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值