最近在用java做关于PDF的处理,具体用 Apache PDFBox包来处理。具体该包的类、方法等等可以参加官网。https://pdfbox.apache.org/
言归正传,PDFBox在处理PDF文件时很多人遇到了Can't Close PDF的问题,我们也遇到了,并且解决了。
最初我们的代码是:
if(isCurrentPage(tp)){
FigureY= Fy-lastparagraphy;
float WholeY= lasty-lastparagraphy;
if((WholeY>=35||WholeY<=0))//判断是否截图中只有一行字
public static void myStripper(String pdfPath){
try {
FileInputStream fis = new FileInputStream(pdfPath);
PDFParser pp = new PDFParser(fis);
pp.parse();
fis.close();
TestPDFTextStripper sps = new TestPDFTextStripper();
sps.setParentPath( pdfPath.substring(0, pdfPath.lastIndexOf("/")) );
sps.setPdfName(pdfPath.substring(pdfPath.lastIndexOf("/")+1, pdfPath.lastIndexOf(".")));
sps.setPdfPath(pdfPath);
sps.getText(pp.getPDDocument());
}catch (Exception e) {
e.printStackTrace();
System.out.print("error 4");
}
}
}
事实是,我们不能用parse()方法来打开PDF,应该用load,这样就不会有问题
public static void myStripper(String pdfPath){
try {
KC_PDFFigureStripper stripper = new KC_PDFFigureStripper();
String textOfPdf;
PDDocument doc = PDDocument.load(pdfPath);
try {
stripper.setParentPath( pdfPath.substring(0, pdfPath.lastIndexOf("/")) );
stripper.setPdfName(pdfPath.substring(pdfPath.lastIndexOf("/")+1, pdfPath.lastIndexOf(".")));
stripper.setPdfPath(pdfPath);
textOfPdf = stripper.getText(doc);
} finally {
doc.close();
}
} catch (Exception e) {
e.printStackTrace();
System.out.print("error 4");
}
}
这样就不会再报错误了。