采用ICEpdf针对pdf转图片
目前,项目中有个需求,针对票据中pdf文字进行转换图片,进行前端展示。百度、谷歌一大堆ICEpdf 版本,几乎都是乱码,文字不识别而告终。在此笔记。当时脑子转不过弯,老是觉得最新版本ICEpdf 6.2.1 ,ICEpdf 6.2.2 ,ICEpdf 5.1.3,ICEpdf 6.1.2 ,花了好多的豆豆,后来心想做出来才是主要的,不然时间消耗,项目耽搁。后来使用的是 ICEpdf-6.1.1
比较靠谱。告诉自己:做出来最好的效果就好。
后期拓展思考:根据此效果,针对pdf转图片,图片进行OCR文字处理,可以对票据识别是一个方向,可以好好开拓,开发票据识别功能。
需求如下:
- pdf图片情况如下
增值税普通发票: 这个是中文最多的,且转换图片要求文件不能变成“口”,未识别的效果
已打印发票: 中间有个“已打印”图片字眼,然后网上各种转图片的居然都不支持了,还要ICEpdf支持
代码展示:
package com.bos4cloud.common.icepdf;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import lombok.extern.slf4j.Slf4j;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
/**
* @author: Luckly
* @Description: pdf 转单张高清图片
* @Date 2019-05-27
* @Modified By:
*/
@Slf4j
public class IcePdf {
/**
*
* @param pdfPath D://upFiles//bill//PT-011001900321-18675195.pdf
* @param pngPath D://upFiles//bill//
* @param imgName PT-011001900321-18675195
*/
public static void pdf2Pic(String pdfPath, String pngPath,String imgName) {
log.info("IcePdf pdfPath : {}, pngPath : {} , imgName : {} ", pdfPath,pngPath,imgName);
Document document = new Document();
document.setFile(pdfPath);
//缩放比例
float scale = 2.5f;
//旋转角度
float rotation = 0f;
//for循环在pdf文件资料中使用,目前税票就固定一张,所有就注释了
//for (int i = 0; i < document.getNumberOfPages(); i++) {
BufferedImage image = (BufferedImage)
document.getPageImage(0, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try {
imgName = imgName + ".png";
File file = new File(pngPath + File.separator + imgName);
ImageIO.write(rendImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
//}
document.dispose();
log.info("======================pdf2Pic 完成============================");
}
public static void main(String[] args) {
String filePath = "D:\\upFiles\\bill\\PT-011001900321-18675195.pdf";
pdf2Pic(filePath, "D:\\upFiles\\bill", "PT-011001900321-18675195");
String filePath2 = "D:\\upFiles\\bill\\YDY-011001900332-18675195.pdf";
pdf2Pic(filePath2, "D:\\upFiles\\bill", "YDY-011001900332-18675195");
}
}