如何使用Apache Tika比较两个pdf文档

时间:2014-01-21 08:40:36

标签: java apache pdf apache-tika

我想比较两个pdf文档(不仅包括内容,还包括其他信息,如页眉页脚和样式)。

我知道我们可以使用Apache tika进行比较。我学会了解析pdf文档并能够提取一些元数据信息,例如title,author。

我现在能够做到这一点 -

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;

import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;

public class CompareDocs {
    public CompareDocs() {
        super();
    }

    private void parseResource(String resourceName) {  
            System.out.println("Parsing resource : " + resourceName);  
            InputStream inputStream = null;  

            try {  
                try {
                        inputStream = new BufferedInputStream(new FileInputStream(new File(resourceName)));   
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }



                Parser parser = new AutoDetectParser();  
                ContentHandler contentHandler = new BodyContentHandler();  
                Metadata metadata = new Metadata();  

                parser.parse(inputStream, contentHandler, metadata, new ParseContext());  

                for (String name : metadata.names()) {  
                    String value = metadata.get(name);  
                    System.out.println("Metadata Name: " + name);  
                    System.out.println("Metadata Value: " + value);  
                }  

                System.out.println("Title: " + metadata.get("title"));  
                System.out.println("Author: " + metadata.get("Author"));  
                System.out.println("content: " + contentHandler.toString());  

            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (TikaException e) {  
                e.printStackTrace();  
            } catch (SAXException e) {  
                e.printStackTrace();  
            } finally {  
                if (inputStream != null) {  
                    try {  
                        inputStream.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  

    public static void main(String[] args) throws Exception {
        CompareDocs apacheTikaParser = new CompareDocs();  
               apacheTikaParser.parseResource("C:\\Users\\prakhar\\Desktop\\beautiful_code.pdf");  
    }
}

我们如何提取更多信息,例如第一部分的标题距离,图像高度和宽度等,并使用Apache Tika将它们与另一个pdf进行比较。

2 个答案:

答案 0 :(得分:6)

Tika检测并提取元数据和结构化文本内容。它不支持查找第一部分的标题距离,图像高度和宽度等。

您可以尝试PDFBoxItext

答案 1 :(得分:1)

如果您想要访问更多信息,可能更方便的是使用另一个api,如PDFTextStream。 Tika从pdf中提取原始文本信息,而PDFTextStream为您提供带有相关信息的结构化文本,如字符编码,高度,文本区域等。