pdfrenderer將pdf檔案轉化為圖片
阿新 • • 發佈:2019-02-14
String path = fileName + ".pdf"; title = URLEncoder.encode(title, "UTF-8"); FtpUtils.getInstance("def").getFile(path, bos); os = response.getOutputStream(); InputStream is = new ByteArrayInputStream(bos.toByteArray()); response.reset(); // 清除下載檔案的空白行 response.resetBuffer(); response.setContentType(contentType); response.setHeader("Content-Disposition", showMode + "; filename=" + title); convertPdf2Image(is, os);//將圖片顯示在頁面
//傳入一個輸入流,把pdf轉化為圖片之後流轉到輸出流中 public void convertPdf2Image(InputStream is, OutputStream os) throws IOException { int pagen = 1; PDFFile pdffile = null; byte[] byt = this.toByteArray(is); try { ByteBuffer buf = ByteBuffer.allocate(byt.length);//若長度不夠會報outinex錯誤 buf.put(byt); pdffile = new PDFFile(buf); } catch (Exception e) { e.printStackTrace(); } if (pagen < pdffile.getNumPages()) return; //設定將第pagen也生成png圖片 PDFPage page = pdffile.getPage(pagen); int width = (int) page.getBBox().getWidth(); int height = (int) page.getBBox().getHeight(); BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = img.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); PDFRenderer renderer = new PDFRenderer(page, g2, new Rectangle(0, 0, width, height), null, Color.white);//這個color為渲染出來的圖片的背景顏色 try { page.waitForFinish(); } catch (Exception e) { e.printStackTrace(); } renderer.run(); g2.dispose(); try { ImageIO.write(img, "png", os); } catch (Exception ex) { ex.printStackTrace(); } }
//將一個輸入流轉化為位元組陣列
public static byte[] toByteArray(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 20]; int n = 0; while ((n = in.read(buffer)) != -1) { out.write(buffer, 0, n); } return out.toByteArray(); }