如何使用文本库将pdf转换为文本文件



下面是我将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在文本提取方面是有限的。最后,你基本上有两种可能:

  1. 升级到iText的新版本,提供更好的文本提取功能

  2. 如果你必须坚持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格式的不同,提取并不总是在那个版本中工作…

最新更新