package com.ccx.pdfbox.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary;
import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.apache.pdfbox.util.PDFTextStripper;
/**
* 操作pdf文档的pdfbox工具的常用功能
*
* @author
* @version 1.0, 2010-07-11
*/
public class AllFeatures {
/**
* 解析PDF,获取text内容
*
* @param file_path_name
* @return String类型的text内容
*/
public String getText(String file_path_name) {
// 是否排序
boolean sort = true;
// pdf文件名
String pdfFile = file_path_name;
// 输入文本文件名称
String textFile = null;
// 编码方式
String encoding = "UTF-8";
// 开始提取页面
int startPage = 1;
// 结束提取页面
int endPage = Integer.MAX_VALUE;
// 文件输入流,输入文本文件
Writer output = null;
// 内存中存储的PDF Document
PDDocument document = null;
// 返回的内容字符串
String returnStr = "";
try {
// 装载文件
document = PDDocument.load(pdfFile);
if (pdfFile.length() > 4) {
textFile = pdfFile.substring(0, pdfFile.length() - 4) + ".txt";
}
// 文件输出流,写入文件到textFile
output = new OutputStreamWriter(new FileOutputStream(textFile),encoding);
// PDFTextStripper来提取文本
PDFTextStripper stripper = new PDFTextStripper();
// 设置是否排序
stripper.setSortByPosition(sort);
// 设置起始页
stripper.setStartPage(startPage);
// 设置结束页
stripper.setEndPage(endPage);
// 调用PDFTextStripper的writerText提取并输出文本
stripper.writeText(document, output);
// 得到其中的text文本内容
returnStr = stripper.getText(document);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (output != null) {
output.close();
}
if (document != null) {
document.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return returnStr;
}
/**
* 解析PDF,当pdf是由图片构成时,导出每张图片
*
* @param file_path_name
*/
public void getImage(String file_path_name)
{
// 内存中存储的PDF Document
PDDocument document = null;
try {
// 装载文件
document = PDDocument.load(file_path_name);
PDDocumentCatalog cata = document.getDocumentCatalog();
// 得到所有页面的List
List pages = cata.getAllPages();
// 用来记录每个页面的图片名
int count = 1;
// 遍历每一页
for( int i = 0; i < pages.size(); i++ )
{
PDPage page = (PDPage)pages.get(i);
if( null != page )
{
// 得到每个页面资源
PDResources res = page.findResources();
// 获取页面图片信息
Map imgs = res.getImages();
if( null != imgs )
{
Set keySet = imgs.keySet();
Iterator it = keySet.iterator();
while( it.hasNext() )
{
Object obj = it.next();
PDXObjectImage img = (PDXObjectImage)imgs.get(obj);
// 保存图片
img.write2file( "d:/image" + count );
count++;
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if( null != document )
try {
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 解析PDF,得到一二级目录书签结构
*
* @param file_path_name
*/
public void getAllCata(String file_path_name)
{
// 内存中存储的PDF Document
PDDocument document = null;
try {
document = PDDocument.load(new File(file_path_name));
// 获得该pdf的目录对象
PDDocumentOutline root = document.getDocumentCatalog().getDocumentOutline();
// 一级目录
PDOutlineItem item = root.getFirstChild();
while( item != null )
{
System.out.println( "Item:" + item.getTitle() );
// 二级目录
PDOutlineItem child = item.getFirstChild();
while( child != null )
{
System.out.println( " Child:" + child.getTitle() );
// 下一个二级目录
child = child.getNextSibling();
}
// 下一个一级目录
item = item.getNextSibling();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 解析PDF,得到pdf的元数据
*
* @param file_path_name
*/
public void metadata(String file_path_name)
{
//导入pdf文档
PDDocument document = null;
try {
document = PDDocument.load(new File(file_path_name));
PDDocumentInformation info = document.getDocumentInformation();
// 输出总页数
System.out.println( "Page Count=" + document.getNumberOfPages() );
// 输出该文档主题
System.out.println( "Title=" + info.getTitle() );
// 输出该文档作者
System.out.println( "Author=" + info.getAuthor() );
// 输出该文档标题
System.out.println( "Subject=" + info.getSubject() );
// 输出该文档关键字
System.out.println( "Keywords=" + info.getKeywords() );
// 输出该文档创建者
System.out.println( "Creator=" + info.getCreator() );
// 输出该文档制作者
System.out.println( "Producer=" + info.getProducer() );
// 输出该文档创建日期
System.out.println( "Creation Date=" + info.getCreationDate() );
// 输出该文档修改日期
System.out.println( "Modification Date=" + info.getModificationDate());
// 输出该文档
System.out.println( "Trapped=" + info.getTrapped() );
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 1
- 2
- 3
前往页