引入以下依赖(gradle) :
compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.20'
compile group: 'org.apache.pdfbox', name: 'fontbox', version: '2.0.20'
代码如下:
public class PdfToImage {private static final String defaultImgType = "png"; private static final float defaultDpi = 144;private static final int defaultPageIndex = 0;private static Logger log = LoggerFactory.getLogger(PdfToImage.class);/*** * <p><b>Description:</b> </p> * @param is pdf文件输入流* @param type 图片类型,默认为png* @param pageIndex 页码,默认为0* @return 图片io流*/public static InputStream convert(InputStream is, String type, int pageIndex) {return convert(is,type,pageIndex,defaultDpi);}/*** * <p><b>Description:</b> </p> * @param is pdf文件输入流* @param type 图片类型,默认为png* @param pageIndex 页码,默认为0* @param dpi 清晰度,默认为144* @return*/public static InputStream convert(InputStream is, String type, int pageIndex, float dpi) {if(type == null || "".equals(type.trim())) {type = defaultImgType;}if(pageIndex < 0) {pageIndex = defaultPageIndex;}PDDocument doc;try {doc = PDDocument.load(is);PDFRenderer renderer = new PDFRenderer(doc);BufferedImage image = renderer.renderImageWithDPI(pageIndex, dpi);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(image, type, os);InputStream input = new ByteArrayInputStream(os.toByteArray());return input;} catch (IOException e) {e.printStackTrace();log.info("pdf转图片出错,出错原因{}",e.getMessage());}return null;}/*** 转换全部的pdf* @param fileAddress 文件地址(文件所在目录)* @param filename PDF文件名* @param type 图片类型*//*public static void toImg( String fileAddress,String filename,String type) {if(type == null || "".equals(type.trim())) {type = defaultImgType;}// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, type, new File(fileAddress+"\\"+filename+"_"+(i+1)+"."+type));}} catch (IOException e) {e.printStackTrace();}}*//***自由确定起始页和终止页* @param fileAddress 文件地址(文件所在目录)* @param filename pdf文件名* @param indexOfStart 开始页 开始转换的页码,从0开始* @param indexOfEnd 结束页 停止转换的页码,-1为全部* @param type 图片类型*//*public static void toImg(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type) {if(type == null || "".equals(type.trim())) {type = defaultImgType;}// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = indexOfStart; i < indexOfEnd; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, type, new File(fileAddress+"\\"+filename+"_"+(i+1)+"."+type));}} catch (IOException e) {e.printStackTrace();}}*/// public static void main(String[] args) {
// long start = System.currentTimeMillis();
// toImg("C:\\Users\\FY\\Desktop\\文档","登封市人民医院信息标准规范(交互规范)_v1.0",0,5,null);
// long end = System.currentTimeMillis();
// System.out.println("转换耗时:"+(end-start)+"毫秒");
// }
}