项目中pdf文件太大,在手机端打开缓慢。需要将pdf文件转换成图片。加载比较快,增加用户体验。话不多说,直接上干货。
一、在pom引入依赖的jar
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.19</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.19</version></dependency>
二、上代码
package com.wlsj.product.test;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;import javax.imageio.ImageIO;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;/*** <h3>product-jzfp</h3>* <p></p>** @author : 你的名字* @date : 2020-05-11 14:36**/
public class PDFTest {//可自由确定起始页和终止页public static void pdf2png(String fileAddress, String filename, int indexOfStart, int indexOfEnd) {// 将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, "PNG", new File(fileAddress + "\\" + filename + "_" + (i + 1) + ".png"));}} catch (IOException e) {e.printStackTrace();}}//转换全部的pdfpublic static void pdf2png(String fileAddress, String filename) {// 将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, "PNG", new File(fileAddress + "\\" + filename + "_" + (i + 1) + ".png"));}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入需要转换的pdf的地址,例如:D:\\robert");String fileAddress = sc.nextLine();System.out.println("请输入需要转换的pdf的名称,不要加.pdf后缀,例如 操作系统概念:");String filename = sc.nextLine();System.out.println("请输入开始转换的页码,从0开始,例如 5:");int indexOfStart = sc.nextInt();System.out.println("请输入停止转换的页码,-1为全部,例如 10:");int indexOfEnd = sc.nextInt();if (indexOfEnd == -1) {pdf2png(fileAddress, filename);} else {pdf2png(fileAddress, filename, indexOfStart, indexOfEnd);}}}
三、测试输出