package test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
public class Tools {
/**
* 传入pdf格式的文件,将其解析为txt格式文件。名称与之前相同 注:无法解析pdf内图片信息
* 无法解析的pdf文档有:红通样本/1999,2000,2001下所有pdf文档
*
* @param file
* @throws Exception
*/
public static void readPdf(String file) throws Exception {
boolean sort = false;// 是否排序
String pdfFile = file;// pdf文件名
String textFile = null;// 输入文本文件名称
String encoding = "UTF-8";// 编码方式
int startPage = 1;// 开始提取页数
int endPage = Integer.MAX_VALUE;// 结束提取页数
Writer output = null;// 文件输入流,生成文本文件
PDDocument document = null;// 内存中存储的PDF Document
try {
try {
URL url = new URL(pdfFile);// 首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件
document = PDDocument.load(pdfFile); // 注意参数已不是以前版本中的URL.而是File。
String fileName = url.getFile();// 获取PDF的文件名
// 以原来PDF的名称来命名新产生的txt文件
if (fileName.length() > 4) {
File outputFile = new File(fileName.substring(0,
fileName.length() - 4)
+ ".txt");
textFile = outputFile.getName();
}
} catch (MalformedURLException e) {
// 如果作为URL装载得到异常则从文件系统装载
// 注意参数已不是以前版本中的URL.而是File。
document = PDDocument.load(pdfFile);
if (pdfFile.length() > 4) {
textFile = pdfFile.substring(0, pdfFile.length() - 4)
+ ".txt";
}
}
output = new OutputStreamWriter(new FileOutputStream(textFile),
encoding);// 文件输入流,写入文件倒textFile
PDFTextStripper stripper = null;// PDFTextStripper来提取文本
stripper = new PDFTextStripper();
stripper.setSortByPosition(sort);// 设置是否排序
stripper.setStartPage(startPage);// 设置起始页
stripper.setEndPage(endPage);// 设置结束页
stripper.writeText(document, output);// 调用PDFTextStripper的writeText提取并输出文本
} finally {
if (output != null) {
output.close();// 关闭输出流
}
if (document != null) {
document.close();// 关闭PDF Document
}
}
}
public static void fileCast(String filePath) throws Exception{
File file = new File(filePath);
if(file.isDirectory()){
String[] path = file.list();
for(int i = 0;i < path.length;i++){
path[i] = filePath + "//" +path[i];
readPdf(path[i]);
}
}else if(filePath.endsWith(".pdf") || filePath.endsWith(".PDF")){
readPdf(filePath);
}
System.out.println("转换完成!");
}
public static void main(String[] args) throws Exception {
fileCast("d://test");
}
}