web-dev-qa-db-fra.com

Comment rogner un fichier pdf de plusieurs pages (image / numérisé) (qui ne rognera pas avec pdfcrop)?

D'habitude, je suis assez content d'utiliser pdfcrop , même si la sortie recadrée consomme généralement beaucoup plus d'espace disque. Notez que le code comparable existe , ce qui résout et résout ce problème. Toutefois, si je souhaite recadrer un fichier PDF numérisé (image), j’ai l’impression que pdfcrop échoue tout simplement. J'imagine que ImageMagick est capable de faire l'affaire, éventuellement en nous rendant (--- également) de pdftk .

Je recherche un code unique efficace (un script multiligne conviendrait également ...) pour rogner un fichier PDF de haut en bas, de gauche à droite et de x cm (ou, mieux, pourtant, par abcd cm, individuellement), allant de input.pdf à output.pdf.

ps: la solution ne doit pas nécessairement impliquer ImageMagick; Je suis heureux tant que ça marche (proprement, de manière fiable et efficace) ...;)

5
nutty about natty

Le crédit total est dû à AlexG qui, accessoirement en passant a posté une solution à ce problème ici , qui, par souci d'exhaustivité et afin qu'il ne se perde pas (!), je cite ci-dessous.

La question de rognage décrite dans la man:

Exemples d'utilisation:

#default operation
pdfcrop.sh orig.pdf cropped.pdf
pdfcrop.sh -m 10 orig.pdf cropped.pdf
pdfcrop.sh -hires orig.pdf cropped.pdf

#trimming pages
pdfcrop.sh -t "10 20 30 40" orig.pdf trimmed.pdf

Contenu de pdfcrop.sh:

#!/bin/bash

function usage () {
  echo "Usage: `basename $0` [Options] <input.pdf> [<output.pdf>]"
  echo
  echo " * Removes white margins from each page in the file. (Default operation)"
  echo " * Trims page edges by given amounts. (Alternative operation)"
  echo
  echo "If only <input.pdf> is given, it is overwritten with the cropped output."
  echo
  echo "Options:"
  echo
  echo " -m \"<left> [<top> [<right> <bottom>]]\""
  echo "    adds extra margins in default operation mode. Unit is bp. A single number"
  echo "    is used for all margins, two numbers \"<left> <top>\" are applied to the"
  echo "    right and bottom margins alike."
  echo
  echo " -t \"<left> [<top> [<right> <bottom>]]\""
  echo "    trims outer page edges by the given amounts. Unit is bp. A single number"
  echo "    is used for all trims, two numbers \"<left> <top>\" are applied to the"
  echo "    right and bottom trims alike."
  echo
  echo " -hires"
  echo "    %%HiResBoundingBox is used in default operation mode."
  echo
  echo " -help"
  echo "    prints this message."
}

c=0
mar=(0 0 0 0); tri=(0 0 0 0)
bbtype=BoundingBox

while getopts m:t:h: opt
do
  case $opt
  in
    m)
    eval mar=($OPTARG)
    [[ -z "${mar[1]}" ]] && mar[1]=${mar[0]}
    [[ -z "${mar[2]}" || -z "${mar[3]}" ]] && mar[2]=${mar[0]} && mar[3]=${mar[1]}
    c=0
    ;;
    t)
    eval tri=($OPTARG)
    [[ -z "${tri[1]}" ]] && tri[1]=${tri[0]}
    [[ -z "${tri[2]}" || -z "${tri[3]}" ]] && tri[2]=${tri[0]} && tri[3]=${tri[1]}
    c=1
    ;;
    h)
    if [[ "$OPTARG" == "ires" ]]
    then
      bbtype=HiResBoundingBox
    else
      usage 1>&2; exit 0
    fi
    ;;
    \?)
    usage 1>&2; exit 1
    ;;
  esac
done
shift $((OPTIND-1))

[[ -z "$1" ]] && echo "`basename $0`: missing filename" 1>&2 && usage 1>&2 && exit 1
input=$1;output=$1;shift;
[[ -n "$1" ]] && output=$1 && shift;

(
    [[ "$c" -eq 0 ]] && gs -dNOPAUSE -q -dBATCH -sDEVICE=bbox "$input" 2>&1 | grep "%%$bbtype"
    pdftk "$input" output - uncompress
) | Perl -w -n -s -e '
  BEGIN {@m=split /\s+/, $mar; @t=split /\s+/, $tri;}
  if (/BoundingBox:\s+([\d\.\s]+\d)/) { Push @bbox, $1; next;}
  elsif (/\/MediaBox\s+\[([\d\.\s]+\d)\]/) { @mb=split /\s+/, $1; next; }
  elsif (/pdftk_PageNum\s+(\d+)/) {
    $p=$1-1;
    if($c){
      $mb[0]+=$t[0];$mb[1]+=$t[1];$mb[2]-=$t[2];$mb[3]-=$t[3];
      print "/MediaBox [", join(" ", @mb), "]\n";
    } else {
      @bb=split /\s+/, $bbox[$p];
      $bb[0]+=$mb[0];$bb[1]+=$mb[1];$bb[2]+=$mb[0];$bb[3]+=$mb[1];
      $bb[0]-=$m[0];$bb[1]-=$m[1];$bb[2]+=$m[2];$bb[3]+=$m[3];
      print "/MediaBox [", join(" ", @bb), "]\n";
    }
  }
  print;
' -- -mar="${mar[*]}" -tri="${tri[*]}" -c=$c | pdftk - output "$output" compress
3

Vous pouvez essayer anglais. C'est assez simple, mais fait le travail. C'est une application graphique cependant.

Téléchargez le fichier Zip et extrayez-le dans un dossier de votre choix et lancez-le:

Java -jar briss-0.9.jar

Pour l'installer de manière permanente et à l'échelle du système et pouvoir le démarrer de n'importe où avec juste briss, vous devez décompresser le téléchargement dans /usr/local/lib/, puis créer un fichier exécutable /usr/local/bin/briss contenant:

#!/bin/sh
Java -jar /usr/local/lib/briss-0.9/briss-0.9.jar
13
phoibos

Ceci est le meilleur et le plus facile et a une merveilleuse interface graphique: Krop

Téléchargez deb de l'auteur: http://arminstraub.com/computer/krop

Examen: http://www.hecticgeek.com/2013/08/crop-pdf-ubuntu-13-04-krop/

Edit: J'utilise krop depuis 13.10 et j'ai remarqué que les dernières versions ont commencé à prendre en charge l'ouverture d'un fichier PDF avec krop via un clic droit. J'ai également basculé vers la version instantanée depuis qu'elle est disponible et prend également en charge le clic droit, confirmé les 18.10 et 19.04. L’interface graphique n’est pas aussi colorée avec la version instantanée, mais les fonctionnalités sont les mêmes:

Sudo snap install krop
10
Consumology