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