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。
答案 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下方添加:
pdfbox-1.3.1
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();
}
}