1、apache PDFBox
public final class PDFBoxUtil {
/** JPG文件后缀 */
private static final String PICTRUE_STUFFIX_JPG = ".jpg";
/** PDF文件后缀 */
private static final String FILE_STUFFIX_PDF = ".pdf";
/** TXT文件后缀 */
private static final String FILE_STUFFIX_TXT = ".txt";
/** PNG文件格式 */
private static final String PICTRUE_FORMAT_PNG = "png";
/**
* 将PDF文件按页转换成JPG文件
*
* @Title: splitPdf2Jpg
* @Description: 将PDF文件按页转换成JPG文件
* @param pdfFilePath PDF文件全路径
* @param jpgFilePath JPG文件保存目录
* @param dpi PDF转JPG时放大倍数,与图片清晰度成正比,默认值:296
* @return JPG文件全路径集合
* @throws IOException
*/
public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, float dpi) throws IOException {
List<String> list = new ArrayList<>();
// 创建目录JPG文件保存目录
File jpgDir = new File(jpgFilePath);
if (!jpgDir.exists()) {
jpgDir.mkdir();
}
// 读取PDF文件
File file = new File(pdfFilePath);
PDDocument document = PDDocument.load(file);
// 逐页转换
int pages = document.getNumberOfPages();
PDFRenderer renderer = new PDFRenderer(document);
int index = file.getName().lastIndexOf(".");
String fileName = file.getName().substring(0, index);
if (0 >= dpi) {
dpi = 296;
}
for (int i = 0; i < pages; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
if (pages > 1) {
imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
}
ImageIO.write(image, PICTRUE_FORMAT_PNG, new File(imgFileName));
list.add(imgFileName);
}
return list;
}
}
2、SUN PDFRenderer
public final class PDFRendererUtil {
/** JPG文件后缀 */
private static final String PICTRUE_STUFFIX_JPG = ".jpg";
/** PNG文件格式 */
private static final String PICTRUE_FORMAT_PNG = "png";
/**
* 将PDF文件按页转换成JPG文件
*
* @Title: splitPdf2Jpg
* @Description: 将PDF文件按页转换成JPG文件
* @param pdfFilePath PDF文件全路径
* @param jpgFilePath JPG文件保存目录
* @param enlargeMultiple EnlargeMultipleEnum:PDF转JPG时放大倍数,与图片清晰度成正比,默认4倍放大
* @return JPG文件全路径集合
* @throws IOException
*/
public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, EnlargeMultipleEnum enlargeMultiple)
throws IOException {
List<String> list = new ArrayList<>();
// 创建目录JPG文件保存目录
File jpgDir = new File(jpgFilePath);
if (!jpgDir.exists()) {
jpgDir.mkdir();
}
// 读取PDF文件
File file = new File(pdfFilePath);
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel();
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
PDFFile pdffile = new PDFFile(buf);
// 逐页转换
int pages = pdffile.getNumPages();
int index = file.getName().lastIndexOf(".");
String fileName = file.getName().substring(0, index);
if (null == enlargeMultiple) {
enlargeMultiple = EnlargeMultipleEnum.MULTIPLE_4;
}
for (int i = 1; i <= pages; i++) {
PDFPage page = pdffile.getPage(i);
Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight());
Image img = page.getImage(rect.width * enlargeMultiple.getMultiple(),
rect.height * enlargeMultiple.getMultiple(), rect, null, true, true);
BufferedImage tag = new BufferedImage(rect.width * enlargeMultiple.getMultiple(),
rect.height * enlargeMultiple.getMultiple(), BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(img, 0, 0, rect.width * enlargeMultiple.getMultiple(),
rect.height * enlargeMultiple.getMultiple(), null);
String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
if (pages > 1) {
imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
}
FileOutputStream out = new FileOutputStream(imgFileName);
ImageIO.write(tag, PICTRUE_FORMAT_PNG, new File(imgFileName));
out.close();
list.add(imgFileName);
}
channel.close();
raf.close();
return list;
}
}
3、ICEPdf (收费)
public final class IcePDFUtil {
/** JPG文件后缀 */
private static final String PICTRUE_STUFFIX_JPG = ".jpg";
/** PNG文件格式 */
private static final String PICTRUE_FORMAT_PNG = "png";
/**
* 将PDF文件按页转换成JPG文件
*
* @Title: splitPdf2Jpg
* @Description: 将PDF文件按页转换成JPG文件
* @param pdfFilePath PDF文件全路径
* @param jpgFilePath JPG文件保存目录
* @param scale PDF转JPG时缩放比例,与图片清晰度成正比,默认值:4
* @return JPG文件全路径集合
* @throws IOException
*/
public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, float scale) throws IOException {
List<String> list = new ArrayList<>();
// 创建目录JPG文件保存目录
File jpgDir = new File(jpgFilePath);
if (!jpgDir.exists()) {
jpgDir.mkdir();
}
// 读取PDF文件
Document document = new Document();
document.setFile(pdfFilePath);
// 逐页转换
int pages = document.getNumberOfPages();
int indexBegin = pdfFilePath.lastIndexOf(File.separator);
int indexEnd = pdfFilePath.lastIndexOf(".");
String fileName = pdfFilePath.substring(indexBegin, indexEnd);
if (0 >= scale) {
scale = 4;
}
for (int i = 0; i < pages; i++) {
BufferedImage img = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,
Page.BOUNDARY_CROPBOX, 0, scale);
String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
if (pages > 1) {
imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
}
ImageIO.write(img, PICTRUE_FORMAT_PNG, new File(imgFileName));
list.add(imgFileName);
img.flush();
}
document.dispose();
return list;
}
}