Si vos pages "identiques" affichent exactement la même apparence à l'écran, l'approche algorithmique suivante pourrait permettre de rechercher les doublons:
- Convertissez chaque page en un fichier TIFF ou JPEG basse résolution en utilisant Ghostscript (par exemple, en utilisant 72 ppp).
- Si vous utilisez TIFF, exécutez l’un des utilitaires de ligne de commande libtiff pour "normaliser" les métadonnées TIFF.
- Exécutez md5sum.exe sur chaque page TIFF ou JPEG et rappelez-vous de la somme Md5 pour chaque page.
- Triez la liste des sommes MD5 pour trouver les pages en double.
- N'oubliez pas tous les numéros de page en double à supprimer.
- Exécutez une
pdftk.exe
ligne de commande sur le fichier PDF d'origine pour supprimer les doublons.
Vous pouvez coder cet algorithme dans la langue de votre choix (même batch sous Windows ou bash sous Linux / Unix / MacOSX).
D'abord: quelques notes sur l'utilisation de Ghostscript. Créez vos 1200 pages TIFF (ou JPEG) (sous Linux, vous utiliseriez à la gs
place gswin32c
):
gswin32c.exe ^
-dBATCH -dNOPAUSE -dSAFER ^
-sDEVICE=tiffg4 ^
-sOutputFile=C:\temp\tiffs\page-%06d.tif ^
-r72x72 ^
12000pages.pdf ^
# use -sDEVICE=jpeg to create *.jpeg files + adapt -sOutputFile= accordingly
# page-%06d.tif creates TIFFs named page-000001.tif through page-012000.tif*
Deuxièmement: Quelques remarques sur la nécessité d’utiliser les utilitaires libtiff (disponibles gratuitement). Lorsque Ghostscript crée une page TIFF, il notera sa version actuelle, la date et l'heure, ainsi que d'autres métadonnées à l'intérieur du fichier TIFF. Cela pourrait bloquer votre vérification MD5, car sinon des TIFF identiques pourraient porter un horodatage différent. D'où la nécessité de "normaliser" ceux-ci. Utilisez tiffinfo page-000001.tif
ou tiffdump page-000001.tif
pour voir ce que je veux dire. Vous pouviez le voir comme ça:
c:\downloads> tiffdump.exe page-000001.tif
page-000001.tif:
Magic: 0x4949 <little-endian> Version: 0x2a
Directory 0: offset 2814 (0xafe) next 0 (0)
SubFileType (254) LONG (4) 1<2>
ImageWidth (256) SHORT (3) 1<595>
ImageLength (257) SHORT (3) 1<842>
BitsPerSample (258) SHORT (3) 1<1>
Compression (259) SHORT (3) 1<4>
Photometric (262) SHORT (3) 1<0>
FillOrder (266) SHORT (3) 1<1>
StripOffsets (273) LONG (4) 8<8 341 1979 1996 2013 2030 2047 2064>
Orientation (274) SHORT (3) 1<1>
SamplesPerPixel (277) SHORT (3) 1<1>
RowsPerStrip (278) SHORT (3) 1<109>
StripByteCounts (279) LONG (4) 8<333 1638 17 17 17 17 17 13>
XResolution (282) RATIONAL (5) 1<72>
YResolution (283) RATIONAL (5) 1<72>
PlanarConfig (284) SHORT (3) 1<1>
Group4Options (293) LONG (4) 1<0>
ResolutionUnit (296) SHORT (3) 1<2>
PageNumber (297) SHORT (3) 2<0 0>
Software (305) ASCII (2) 21<GPL Ghostscript 8.71\0>
DateTime (306) ASCII (2) 20<2010:06:22 04:56:12\0>
Voici la commande pour "normaliser" les champs date + heure (qui sont marqués "306" dans mon cas) dans un exemple TIFF:
c:\downloads> tiffset -s 306 "0000:00:00 00:00:00" ex001.tif
En conséquence, le champ DateTime a maintenant été modifié:
c:\pa>tiffdump ex001.tif | findstr DateTime
DateTime (306) ASCII (2) 20<0000:00:00 00:00:00\0>
Parcourez maintenant tous vos fichiers TIFF pour normaliser tous leurs champs DateTime:
c:\downloads> for /l %i in (C:\temp\tiffs\*.tif) ^
do tiffset -s 306 "0000:00:00 00:00:00" %i
Troisième et quatrième: Exécutez md5sum.exe et triez la liste des fichiers pour trouver les doublons. Voici une ligne de commande à utiliser:
c:\downloads> md5sum.exe C:\temp\tiffs\*.tif | sort
En conséquence, vous devriez facilement voir quels fichiers / pages ont le même hachage MD5. Cela ressemblera à ceci:
c:\> md5sum.exe c:/temp/tiffs/page-0*.tif
[....]
fae9fa136c4f7ecca23b6a34d620fb02 *c:\temp\tiffs\page-000032.tif
fae9fa136c4f7ecca23b6a34d620fb02 *c:\temp\tiffs\page-000033.tif
fb5fef1732148d71bfff841c214cf836 *c:\temp\tiffs\page-000076.tif
fb5fef1732148d71bfff841c214cf836 *c:\temp\tiffs\page-000077.tif
fb86c1bdbc697eef7cb869f4e2e2957b *c:\temp\tiffs\page-000187.tif
fb86c1bdbc697eef7cb869f4e2e2957b *c:\temp\tiffs\page-000188.tif
fbb801ab3ef7ea33619132f97dcab045 *c:\temp\tiffs\page-000443.tif
fbb801ab3ef7ea33619132f97dcab045 *c:\temp\tiffs\page-000444.tif
fbc33cc0ff3e1252de1653ef2e978f94 *c:\temp\tiffs\page-000699.tif
fbc33cc0ff3e1252de1653ef2e978f94 *c:\temp\tiffs\page-000700.tif
fc3fd164e20bb707acddeabbc4e60f7e *c:\temp\tiffs\page-000899.tif
fc3fd164e20bb707acddeabbc4e60f7e *c:\temp\tiffs\page-000900.tif
[....]
Je vous laisse le soin d'automatiser cette étape.
Cinquième et sixième: Supprimez toutes les pages en double de votre PDF original. Supposons que vous souhaitiez maintenant supprimer les pages 33, 77, 188, 444, 700 et 900. Voici la pdftk.exe
commande pour cela:
c: > pdftk.exe A=12000pages.pdf ^
cat A1-32 A34-76 A78-187 A189-443 A445-699 A701-899 A901-end ^
output nonduplicates.pdf
* Edit: Je ne sais pas pourquoi j'ai suggéré le format TIFF au début - plus intelligent serait d'utiliser le format BMP. *
Si vous utilisez -sDEVICE=bmp256
et -sOutputFile=C:\temp\tiffs\page-%06d.bmp
vous n'aurez pas à traiter avec l'étape de «normalisation» que j'ai décrite ci-dessus. Le reste de la procédure ( md5sum ...
) est la même ....