上次写过一篇 java通过openOffice实现word,excel,ppt转成pdf实现在线预览,现在有个需求是把pdf文件分隔成多张图片在网页上分页显示,就像ppt的效果。(不理解需求什么想法,明明pdf可以网页直接打开的...)
所以,思路就是在之前的基础上把上传的文件先转换成pdf,再把pdf转换成多页png图片就可以了。
maven引入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.18</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
建一个工具类
package cn.ways.util;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.UUID;
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
public class ToolUtil {
/**
* 将多页pdf转化为多张图片
* @param pdfPath
* @return
* @throws IOException
*/
public static List<String> pdfPathToImagePaths(String pdfPath){
File pdfFile = new File(pdfPath);
PDDocument pdDocument;
try {
pdDocument = PDDocument.load(pdfFile);
int pageCount = pdDocument.getNumberOfPages();
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
List<String> imagePathList = new ArrayList<>();
String fileParent = pdfFile.getParent();
for(int pageIndex = 0; pageIndex < pageCount; pageIndex++) {
String imgPath = fileParent + File.separator + UUID.randomUUID().toString() + ".png";
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105,ImageType.RGB);
ImageIO.write(image, "png", new File(imgPath));
imagePathList.add(imgPath);
}
pdDocument.close();
return imagePathList;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
List<String> list = pdfPathToImagePaths("D://pdf/test.pdf");
for (int i = 0; i < list.size(); i++) {
System.out.println("path==" + list.get(i));
}
}
}
上面的pdfPathToImagePaths方法就可以把pdf转换成多张图片,图片名称是UUID唯一标识随意生成的,也可以改成自己需要的特定名称,然后把得到的文件地址的集合分条插入到数据就好了。
网友评论