import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.filechooser.FileFilter;
import org.pdfbox.cos.COSDocument;
import org.pdfbox.encryption.DecryptDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
//测试类
public class Exec {
public static void main(String[] args) {
// 创建窗体类变量
DemoWindow dw = new DemoWindow("读取PDF文件");
// 将窗体的宽度和高度分别设置为屏幕宽度和屏幕高度的1/3,左上角位置也设置为屏幕宽度和屏幕高度的1/3处
Toolkit theKit = dw.getToolkit();
Dimension wndSize = theKit.getScreenSize();
dw.setBounds(wndSize.width / 3, wndSize.height / 3, wndSize.width / 3,
wndSize.height / 3);
// 点击关闭按钮可以退出程序
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体为可见
dw.setVisible(true);
}
}
// 界面窗体
class DemoWindow extends JFrame implements ActionListener {
// 显示PDF文件内容的文本区
JTextArea jta = new JTextArea();
// 设置文本区的滚动条
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jsp = new JScrollPane(jta, v, h);
// 布局面板
JPanel jp = new JPanel();
// 操作按钮
JButton jb = new JButton("打开PDF文件");
// 构造函数
public DemoWindow(String title) {
super(title);
// 窗体布局
add(jsp);
jp.add(jb);
add(jp, BorderLayout.SOUTH);
// 添加事件监听器
jb.addActionListener(this);
}
// 响应单击按钮
public void actionPerformed(ActionEvent e) {
// 设置文件选择对话框
JFileChooser jfc = new JFileChooser(System.getProperty("user.home"));
// 设置只选择PDF文件
jfc.setFileFilter(new PdfFilter());
// 如果选中,利用getPDFContent函数读取PDF文件内容,并在文本区显示
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
jta.setText(getPDFContent(jfc.getSelectedFile().getAbsolutePath()));
}
}
// 读取PDF文件内容的函数
public String getPDFContent(String fileName) {
String docText = null;
try {
// 创建PDF解析器
PDFParser parser = new PDFParser(new FileInputStream(new File(
fileName)));
parser.parse();
// 得到PDF文档模型
COSDocument cosDoc = parser.getDocument();
// 判断是否加密
if (cosDoc.isEncrypted()) {
DecryptDocument decryptor = new DecryptDocument(cosDoc);
// decryptDocument函数参数为密码
decryptor.decryptDocument("");
}
// 得到PDF内容的文本信息
PDFTextStripper stripper = new PDFTextStripper();
docText = stripper.getText(new PDDocument(cosDoc));
} catch (Exception e) {
System.out.println(e.getMessage());
}
return docText;
}
}
// PDF文件扩展名过滤器
class PdfFilter extends FileFilter {
// 判断文件类型
public boolean accept(File f) {
// 如果是目录则退出
if (f.isDirectory()) {
return true;
}
// 如果扩展名为pdf则返回真
String[] filePostfix = { "pdf" };
for (String str : filePostfix) {
if (getExtension(f).equals(str))
return true;
}
return false;
}
// 返回PDF文件描述信息
public String getDescription() {
return "PDF文件(*.pdf)";
}
// 得到文件扩展名
public static String getExtension(File f) {
String ext = "";
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
}