java pdf转图片

9 篇文章 0 订阅

题外话,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;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值