当前位置: 代码迷 >> 综合 >> pdf转图片
  详细解决方案

pdf转图片

热度:57   发布时间:2024-02-01 13:10:33.0

引入以下依赖(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)+"毫秒");
//    }
}

 

  相关解决方案