关于PDFBox读PDF时抛出Can't Close Pdf 的问题解决

最近在用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");
	}
  }

这样就不会再报错误了。

你可能感兴趣的:(关于PDFBox读PDF时抛出Can't Close Pdf 的问题解决)