【问题标题】:How to compare two pdf documents using Apache Tika如何使用 Apache Tika 比较两个 pdf 文档
【发布时间】:2014-02-10 17:53:55
【问题描述】:

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

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

我现在可以这样做 -

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 进行比较。

【问题讨论】:

    标签: java apache pdf apache-tika


    【解决方案1】:

    Tika 检测并提取元数据和结构化文本内容。不支持查找第一节页眉距离、图片高宽等。

    你可以试试PDFBoxItext

    【讨论】:

    • 感谢您的回复。我也很好奇 docx 文件在相应的 xml 中有样式、页眉、页脚信息。 pdf文件负责这些事情或者它负责这些事情,无论我们是否可以提取这些细节。在查看了 Tika 生成的结构化数据表示之后,它似乎没有任何这样的信息?请回答。
    • Tika 只提取文本内容而不是样式。
    • 好的,这让我问我们是否可以使用 Tika 获取 pdf 中文本的字体大小、名称、颜色等信息?
    【解决方案2】:

    如果您想访问更多信息,使用PDFTextStream 等其他api 可能更方便。 Tika 从 pdf 中提取原始文本信息,而 PDFTextStream 为您提供结构化文本以及相关信息,例如字符编码、高度、文本区域等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多