From 27d57c30050d02cd31f377fd86a72a105cd83ee8 Mon Sep 17 00:00:00 2001 From: Benjamin VAUDOUR Date: Mon, 13 Dec 2021 16:48:17 +0000 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20epdf=20info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aliases/qpdf.elv | 152 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 2 deletions(-) diff --git a/aliases/qpdf.elv b/aliases/qpdf.elv index a5572ef..fdf2c48 100644 --- a/aliases/qpdf.elv +++ b/aliases/qpdf.elv @@ -1,3 +1,5 @@ +use math +use path use re use str @@ -240,7 +242,36 @@ fn zip {|@args| } fn unzip {|@args| - echo '' + var l = (- (count $args) 1) + if (< $l 2) { + fail 'unzip doit contenir au moins 3 paramètres' + } + var mod = $args[0] + var out = $args[$l] + -must-not-exist $out + + var sel tmp = [] [] + try { + set sel tmp = (-parse-all $args[1..$l]) + var t = (-make-tmp) + -merge $sel $t + set @tmp = $@tmp $t + var @sels = (range $mod | put []) + var end = ($cmd --show-npages $t) + range $end | each {|i| + var m = (% $i $mod) + set sel[$m] = (+ $i 1) + } + mkdir $out + range $mod | each {|i| + var @pr = (str:join ',' $@sels[$i]) + $cmd --empty --pages $t $@pr -- $out'/'(+ $i 1)'.pdf' + } + } finally { + if (> (count $tmp) 0) { + rm -f $@tmp + } + } } fn decrypt {|@args| @@ -272,8 +303,125 @@ fn help {|@args| cat $E:HOME/.config/elvish/aliases/qpdf.help } +fn -date {|raw| + var y m d = $raw[2..6] $raw[6..8] $raw[8..10] + var h n s = $raw[10..12] $raw[12..14] $raw[14..16] + var tz @_ = (str:split "'" $raw[16..]) + var date = (printf ^ + '%s-%s-%sT%s:%s:%s%s' ^ + $y $m $d ^ + $h $n $s ^ + $tz) + date --date $date +} + +fn -pts2cm {|v| + / (math:round (* $v 3.52778)) 100 +} + +fn -size {|size| + var u = 0 + var m = [ + &10=Kio + &20=Mio + &30=Gio + ] + while (< $u 30) { + var p = (math:pow 2 (+ $u 10)) + if (< $size $p) { + break + } + set u = (to-string (+ $u 10)) + } + if (== $u 0) { + put $size + } else { + var p = (math:pow 2 (+ $u 10)) + var e = (/ $size $p) + printf '%.1f%s' $e $m[$u] + } +} + +fn -b2str {|b| + if $b { + put 'Oui' + } else { + put 'Non' + } +} + +fn -props {|input json| + var objects = $json[objects] + var trailer = $objects[trailer] + var iid = $trailer[/Info] + var rid = $trailer[/Root] + var info = $objects[$iid] + var root = $objects[$rid] + var pages = $objects[$root[/Pages]] + var p1 = $objects[$pages[/Kids][0]][/MediaBox] + + var w = (-pts2cm $p1[2]) + var h = (-pts2cm $p1[3]) + var layout = 'Portrait' + if (> $w $h) { + set layout = 'Paysage' + } + + var props = [ + &path=(path:abs $input) + &fsize=(-size (stat -c '%s' $input)) + &version='' + &psize=(printf '%sx%s cm (%s)' $w $h $layout) + &pages=$pages[/Count] + &title='' + &subject='' + &author='' + &producer=$info[/Producer] + &creator=$info[/Creator] + &cdate=(-date $info[/CreationDate]) + &mdate='' + &acroform=(-b2str $json[acroform][hasacroform]) + &encrypted=(-b2str $json[encrypt][encrypted]) + ] + + #@TODO: version pdf + if (has-key $info '/Title') { + set props[title] = $info[/Title] + } + if (has-key $info '/Subject') { + set props[subject] = $info[/Subject] + } + if (has-key $info '/Author') { + set props[author] = $info[/Author] + } + if (has-key $info '/ModDate') { + set props[mdate] = (-date $info[/ModDate]) + } + + put $props +} + fn info {|@args| - echo '' + var input = $args[0] + var json = ($cmd --json $input | from-json) + var props = (-props $input $json) + + echo ' Chemin: '$props[path] + echo ' Taille: '$props[fsize] + echo ' Version PDF: '$props[version] + echo ' Taille des pages: '$props[psize] + echo ' Nombre de pages: '$props[pages] + echo '............................................' + echo ' Titre: '$props[title] + echo ' Sujet: '$props[subject] + echo ' Auteur: '$props[author] + echo ' Créateur: '$props[creator] + echo ' Producteur: '$props[producer] + echo ' Date de création: '$props[cdate] + echo ' Date de modification: '$props[mdate] + echo '............................................' + echo ' Chiffré: '$props[encrypted] + echo ' Acroform: '$props[acroform] } edit:add-var epdf~ {|action @args|