依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.13</version>
</dependency>
工具类
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class PdfToImgUtils {
private static Logger log = LoggerFactory.getLogger(PdfToImgUtils.class);
public static final float DEFAULT_DPI = 105;
public static void main(String[] args) {
long start = System.currentTimeMillis();
}
public static String getBase64(String pdfURL) {
System.setProperty("sun.java2d.cmm", "sun.java2d.cmm.kcms.KcmsServiceProvider");
int width = 0;
int[] singleImgRGB;
int shiftHeight = 0;
BufferedImage imageResult = null;
InputStream pdfInputStream = null;
ByteArrayOutputStream pdfoutStream = null;
ByteArrayOutputStream bos = null;
PDDocument pdDocument = null;
byte[] buffer = null;
try {
URL url = new URL(pdfURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10 * 1000);
conn.setReadTimeout(10 * 1000);
pdfInputStream = conn.getInputStream();
pdfoutStream = new ByteArrayOutputStream();
buffer = new byte[4926];
int lenn = -1;
while ((lenn = pdfInputStream.read(buffer)) != -1) {
pdfoutStream.write(buffer, 0, lenn);
}
buffer = pdfoutStream.toByteArray();
pdDocument = PDDocument.load(buffer);
PDFRenderer renderer = new PDFRenderer(pdDocument);
int pageCount = pdDocument.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, DEFAULT_DPI, ImageType.RGB);
int imageHeight = image.getHeight();
int imageWidth = image.getWidth();
if (i == 0) {
width = imageWidth;
imageResult = new BufferedImage(width, imageHeight * pageCount, BufferedImage.TYPE_INT_RGB);
} else {
shiftHeight += imageHeight;
}
singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width);
imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width);
}
bos = new ByteArrayOutputStream();
ImageIO.write(imageResult, "jpg", bos);
byte[] bytes = bos.toByteArray();
if (null == bytes) {
throw new Exception("获取图片为空!");
}
String base = new BASE64Encoder().encode(bytes).trim().replaceAll("\n", "").replaceAll("\r", "");
pdDocument.close();
return base;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != pdfInputStream) {
pdfInputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != pdfoutStream) {
pdfoutStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != bos) {
bos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (null != pdDocument) {
pdDocument.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}