Apache PDFbox快速开发指南

作者:chszs



一、介绍

Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。Apache PDFBox还包含了数个命令行工具。


Apache PDFbox于前不久发布了最新的1.8.2版。



二、特征

Apache PDFBox主要有以下特征:


1)文本提取:从PDF文档中提取文本。


2)合并&分割:可以把多个PDF文档合并成单个,也可以把单个PDF分拆成多个PDF文档。


3)表单填充:可以从PDF表单中提取数据,或者是填充PDF表单。


4)PDF/A验证:验证PDF文档是否满足PDF/A ISO标准。


5)PDF打印:把PDF文档输出到打印机——利用了Java的打印API。


6)PDF转换:可以把PDF文档转换成映像文件。


7)PDF创建:可以从头创建新的PDF文档。


8)集成Lucene搜索引擎:Lucene搜索引擎与PDF索引相集成。



三、开发实战

Apache PDFbox既然是PDF工具库,那么最重要的例子就是用它创建一个PDF文档。下面我们开始这一历程。


1. 创建Java项目

在Eclipse下创建一个Java项目,项目名为PDFboxDemo。



2. 下载PDFbox包

地址:


1)pdfbox-1.8.2.jar


地址:http://archive.apache.org/dist/pdfbox/1.8.2/pdfbox-1.8.2.jar


说明:满足一般的PDF操作需求。


2)pdfbox-app-1.8.2.jar


http://archive.apache.org/dist/pdfbox/1.8.2/pdfbox-app-1.8.2.jar 说明:PDFbox的多个命令行的工具包。


3)fontbox-1.8.2.jar


地址:http://archive.apache.org/dist/pdfbox/1.8.2/fontbox-1.8.2.jar


说明:PDF使用的字库包


因此,本例使用1、3项即可。



3. 创建类文件

先创建chszs.pdf源码包,在此包内创建类文件CreatePDF.java。


package chszs.pdf;

//import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
//import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class CreatePDF {
	public static void main(String[] args) throws IOException{
		PDDocument document = new PDDocument();
		PDPage page = new PDPage();
		document.addPage(page);
		
//		PDFont font = PDTrueTypeFont.loadTTF(document, new File("SIMSUN.TTC"));
		PDFont font = PDType1Font.HELVETICA_BOLD;
		
		PDPageContentStream contentStream = new PDPageContentStream(document, page);
		contentStream.beginText();
		contentStream.setFont(font, 14);
		contentStream.moveTextPositionByAmount(100, 700);
		contentStream.drawString("Hello World");
//		contentStream.drawString("中文");
		contentStream.endText();
		
		contentStream.close();
		
		try {
			document.save("E:/test.pdf");
		} catch (COSVisitorException e) {
			e.printStackTrace();
		}
		document.close();
	}
}


执行程序,在磁盘E盘产生test.pdf文件。



总结说明:至Apache PDFbox 1.8.2版,仍然不支持中文PDF的创建,比iText的功能要弱很多。