pdf转图片org.apache.pdfbox
pdfbox —> Save as Images
- 使用到的资源:
- 2.简述:
- 3.PDFBox的功能:
- 4.Save as Image
- 代码:
- 效果:
1. 使用到的资源:
org.apache.pdfbox
文档地址:官方文档
2.简述:
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 使用此库,您可以开发用于创建,转换和操作PDF文档的Java程序。
除此之外,PDFBox还包括一个命令行实用程序,用于使用可用的Jar文件对PDF执行各种操作。
3.PDFBox的功能:
Extract Text
- 使用PDFBox,您可以从PDF文件中提取Unicode文本。
Split & Merge
- 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。
Fill Forms
- 使用PDFBox,您可以在文档中填写表单数据。
Print
- 使用PDFBox,您可以使用标准Java打印API打印PDF文件。
Save as Image
- 使用PDFBox,您可以将PDF保存为图像文件,如PNG或JPEG。
Create PDFs
- 使用PDFBox,您可以通过创建Java程序创建新的PDF文件,还可以包含图像和字体。
Signing
- 使用PDFBox,您可以将数字签名添加到PDF文件。
4.Save as Image
我主要想做Save as Image,贴代码,可以拿来即用的那种:
代码:
介绍一下我的方法:
- 参数:需要解析为图片的pdf文件
响应:根据pdf页数分割,每页一张图的图片列表
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;/* ClassName: PdfBoxUtils Description: author: yellow_star 2021-3-8 */
public class PdfBoxUtils {// 经过测试,dpi为96,100,105,120,150,200中,105显示效果较为清晰,体积稳定,dpi越高图片体积越大,一般电脑显示分辨率为96
public static final float DEFAULT_DPI = 105;
// 默认转换的图片格式为jpg
public static final String DEFAULT_FORMAT = “jpg”;public static List
pdfToImage(File file) { List<File> imgList = new ArrayList<File>();
try {
String name = file.getName();
// 图像合并使用参数
// 总宽度
int width = 0;
// 保存一张图片中的RGB数据
int[] singleImgRGB;
int shiftHeight = 0;
// 保存每张图片的像素值
BufferedImage imageResult = null;
// 利用PdfBox生成图像
PDDocument pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
// 循环每个页码
for (int i = 0; i < pdDocument.getNumberOfPages(); i++) {
BufferedImage image = renderer.renderImageWithDPI(i, DEFAULT_DPI, ImageType.RGB);
int imageHeight = image.getHeight();
int imageWidth = image.getWidth();
//计算高度和偏移量
//使用第一张图片宽度;
width = imageWidth;
//保存每页图片的像素值
imageResult = new BufferedImage(width, imageHeight, BufferedImage.TYPE_INT_RGB);
//这里有高度,可以将imageHeight*len,我这里值提取一页所以不需要
singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width);
// 写入流中
imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width);
String imgUrl = “这里写一个你要准备生成图片到的位置”;
File imgFile = new File(imgUrl);
imgList.add(imgFile);
// 写图片
ImageIO.write(imageResult, DEFAULT_FORMAT, imgFile);
}
pdDocument.close();
} catch (Exception e) {
e.printStackTrace();
}
return imgList;
}
}
效果:
源文件:
转化结果:
还没有评论,来说两句吧...