1. 程式人生 > >java實現pdf轉圖片pdf

java實現pdf轉圖片pdf

為了實現pdf報表不可篡改,將pdf報表轉換為內容全為圖片的pdf報表。

實現思路:

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)中,各位大神可有良策?