DeepPDF URL

Encore à propos des PDFs. Besoin d’ouvrir dans un browser avec des fonctions en plus. Il y a le basique pour les destinations données "url/fichier.pdf#nom", et aussi le « url/fichier.pdf#page=21 » qui sont assez standards. (A noter que pdfinfo -dests fichier.pdf permet d’automatiser la recherche des destinations nommées dans un PDF.

Dans le contexte d’un moteur de recherche, je voulais aller plus loin avec « url/fichier.pdf#search=emprise » et cela fonctionne bien avec Firefox et mais pas sur chrome et ses dérivés. J’ai fini par comprendre que c’était lié au composant utilisé par ces browsers. Ouf, il suffit d’installer un add-on qui se base sur PDF.js, comme nativement avec Firefox, comme PDF Viewer. Pas encore trouvé de solution pour Safari

Youpi : https://codes.droit.org/PDF/Code%20civil.pdf#search=emprise

A noter que PDF.js tel que dans Firefox (ou DiversChromes avec le viewer en question) permet des choses interdites par d’autres contextes. Ainsi, car PDF.js est un citoyen libre, il me sert à redistiller des fichiers en contournant les blocages tels que l’interdiction d’imprimer: Au lieu de faire des screenshots (ou des copier/coller avec Word !!!) pour pouvoir distribuer un fichier librement, il suffit de l’ouvrir dans un lecteur basé sur PDF.js puis de l’imprimer aux format PDF pour le redistiller de manière libérale.Et hop.

UniteThePages

Besoin de réunir des PDFs en un seul, pas vraiment compliqué avec pdfunite. Excellent. Dans mon cas, besoin un peu plus sophistiqué car besoin d’introduire des signets afin d’avoir un document plus agréable à consulter, d’où ce script.

Script en perl mais dépendances pour manipuler les fichiers PDF, à savoir pdfinfo, pdfunite (brew install Doppler sur Mac et apt install poppler-utils sur linux) et enfin ghostscript. Pas besoin de modules perl spécifiques.

#/usr/bin/perl
open(STRU,'>','merger.txt');
$cursor = 1;
foreach $af (@ARGV) {
if(-e $af) {
$ninfo = pdfinfo "$af";
my %inf;
foreach $lee (split(/\n/g,$ninfo)) {
if($lee =~ /^(.?)\:[\s\t]+(\w.)/) {
$inf{$1} = $2;
}
}
$tito = $inf{'Title'};
$tito = $af unless($tito);
if($inf{'Pages'} =~ /\d+/) {
print STRU "[/Page $cursor /Title ($tito) /OUT pdfmark\n";
$cursor += $inf{'Pages'};
}
}
}
close(STRU);
$units = join(' ',map { "\"$_\"" } @ARGV);
pdfunite $units merger.pdf;
print gs -sDEVICE=pdfwrite -q -dBATCH -dNOPAUSE -sOutputFile=Merged.pdf -dPDFSETTINGS=/prepress merger.txt -f merger.pdf;

unlink('merger.txt');
unlink('merger.pdf');

Simple et efficace. Peace.

Perl Image::ExifTool

Je le mets ici car j’ai un peu trimé pour trouver les infos nécessaires.

ExifTool marche parfaitement mais ne pas oublier d’aller voir sur https://metacpan.org/pod/Image::ExifTool#DESCRIPTION que le type d’accès qu’offre le module en fonction du type fichier que vous visez (par example MP3 en lecture, PDF en compl<et).

#!/usr/bin/perl
use Image::ExifTool;
$exifTool = new Image::ExifTool;
$exifTool->ExtractInfo($ARGV[0]);
if ($ARGV[2]) {
$val = $exifTool->GetValue($ARGV[1],'ValueConv');
if (ref $val eq 'ARRAY') {
@values = split(/,\s*/g,$ARGV[2]);
$exifTool->SetNewValue($ARGV[1] => \@values, { Replace=>1, AddValue => 2 });
} else {
$exifTool->SetNewValue($ARGV[1],[$ARGV[2]]);
}
$exifTool->WriteInfo($ARGV[0]);
}
$exifTool->ExtractInfo($ARGV[0]);
foreach $tag (grep { !($_ =~ /\s(1)$/) } sort $exifTool->GetFoundTags()) {
$tt = $tag;
$tt .= ' (1)' if (grep { $_ eq $tt.' (1)'} $exifTool->GetFoundTags());
printf("%-21s : %s\n",$tag,$exifTool->GetValue($tt));
}

Notes: https://exiftool.org/ExifTool.html