题外话,maven搭建工程的时候,pom导入pdfbox包的时候,报错
Missing artifact org.apache.pdfbox:pdfbox:bundle:2.0.1
这边可选的pdfbox两个版本是根据本地仓库的配置,
如果想添加新的版本,只有去maven官网https://mvnrepository.com/,找到相对应的pdfbox <dependency>,添加到pom文件,然后本地工程,maven-->update project,这样新添加的pdfbox的版本就会添加到本地仓。
下面开始进入正题,
需要的<dependency>,这边如果版本不对可能会出现问题
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.64</version>
</dependency>
代码:
package com.heima.jedis;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import com.itextpdf.text.pdf.PdfReader;
public class Test001 {
public static void main(String[] args) throws Exception {
try
{
byte[] pdfbyte = FileUtils.readFileToByteArray(new File("C:\\Users\\hasee\\Desktop\\OA审批前置\\测试\\赎单申请单(RD3511902727).pdf"));
byte[] imageByte = pdf2Image(pdfbyte, 200, "jpg");
FileUtils.writeByteArrayToFile(new File("C:\\Users\\hasee\\Desktop\\OA审批前置\\测试\\赎单申请单(RD3511902727)..jpg"), imageByte);
} catch (IOException e)
{
e.printStackTrace();
}
}
public static byte[] pdf2Image(byte[] pfdBytes, int dpi, String extension) throws IOException {
PDDocument pdDocument;
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
byte[] imageBytea = null;
try {
pdDocument = PDDocument.load(pfdBytes);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大转换后越清晰,相对转换速度越慢 */
PdfReader reader = new PdfReader(pfdBytes);
int pages = reader.getNumberOfPages();
System.out.println("pdf页数: " + pages);
StringBuffer imgFilePath = null;
int width = 0;
int totalHight = 0;
List<int[]> imageArrayList = new ArrayList<int[]>();
Map<int[], Integer> imageLocMap = new HashMap<int[], Integer>();
for (int i = 0; i < pages; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
width = width > image.getWidth() ? width : image.getWidth();//图片宽度
int height = image.getHeight();//图片高度
//从图片中读取RGB
int[] imageArray = new int[width * height];
imageArray = image.getRGB(0, 0, width, height, imageArray, 0, width);
//获取最后空白行
int blankLine = height;
for(int h = height - 1; h >= 0; h--){
boolean isBlank = true;
for(int k = 0; k < image.getWidth(); k++){
if(imageArray[h * image.getWidth() + k] != -1){
isBlank = false;
}
}
//如果为空白,则删掉此组
if(isBlank){
blankLine = h;
}else{
break;
}
}
totalHight += blankLine;
int[] resultBtyte = new int[width * blankLine];
System.arraycopy(imageArray, 0, resultBtyte, 0, width * blankLine);
System.out.println("height:" + height);
System.out.println("blankLine:" + blankLine);
System.out.println("源图片大小:" + imageArray.length);
System.out.println("清除空白后大小:" + resultBtyte.length);
imageArrayList.add(resultBtyte);
imageLocMap.put(resultBtyte, blankLine);
}
int x = 0;
int y = 0;
BufferedImage imageNew = new BufferedImage(width, totalHight, BufferedImage.TYPE_INT_RGB);
for(int[] imageArray : imageArrayList){
imageNew.setRGB(x, y, width, imageLocMap.get(imageArray), imageArray, 0, width);
y += imageLocMap.get(imageArray);
}
ImageIO.write(imageNew, extension, byteOutputStream);
imageBytea = byteOutputStream.toByteArray();
System.out.println("PDF文档转图片成功!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("PDF文档转图片失败!");
throw e;
}
return imageBytea;
}
}