需求:一个pdf想要转换成图片,但是第三方的收费,于是用java转一下吧
1.依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
2.本地pdf转图片
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import sun.net.www.content.image.png;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class PdfToImageUtil {
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString().replace("-", "");
List<File> png = toImageByFile(new File("E:/文件.pdf"), "png", "E:/", uuid,"");
}
/**
*
* @param pdfFile pdf文件
* @param imageType 转换的图片类型
* @param filePath 生成的图片基础路径
* @param uuid 生成的图片名称
* @param password pdf加密的密码,没有就空
* @return
*/
public static List<File> toImageByFile(File pdfFile, String imageType, String filePath, String uuid,String password) {
List<File> fileList = new ArrayList<>();
try {
PDDocument doc = PDDocument.load(pdfFile,password);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, 144);
File file = new File(filePath + uuid + "_" + i + "." + imageType);
ImageIO.write(image, imageType, file);
fileList.add(file);
}
IOUtils.closeQuietly(doc);
} catch (IOException e) {
e.printStackTrace();
}
return fileList;
}
}
3.网络pdf地址转图片
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import sun.net.www.content.image.png;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class PdfToImageUtil {
public static void main(String[] args) {
String url = "http:xxx.com/xxx.pdf";
String uuid = UUID.randomUUID().toString().replace("-", "");
List<File> png = toImage(url, "png", "E:/", uuid);
System.out.println(png.size());
}
public static List<File> toImage(String pdfUrl, String imageType, String filePath, String uuid) {
List<File> fileList = new ArrayList<>();
try {
URL url = new URL(pdfUrl);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
PDDocument doc = PDDocument.load(inputStream);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, 144);
File file = new File(filePath + uuid + "_" + i + "." + imageType);
ImageIO.write(image, imageType, file);
fileList.add(file);
}
IOUtils.closeQuietly(doc);
IOUtils.closeQuietly(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return fileList;
}
}