下面是我将pdf文件转换为文本文件的代码。代码成功运行,但是它没有生成结果文本文件(Sample.txt)。有人能解释一下吗?该代码部分基于动作书中第一个文本的示例…
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
public class ConvertPDFToTEXT {
public static void main(String[] args) throws IOException {
try {
Document document = new Document();
document.open();
PdfReader reader = new PdfReader("Data Dictinary A4.pdf");
PdfDictionary dictionary = reader.getPageN(1);
PRIndirectReference reference = (PRIndirectReference)
dictionary.get(PdfName.CONTENTS);
PRStream stream = (PRStream) PdfReader.getPdfObject(reference);
byte[] bytes = PdfReader.getStreamBytes(stream);
PRTokeniser tokenizer = new PRTokeniser(bytes);
FileOutputStream fos=new FileOutputStream("Sample.txt");
StringBuffer buffer = new StringBuffer();
while (tokenizer.nextToken()) {
if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) {
buffer.append(tokenizer.getStringValue());
}
}
String test=buffer.toString();
StringReader stReader = new StringReader(test);
int t;
while((t=stReader.read())>0)
fos.write(t);
document.add(new Paragraph(".."));
document.close();
}
catch (Exception e) {}
}
}
你用的是哪个例子?如果是第575页的那篇,你会读到以下内容:
"你这里有一个穷人的文本提取器。它在这个例子中工作得很好,但它不适用于大多数可以在野外找到的PDF文件。如果您想使用iText作为文本提取库,那么应该考虑许多方面。"
下一章被命名为"为什么iText不做文本提取"——所以那个版本的iText在文本提取方面是有限的。最后,你基本上有两种可能:
-
升级到iText的新版本,提供更好的文本提取功能
-
如果你必须坚持2.1.7版本,那么看看PdfTextExtractor.java,而不是你正在做的。以下是另一篇文章中的一些代码:
PdfReader reader = new PdfReader(yourInputstream); PdfTextExtractor extractor = new PdfTextExtractor(reader); int pagenumber = reader.getNumberOfPages(); for(int i = 1; i<= pagenumber; i++) { System.out.println("============PAGE NUMBER " + i + "=============" ); String line = extractor.getTextFromPage(i); System.out.println(line); }
但是正如你在另一篇文章中看到的,根据PDF格式的不同,提取并不总是在那个版本中工作…