JAVA工具类——将pdf文件转长jpg图片——tika-app.jar
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import nc.bs.logging.Logger;
import org.apache.commons.io.FilenameUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
//工具文件:tika-app-1.1.jar
@SuppressWarnings("unchecked")
public class PdfToJpgByTika {
public static boolean doChange(File pdfFile) throws Exception {
//当前目录,只改扩展名
String jpgfilename = FilenameUtils.removeExtension(pdfFile
.getAbsolutePath()) + ".jpg";
return doChange(pdfFile, jpgfilename);
}
public static boolean doChange(File pdfFile, String jpgfilename)
throws Exception {
PDDocument document = null;
FileOutputStream output = null;
try {
if (jpgfilename == null)
jpgfilename = FilenameUtils.removeExtension(pdfFile
.getAbsolutePath()) + ".jpg";
File jpgfile = new File(jpgfilename);
// 创建上级目录
if (!jpgfile.getParentFile().exists())
jpgfile.getParentFile().mkdirs();
// 删除以前的文件
if (jpgfile.isFile() && jpgfile.exists())
jpgfile.delete();
// 打开pdf文件,获取所有页面
document = PDDocument.load(pdfFile);
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
// 统计各页宽度和高度
List<BufferedImage> listimgage = new ArrayList<BufferedImage>();
int width = 0;
int height = 0;
for (int i = 0; i < pages.size(); i++) {
PDPage page = pages.get(i);
// 清晰度调整
BufferedImage image = page.convertToImage(
BufferedImage.TYPE_3BYTE_BGR, 72 * 6);
int newwidth = image.getWidth();
if (newwidth > width)
width = newwidth;
height += image.getHeight();
listimgage.add(image);
}
// 绘制合成图像
BufferedImage jpgimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 复制图片到缓冲流中
Graphics2D grap = jpgimage.createGraphics();
// 清除背景
grap.setColor(Color.white);
// 开始将内容填充
int top = 0;
for (int i = 0; i < pages.size(); i++) {
BufferedImage image = listimgage.get(i);
int newwidth = image.getWidth();
int newheight = image.getHeight();
grap.drawImage(image, 0, top, newwidth, newheight, null);
top += image.getHeight();
}
// 释放图像资源
grap.dispose();
// 将绘制的图像生成至输出流
output = new FileOutputStream(jpgfile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
// 压缩质量(quality越高质量越好)
float quality = 1.5f;
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(jpgimage);
param.setQuality(quality, true);
encoder.setJPEGEncodeParam(param);
encoder.encode(jpgimage);
jpgimage.flush();
return true;
} catch (Exception e) {
Logger.error(e.getMessage(), e);
return false;
} finally {
if (output != null)
output.close();
if (document != null)
document.close();
}
}
}