PDF Content vergleichen

ayibogan

Mitglied
Ich suche nach einer Möglichkeit, um den Content zweier PDF´s zu vergleichen.

Der Vergleich soll auch TRUE ergeben wenn die Metadaten(z.B. Creation-Date) verschieden und der "Rest" identisch ist.
Finde leider keine Möglichkeit - bei einem byteWeisen Vergleich - vorher die Metadaten zu extrahieren.
Mit PDFBox kann ich zwar den Content in eine Textdatei konvertieren, jedoch werden da Annotationen und Bilder zum Problem.

Kennt jemand evtl. eine Möglichkeit mit PDFBox den Content als Stream ohne Metadaten zu erzeugen?
Oder eine andere Lösung wie ich von einem PDF die Metadaten extrahieren könnte?
 
Danke für die Antwort, leider weiß ich nicht wie ich die Position der Metadaten im Stream heraufinden kann.
Wenn ich folgendes für ein Bsp. PDF mit gleichen Inhalt abder verschiedene Creation-Date Metadaten durchführe:
Java:
while ((byte1 = fis1.read()) != -1 && (byte2 = fis2.read()) != -1) {
  if (byte1 != byte2) {
     return false;
  }
}
ist die letzte Position unterschiedlich, aber wie kann ich genau herausfinden wann die Metadaten anfangen?
 
Über das iText Framwork kannst du die metadaten auslesen. Die jagst du dann wieder durch einen XML Parser und ließt dabei das Datum aus.

Java:
/*
 * This class is part of the book "iText in Action - 2nd Edition"
 * written by Bruno Lowagie (ISBN: 9781935182610)
 * For more info, go to: [url=http://itextpdf.com/examples/]iText ®: where to find examples[/url]
 * This example only works with the AGPL version of iText.
 */
 
package part2.chapter06;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
 
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfReader;
 
import part1.chapter01.HelloWorldLandscape1;
import part1.chapter01.HelloWorldLandscape2;
import part1.chapter03.MovieTemplates;
import part1.chapter05.Hero1;
 
public class PageInformation {
 
	/** The resulting text file with info about a PDF. */
    public static final String RESULT
        = "results/part2/chapter06/page_info.txt";
 
    /**
     * Main method.
     * @param args no arguments needed
     * @throws DocumentException 
     * @throws IOException
     */
    public static void main(String[] args)
        throws DocumentException, IOException {
    	// Use old examples to create PDFs
        HelloWorldLandscape1.main(args);
        HelloWorldLandscape2.main(args);
        MovieTemplates.main(args);
        Hero1.main(args);
        // Inspecting PDFs
        PrintWriter writer = new PrintWriter(new FileOutputStream(RESULT));
        inspect(writer, HelloWorldLandscape1.RESULT);
        inspect(writer, HelloWorldLandscape2.RESULT);
        inspect(writer, MovieTemplates.RESULT);
        inspect(writer, Hero1.RESULT);
        writer.close();
    }
 
    /**
     * Inspect a PDF file and write the info to a txt file
     * @param writer Writer to a text file
     * @param filename Path to the PDF file
     * @throws IOException
     */
    public static void inspect(PrintWriter writer, String filename)
        throws IOException {
        PdfReader reader = new PdfReader(filename);
        writer.println(filename);
        writer.println("metadata: ");
        writer.println(reader.getgetMetadata()); // <-- Metadaten
        writer.print("Number of pages: ");
        writer.println(reader.getNumberOfPages());
        Rectangle mediabox = reader.getPageSize(1);
        writer.print("Size of page 1: [");
        writer.print(mediabox.getLeft());
        writer.print(',');
        writer.print(mediabox.getBottom());
        writer.print(',');
        writer.print(mediabox.getRight());
        writer.print(',');
        writer.print(mediabox.getTop());
        writer.println("]");
        writer.print("Rotation of page 1: ");
        writer.println(reader.getPageRotation(1));
        writer.print("Page size with rotation of page 1: ");
        writer.println(reader.getPageSizeWithRotation(1));
        writer.print("Is rebuilt? ");
        writer.println(reader.isRebuilt());
        writer.print("Is encrypted? ");
        writer.println(reader.isEncrypted());
        writer.println();
        writer.flush();
    }
}
 

Zurück
Oben