PDF 转 BufferedImage
将 PDF 转换为 BufferedImage 的简单示例
JPedal 可轻松地将单个 PDF 文件或包含多个 PDF 文件的目录中的页面转换为 Java 的 BufferedImage
对象。这要用到 JPedal 的 ConvertPagesToImages 类。
示例代码 - 使用文件路径将 PDF 文件转换为图像
ConvertPagesToImages convert = new ConvertPagesToImages("inputFile.pdf");
//convert.setPassword("password"); //如果需要密码
try {
if (convert.openPDFFile()) {
int pageCount = convert.getPageCount();
for (int page = 1; page <= pageCount; page++) {
BufferedImage image = convert.getPageAsImage(page);
}
}
} catch (Exception e) {
e.printStackTrace();
}
convert.closePDFfile();
示例代码 - 在内存中转换 PDF 文件
// 禁用所有文件缓存以减少内存使用
PdfFileReader.alwaysCacheInMemory = -1;
// bytes 是一个包含 PDF 文件数据的 byte[] 数组
ConvertPagesToImages convert = new ConvertPagesToImages(bytes);
// convert.setPassword("password"); //如果需要密码
try {
if (convert.openPDFFile()) {
int pageCount = convert.getPageCount();
for (int page = 1; page <= pageCount; page++) {
BufferedImage image = convert.getPageAsImage(page);
}
}
} catch (PdfException e) {
e.printStackTrace();
}
convert.closePDFfile();
将 PDF 转换为 BufferedImage 的可定制示例
此示例支持图像放大处理,或者说 ConvertPagesToHiResImages 类提供了许多额外的选项
示例代码
ConvertPagesToHiResImages convert = new ConvertPagesToHiResImages("inputFile.pdf");
//convert.setPassword("password");
boolean isBackgroundTransparent = false;
HashMap<Integer, Object> options = new HashMap<>();
//options.put(JPedalSettings.EXTRACT_AT_BEST_QUALITY_MAXSCALING, 10); // 不要将图像缩放超过指定的倍数
//options.put(JPedalSettings.EXTRACT_AT_PAGE_SIZE, new String[]{Integer.toString(2000), Integer.toString(3000)});// 按指定尺寸提取页面(保持纵横比,尽可能做到最佳适配)
//options.put(JPedalSettings.ALLOW_PAGES_SMALLER_THAN_PAGE_SIZE, Boolean.TRUE); // 允许提取的页面小于原始页面大小
// 完整的设置列表可以在此处找到:https://javadoc.idrsolutions.com/org/jpedal/constants/JPedalSettings.html
try {
if (convert.openPDFFile()) {
int pageCount = convert.getPageCount();
for (int page = 1; page <= pageCount; page++) {
BufferedImage image = convert.getPageAsHiResImage(page, isBackgroundTransparent, options);
}
}
} catch (Exception e) {
e.printStackTrace();
}
convert.closePDFfile();