pdf转图片org.apache.pdfbox 蔚落 2022-11-06 14:58 188阅读 0赞 ### pdfbox --> Save as Images ### * * 1. 使用到的资源: * 2.简述: * 3.PDFBox的功能: * 4.Save as Image * * 代码: * 效果: ## 1. 使用到的资源: ## org.apache.pdfbox 文档地址:[官方文档][Link 1] ## 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<File> 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; } } ### 效果: ### 源文件: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQyMzM4OTYy_size_16_color_FFFFFF_t_70] 转化结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQyMzM4OTYy_size_16_color_FFFFFF_t_70 1] [Link 1]: https://pdfbox.apache.org/ [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQyMzM4OTYy_size_16_color_FFFFFF_t_70]: /images/20221023/51250decfe674a1eb1ae2804d3080fa1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQyMzM4OTYy_size_16_color_FFFFFF_t_70 1]: /images/20221023/90a3cb40aeb64f0ba2852c62807c59d2.png
还没有评论,来说两句吧...