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

How to convert pdf into text file using itext liberary

下面是我将 pdf 文件转换为文本文件的代码。 代码成功运行,但不会生成生成的文本文件 (Sample.txt)。任何人都可以阐明这一点吗? 代码部分基于第一个iText in action book的例子...

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 页中的那个,您将阅读以下内容:

"What you have here is a poor man’s text extractor. It works well for this example, but it won’t work with most PDF files that can be found in the wild. Many aspects should be taken into account if you want to use iText as a text-extraction library."

下一章名为 "Why iText doesn’t do text extraction" - 因此该版本的 iText 在文本提取方面受到限制。最后你基本上有两种可能性:

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

  2. 如果您必须坚持使用 2.1.7 版,请查看 PdfTextExtractor.java 而不是您正在做的事情。这是在另一个 post:

    中找到的一些代码
    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);
    }
    

    但是正如您在另一个 post 中看到的那样,根据 PDF,提取并不总是适用于该版本...