我们在移动端访问pdf时,移动端一般不支持在线预览,这时候我们可以将pdf转为图片来实现,废话不多说,上代码。
1、引入iText的jar包依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
2、pdf转图片工具类实现
import lombok.extern.slf4j.Slf4j;
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.io.IOException;
import java.net.URL;
/**
* pdf转jpg
* @author 杨红杰
* @date 2020-4-24 15:20
*/
@Slf4j
public class Pdf2JpgUtil {
/**
* 获取pdf总页数
* @param pdfPath pdf路径,可以是网站路径
* @param isHttp 当pdf路径为网站路径时,该值必须为true
* @return
*/
public static int pageNums(String pdfPath, boolean ... isHttp) {
int pageNums = 0;
PDDocument pdDocument = null;
try {
pdDocument = getPDDocument(pdfPath, isHttp);
pageNums = pdDocument.getNumberOfPages();
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if (pdDocument != null) {
try {
pdDocument.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
return pageNums;
}
/**
* pdf转jpg
* @param pdfPath pdf路径,可以是网站路径
* @param imgPath 生成的jpg路径
* @param isHttp 当pdf路径为网站路径时,该值必须为true
*/
public static void pdf2jpg(String pdfPath,String imgPath, boolean ... isHttp) {
PDDocument pdDocument = null;
try {
pdDocument = getPDDocument(pdfPath, isHttp);
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
for (int i = 0; i < pdDocument.getNumberOfPages(); i++) {
BufferedImage image = pdfRenderer.renderImageWithDPI(i, 105, ImageType.RGB);
ImageIO.write(image, "png", new File(imgPath + "/" + (i + 1) + ".png"));
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if (pdDocument != null) {
try {
pdDocument.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
}
/**
* 获取PDDocument
* @param pdfPath pdf路径,可以是网站路径
* @param isHttp 当pdf路径为网站路径时,该值必须为true
* @return
* @throws IOException
*/
private static PDDocument getPDDocument(String pdfPath, boolean[] isHttp) throws IOException {
if (isHttp.length > 0 && isHttp[0]) {
URL url = new URL(pdfPath);
return PDDocument.load(url.openStream());
} else {
File file = new File(pdfPath);
return PDDocument.load(file);
}
}
}