java實現pdf轉圖片pdf
阿新 • • 發佈:2019-01-01
為了實現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)中,各位大神可有良策?