java实现pdf转图片pdf

为了实现pdf报表不可篡改,将pdf报表转换为内容全为图片的pdf报表。

实现思路:

1.将原pdf每页转换为图片数据(使用pdfbox.jar和fontbox.jar);
参考链接:http://blog.csdn.net/chenjhit/article/details/54344353

2.将图片数据转换为byte[]格式图片数据;
参考链接:http://www.cnblogs.com/haoqijifeng/p/5567976.html

3.将byte[]图片数据加入到输出pdf中(使用itext.jar)。

实现方法:

public static void pdfToImageToPdf(){
    File file = new File("e:/in.pdf");
    Document docOut = new Document();
    docOut.setMargins(0, 0, 0, 0);
    try {
        FileOutputStream os = new FileOutputStream("e:/out.pdf");
        PdfWriter.getInstance(docOut, os);
        docOut.open();
        PDDocument doc = PDDocument.load(file);
        PDFRenderer renderer = new PDFRenderer(doc);
        int pageCount = doc.getNumberOfPages();
        for(int i=0; i<pageCount; i++){
            long t1 = System.currentTimeMillis();
            ByteArrayOutputStream bb = new ByteArrayOutputStream();
            BufferedImage image = renderer.renderImage(i, 1.25f);   //第二个参数越大生成图片分辨率越高。
            long t2 = System.currentTimeMillis();
            ImageIO.write(image, "jpg",bb );
            long t3 = System.currentTimeMillis();
            Image jpg = Image.getInstance(bb.toByteArray());
            long t4 = System.currentTimeMillis();
            jpg.scalePercent(80.0f);       //此处百分比与前面的分辨率参数相乘结果为1,则可保证等比输出。
            jpg.setAlignment(Image.ALIGN_CENTER);
            docOut.add(jpg);
            long t5 = System.currentTimeMillis();
            System.out.println((t2 - t1) + "***" + (t3 - t2) + "***" + (t4 - t3) + "***" + (t5 - t4));
        }
        docOut.close();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    }catch (DocumentException e){
        e.printStackTrace();
    }catch (IOException e){
        e.printStackTrace();
    }
}

存在问题:

转换效率比较低(200页转换时间约为60秒),时间主要花费在renderer.renderImage(i, 1.5f)和ImageIO.write(image,”jpg”,bb)中,各位大神可有良策?

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值