Lucene for Java with PDFBox获得nullpointer异常

时间:2013-10-13 14:17:31

标签: java jar lucene pdfbox

MEANHHILE我解决了它。看下面的解决方案。

嘿,我对 PDFBox API 感到沮丧。

我做了:

PDDocument pdfDocument = PDDocument.load(new File("text.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
String s =  stripper.getText(pdfDocument);
pdfDocument.close();

但我得到了

Exception in thread "main" java.lang.NullPointerException
at org.pdfbox.pdmodel.PDPageNode.getAllKids(PDPageNode.java:194)
at org.pdfbox.pdmodel.PDPageNode.getAllKids(PDPageNode.java:182)
at org.pdfbox.pdmodel.PDDocumentCatalog.getAllPages(PDDocumentCatalog.java:226)
at org.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:216)
at org.pdfbox.util.PDFTextStripper.getText(PDFTextStripper.java:149)
at lucene.test.main(test.java:47)

String s =  stripper.getText(pdfDocument);

我完全不知道为什么。使用本教程创建PDF效果很好(http://pdfbox.apache.org/cookbook/textextraction.html)。但是这个文本提取没有。已经搜索了很多,但没有任何帮助。

顺便说一下,我仍然使用“ pdfbox-0.7.3.jar ”,因为新的“ pdfbox-1.8.2.jar ”对我不起作用。这可能是原因吗?

寻求帮助。

PS:我在使用“stripper.writeText()”

时遇到了同样的错误

解决方案是:

而不是

PDDocument pdfDocument = PDDocument.load(new File("text.pdf"));

只需使用

PDDocument pdfDocument = PDDocument.load("C:\TEMP\text.pdf");

我不确定为什么,但它现在对我有用。即使使用旧的0.7.3 PDFBox。

4 个答案:

答案 0 :(得分:1)

代替

PDDocument pdfDocument = PDDocument.load(new File("text.pdf"));

只需使用

PDDocument pdfDocument = PDDocument.load("C:\TEMP\text.pdf");

我不确定为什么,但是现在对我有用。即使使用了旧版的PDFBox 0.7.3。

答案 1 :(得分:0)

问题在于这一行

  

PDDocument pdfDocument = PDDocument.load(new File(“text.pdf”));

指定text.pdf的路径,即路径。

在不知道文件驻留位置的情况下,JVM应该如何创建文件对象,这就是Exception发生的原因。在那边给路径,然后你很高兴。

<强>更新

它似乎是bug,并已在以后的版本中修复。

答案 2 :(得分:0)

为此总是使用为此总是使用pdfbox 1.8.6和fop0.93

PDDocument doc = null;         尝试         {             doc = new PDDocument();             PDPage page = new PDPage();             doc.addPage(页);             PDPageContentStream contentStream = new PDPageContentStream(doc,page);

        PDFont pdfFont = PDType1Font.HELVETICA;
        float fontSize = 25;
        float leading = 1.5f * fontSize;

        PDRectangle mediabox = page.findMediaBox();
        float margin = 72;
        float width = mediabox.getWidth() - 2*margin;
        float startX = mediabox.getLowerLeftX() + margin;
        float startY = mediabox.getUpperRightY() - margin;

        String text = "Hello sir finally PDF is created : thanks"; 
        List<String> lines = new ArrayList<String>();
        int lastSpace = -1;
        while (text.length() > 0)
        {
            int spaceIndex = text.indexOf(' ', lastSpace + 1);
            if (spaceIndex < 0)
            {
                lines.add(text);
                text = "";
            }
            else
            {
                String subString = text.substring(0, spaceIndex);
                float size = fontSize * pdfFont.getStringWidth(subString) / 1000;
                if (size > width)
                {
                    if (lastSpace < 0) // So we have a word longer than the line... draw it anyways
                        lastSpace = spaceIndex;
                    subString = text.substring(0, lastSpace);
                    lines.add(subString);
                    text = text.substring(lastSpace).trim();
                    lastSpace = -1;
                }
                else
                {
                    lastSpace = spaceIndex;
                }
            }
        }

        contentStream.beginText();
        contentStream.setFont(pdfFont, fontSize);
        contentStream.moveTextPositionByAmount(startX, startY);            
        for (String line: lines)
        {
            contentStream.drawString(line);
            contentStream.moveTextPositionByAmount(0, -leading);
        }
        contentStream.endText(); 
        contentStream.close();

         doc.save("E:\\document.pdf");
    }catch (Exception exp){
        logger.error("[GetInformation] email id is " +exp);

    }
    finally
    {
        if (doc != null)
        {
            try{
            doc.close();
            }catch (Exception expe){
                logger.error("[GetInformation] email id is " +expe);

            }
        }
    }

答案 3 :(得分:0)

在外部Jars下方添加:

  1. pdfbox-1.3.1

  2. commons-logging-1.2

Java代码:

import org.apache.pdfbox.multipdf.Splitter;   
import org.apache.pdfbox.pdmodel.PDDocument;  
import java.io.File;   
import java.io.IOException;   
import java.util.List;   
import java.util.Iterator;  

public class PdfSplitting {  

    public static void main(String[] args)throws IOException {  

          File file = new File("D:/test.pdf");  
          PDDocument document = PDDocument.load(file);   

          Splitter splitter = new Splitter();  

          List<PDDocument>Pages = splitter.split(document);  

          Iterator<PDDocument>iterator = Pages.listIterator();  

    int i = 1;  
    while(iterator.hasNext()) {  
             PDDocument pd = iterator.next();  
    pd.save("D:/test"+ i++ +".pdf");  
          }  
          System.out.println("Pdf spitted successfully");  
    document.close();  
    }  
}