Results 1 to 6 of 6

Thread: PDF file compare functie

  1. #1

    PDF file compare functie

    Hallo hallo,

    Ik ben bezig met het schrijven van een PDF file compare functie op byte niveau, waarbij ik gebruik maak van Gnostice als PDF toolkit. Nu zie ik met beyond compare dat twee pdf files hetzelfde zijn m.u.v. creation en modification date en één of ander ID/Hash. Het is me al gelukt om de creation en modification date aan te passen zodat dit buiten beschouwing blijft bij de file compare, alleen heb ik geen idee waar het ID voor staat en hoe ik dit via Gnostice kan benaderen. Iemand een idee suggestie waar dit id voor staat/hoe deze property heet?

    Code:
    <</Size 17 /Root 1 0 R /Info 16 0 R /ID [ <9fd785b9f49da4534fbaadb498252854> <9fd785b9f49da4534fbaadb498252854> ] >>
    startxref
    12927
    %%EOF
    Bij voorbaat dank!!!

  2. #2
    Quote Originally Posted by luigi View Post
    Iemand een idee suggestie waar dit id voor staat/hoe deze property heet?
    Over de PDF ID: https://stackoverflow.com/questions/...-in-a-pdf-file

    Als je de files byte/byte vergelijkt, waarom doe je dan nog iets met Gnostice?
    Je kunt dan toch gewoon creation/modification date en ID buiten beschouwing laten tijdens de byte/byte vergelijk?

    Wat doe je dan precies met Gnostice?

  3. #3
    Wat rvk zegt: bij een binary compare doet de file stamp niet ter zake.

    Om een binary compare te doen:

    function BinaryCompare(AFileA, AFileB: String): Boolean;

    1. Open file A als een file stream (StreamA)
    2. Open file B als een file stream (StreamB)
    3. Vergelijk size van StreamA en StreamB...als ongelijk => return false
    4. Lees blok uit StreamA (BlokA)
    ReadA := StreamA.Read(BlokA, SizeOf(BlokA));
    5. Lees blok uit StreamB (BlokB)
    ReadB := StreamB.Read(BlokB, SizeOf(BlokB));
    6. Vergelijk de inhoud van BlokA met BlokB...als ongelijk => return false
    gebruik hier iets als CompareMem(@BlokA[0], @BlokB[0], ReadA)
    7. Ga naar punt 4 en herhaal tot end of stream
    8. return true

  4. #4
    Quote Originally Posted by havezet View Post
    Wat rvk zegt: bij een binary compare doet de file stamp niet ter zake.
    Om een binary compare te doen:
    function BinaryCompare(AFileA, AFileB: String): Boolean;
    Zoals ik het begrijp wil luigi PDF's, die ongelijke creation/modification date (staat ook IN de PDF) en ongelijke ID hebben, ook controleren op inhoud. Dan kun je dus niet simpel de size en inhoud controleren.

    Zo kan eenzelfde PDF later nog een keer aangemaakt worden. De inhoud is dan hetzelfde maar de creation/modification date en ID zijn verschillend. Je hebt dus byte/byte verschillende PDF's maar luigi wil dit aanmerken als dezelfde !!!

    Dan moet je dus eerst beide files helemaal inlezen en gewoon die creation/modification date en ID eruit halen (of op nul zetten) en dan de byte/byte vergelijk doen.

    Zijn de PDF's te groot voor het geheugen dan zul je dit dynamisch moeten doen via de stream.

  5. #5
    Het probleem is inderdaad dat het modification en creation date ook in het file zelf staan en ik alleen een creation/modification date niet als verschillend pdf file wil aanmerken. Ik gebruik gnostice om modification/creation date aan te passen, maar ID was me nog niet gelukt.

    @RVK Bedoel je dat ik gewoon de string moet met ID, Creation/Modification date eruit moet slopen voordat ik ga vergelijken?

  6. #6
    Quote Originally Posted by luigi View Post
    @RVK Bedoel je dat ik gewoon de string moet met ID, Creation/Modification date eruit moet slopen voordat ik ga vergelijken?
    Ja. Je zou gewoon byte voor byte beide files kunnen lezen tot je de /CreationDate, /ModificationDate en /ID tegenkomt en die dan negeren.

    Overigens is het voor een PDF wel het beste om dan alle streams individueel te behandelen.
    Want de CreationDate hoeft niet vooraan in het eerste gedeelte te staan.

    Het hangt ook een beetje af van hoe diezelfde PDF's gemaakt zijn en waarom je ze dus wilt vergelijken.

    Zo zou ik een PDF kunnen pakken en opnieuw uitprinten naar PDF maar dan heb ik een wezenlijk verschillende PDF.
    Dan is echt niet alleen CreationDate en ID verschillend (maar ook de hele constructie).

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •