2014-01-21 4 views
2

Я хочу сравнить два документа PDF (не только содержимое, но и другую информацию, такую ​​как нижние колонтитулы и стили заголовка).Как сравнить два pdf-документа с использованием Apache Tika

Я узнал, что мы можем использовать 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"); 
    } 
} 

Как мы можем извлечь больше информации, такие как заголовок расстояние первой секции, высоту изображения и ширину и т.д., и сравнить их с другим PDF с помощью Apache Тик.

ответ

6

Tika обнаруживает и извлекает метаданные и содержимое структурированного текста. Он не поддерживает поиск длины заголовка первой секции, высоты и ширины изображения и т. Д.

Вы можете попробовать PDFBox или Itext.

+0

Спасибо за ваш ответ. Мне также интересно, что файлы docx имеют стиль, заголовок, нижний колонтитул в соответствующих xml. Файл pdf позаботится об этих вещах или позаботится об этих вещах, можем ли мы извлечь эти данные или нет. Посмотрев на представление структурированных данных Tika, похоже, что у него нет такой информации? Ответьте, пожалуйста. – Prakhar

+0

Tika only extract Текстовое содержимое не является стилем. – SANN3

+0

Хорошо, это заставляет меня спросить, можем ли мы получить информацию, такую ​​как размер шрифта, имя, цвет и т. Д. Для текста в pdf, используя Tika? – Prakhar

1

Если вы хотите получить дополнительную информацию, возможно, удобнее использовать другой api, такой как PDFTextStream. Тика извлекает сырую текстовую информацию из pdf, а PDFTextStream дает структурированный текст с коррелированной информацией, такой как кодировка символов, высота, область текста и т. Д.

Смежные вопросы