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

时间:2015-06-01 09:41:27

标签: itext

以下是将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) {}
    }
}

1 个答案:

答案 0 :(得分:1)

您使用的是哪个示例?如果是第575页的那个,您将阅读以下内容:

"你在这里有一个穷人的文字提取器。它适用于此示例,但它不适用于大多数可以在野外找到的PDF文件。如果您想将iText用作文本提取库,则应考虑许多方面。"

下一章名为"为什么iText不进行文本提取" - 因此,在文本提取方面,该版本的iText受到限制。最后,你基本上有两种可能性:

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

  2. 如果您必须坚持使用版本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,提取并不总是适用于该版本...