以下是将pdf文件转换为文本文件的代码。 代码成功运行,但它不会生成生成的文本文件(Sample.txt)。任何人都可以对此有所了解吗? 该代码部分基于动作书中第一个iText的示例...
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) {}
}
}
答案 0 :(得分:1)
您使用的是哪个示例?如果是第575页的那个,您将阅读以下内容:
"你在这里有一个穷人的文字提取器。它适用于此示例,但它不适用于大多数可以在野外找到的PDF文件。如果您想将iText用作文本提取库,则应考虑许多方面。"
下一章名为"为什么iText不进行文本提取" - 因此,在文本提取方面,该版本的iText受到限制。最后,你基本上有两种可能性:
升级到新版iText,提供更好的文字提取功能
如果您必须坚持使用版本2.1.7,那么请查看PdfTextExtractor.java而不是您正在做的事情。以下是另一个post中的代码:
function SaveRg(){ $find('rgRole').get_batchEditingManager().saveChanges('rgRole_ctl00');
$find('rgRecei').get_batchEditingManager().saveChanges('rgRecei_ctl00');
return false;
但正如您在其他帖子中所看到的,取决于PDF,提取并不总是适用于该版本...