PDF转图片
需求:电子保单系统返回pdf下载文件的url。访问url,将返回的pdf文件流转换成图片保存在本地
需要引入jar包 :pdfbox-2.0.0.jar, fontbox-2.0.0.jar
package test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.imageio.ImageIO;
import org.apache.commons.lang.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import bjca.org.apache.log4j.Logger;
/**
* pdf文件转换成png图片
* @author lijc
*
*/
public class Pdf2Pic {
Logger log = Logger.getLogger(getClass());
/**
* 获取url返回的pdf,转换成图片保存到本地
*
* @param url
* @param plyseq
* @return
*/
private void pdfToPng(String urlStr, String plyseq) {
// File file = new File("D:\\test.pdf");
// 暂时测试使用的url 后改成库中取得
// String urlStr =
// "http://58.251.33.182:18080/elec/netSaleQueryElecPlyServlet?c_ply_no=1M1084920171004735&idCard=411722197202132411";
PDDocument pdDocument = null;
if (StringUtils.isNotEmpty(urlStr)) {
try {
// 获取电子保单url文件输入流
InputStream input = getPdfInputStream(urlStr);
// 加载pdf文件
pdDocument = PDDocument.load(input);
PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
int pageCount = pdDocument.getNumberOfPages();
String pdfImgPath = "webapps" + File.separator + "pdfImg" + File.separator + plyseq + ".png";
for (int i = 0; i < pageCount; i++) {
BufferedImage image = pdfRenderer.renderImageWithDPI(i, 296);
ImageIO.write(image, "PNG", new File(pdfImgPath));
}
input.close();
log.info("流水号:" + plyseq + " pdf文件转换png图片成功!");
} catch (IOException ex) {
ex.printStackTrace();
log.error("pdf文件转换png图片失败!");
} finally {
if (pdDocument != null) {
try {
pdDocument.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
} else {
log.error("流水号:" + plyseq + "电子保单url地址为空!");
}
}
/**
* 获取pdf文件 inputstream流 by 电子保单url
*
* @param url
* @return
*/
private static InputStream getPdfInputStream(String urlStr) {
URL url = null;
try {
url = new URL(urlStr);
HttpURLConnection httpConnect = (HttpURLConnection) url.openConnection();
// 设置连接超时时间
httpConnect.setConnectTimeout(30000);
// 设置读取数据超时时间
httpConnect.setReadTimeout(60000);
httpConnect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConnect.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
return httpConnect.getInputStream();
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String plyseq = "123456";
String urlStr = "http://localhost:18080/elec/netSaleQueryElecPlyServlet?c_ply_no=1M1084920171004735&idCard=411722197202132411";
new Pdf2Pic().pdfToPng(urlStr, plyseq);
}
}