目前幾個PDF轉圖片的JAVA開源項目研究
項目中要使用PDF的縮略圖,使用java幾個開源項目來對pdf轉換為圖片的工作。
參照了文章:http://javasogo.iteye.com/blog/1169234
對比這幾款開源項目PDFRenderer、pdfbox、jpedal 的做法:
1.PDFRenderer: 確實效率最高,但是缺少字體支持對大多數中文pdf處理不了(很奇怪為什么項目組還沒做默認字體支持)
2.pdfbox:字體基本都可以轉換,但容易內存溢出(我搞了幾十M文件就不行了)
3.jpedal:效率不錯。不過我這里好幾個中文pdf文件就是生成縮略圖不對,我還向項目組提bug了
沒有辦法,在目前我遇到字體解決不了情況,我尋找到了ICEPDF,這個項目也有商業和開源的。我用了開源的ICEPDF-4.2.2 (最新有4.3了),它其實用了jpedal的字體支持庫,確能支持我手上的中文pdf,而且效率不錯(測試沒遇到內存溢出)。使用比較方便,這里把代碼 貼在這里:
public static final String FILETYPE_JPG = "jpg"; public static final String SUFF_IMAGE = "." + FILETYPE_JPG; /** * 將指定pdf文件的首頁轉換為指定路徑的縮略圖 *@param filepath 原文件路徑,例如d:/test.pdf *@param imagepath 圖片生成路徑,例如 d:/test-1.jpg *@param zoom 縮略圖顯示倍數,1表示不縮放,0.3則縮小到30% */ public static void tranfer(String filepath, String imagepath, float zoom) throws PDFException, PDFSecurityException, IOException { // ICEpdf document class Document document = null; float rotation = 0f; document = new Document(); document.setFile(filepath); // maxPages = document.getPageTree().getNumberOfPages(); BufferedImage img = (BufferedImage) document.getPageImage(0, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, zoom); Iterator iter = ImageIO.getImageWritersBySuffix(FILETYPE_JPG); ImageWriter writer = (ImageWriter) iter.next(); File outFile = new File(imagepath); FileOutputStream out = new FileOutputStream(outFile); ImageOutputStream outImage = ImageIO.createImageOutputStream(out); writer.setOutput(outImage); writer.write(new IIOImage(img, null, null)); }
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!