JAVA读取pdf数据,使用PDFBox

JAVA实用技巧

2017-02-27

533

0

如果有pdf文件的相关需求,欢迎留言,一起讨论。

在Apache PDFBox的库是与PDF文档工作的一个开源的Java工具。

此项目允许创建新的PDF文档,操作现有文档以及从文档中提取内容的能力。
Apache PDFBox还包括几个命令行实用程序。Apache PDFBox是在Apache License v2.0下发布的。

特点:

1、提取文本--从PDF文件提取Unicode文本。

2、拆分和合并--将单个PDF拆分为多个文件或合并多个PDF文件。

3、填写表单--从PDF表单提取数据或填写PDF表单。

4、预检--根据PDF / A-1b标准验证PDF文件。

5、打印--使用标准Java打印API打印PDF文件。

6、另存为图像--将PDF另存为图像文件,例如PNG或JPEG。

7、创建PDF--使用嵌入的字体和图像从头开始创建PDF。

8、签名--数字签名PDF文件。

提供一个读取pdf文件内容的实例:


import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationSquareCircle;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

public class PdfTest{
	
	/**
	 * 读取pdf内容
	 * @param file pdf文件
	 * @return
	 * @throws IOException 
	 * @throws InvalidPasswordException 
	 */
	private static String pdfToJson(File file) throws Exception {
		PDDocument document = PDDocument.load(file);
		 // 获取页码
        int pages = document.getNumberOfPages();
        // 读文本内容
        PDFTextStripper stripper = new PDFTextStripper();
        // 设置按顺序输出
        stripper.setSortByPosition(true);
        stripper.setStartPage(1);
        stripper.setEndPage(pages);
        String content = stripper.getText(document);
        System.out.println(content);     
		return content;
	}
	
	/**
	 * 获取用正方形的圈住的数据
	 * @param document
	 * @param pdPage
	 * @throws IOException
	 */
	private static void annotationsMethod(PDDocument document,PDPage pdPage) throws IOException{
		final List<PDAnnotation> annotations = pdPage.getAnnotations();
		for (int j = 0; j < annotations.size(); j++) {
		      	final PDAnnotation annot = (PDAnnotation) annotations.get(j);
		      	if(annot instanceof PDAnnotationSquareCircle){
		      		PDAnnotationSquareCircle pdAnnotationSquareCircle = (PDAnnotationSquareCircle) annot;
		      		String color = pdAnnotationSquareCircle.getColor().toString();
		      		float leftX = pdAnnotationSquareCircle.getRectangle().getLowerLeftX();
		      		float leftY =  pdAnnotationSquareCircle.getRectangle().getLowerLeftY();
		      		float rightX = pdAnnotationSquareCircle.getRectangle().getUpperRightX();
		      		float rightY = pdAnnotationSquareCircle.getRectangle().getUpperRightY();
		      		float width = pdAnnotationSquareCircle.getRectangle().getWidth();
		      		float height = pdAnnotationSquareCircle.getRectangle().getHeight();
		      		System.out.println("COLOR:" + color+",leftX:" + leftX + ",leftY:" + leftY + ",rightX:"+rightX+",rightY"+rightY
		      				+",width:"+width+",height"+height);
		      		
		      		PDFTextStripperByArea stripperArea = new PDFTextStripperByArea();
		             Rectangle2D rectangle2D = new Rectangle2D.Double(leftX,792-rightY,width,height);
		             stripperArea.addRegion("data", rectangle2D);
		             // 设置按顺序输出
		             stripperArea.setSortByPosition(true);
		             stripperArea.extractRegions(pdPage);
		             String content = stripperArea.getTextForRegion("data");
		             System.out.println(content);     
		      	}
		}
	}
	
	public static void main(String[] args) {
		File file = new File("c:/Volpoint_Tear_Sheet_10-11-16.pdf");
		try {
			pdfToJson(file);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

发表评论

全部评论:0条

houzhe11

JAVA从业者