Question Comment puis-je extraire une plage de pages / une partie d'un PDF?


Avez-vous une idée de comment extraire une partie d'un document PDF et l'enregistrer au format PDF? Sous OS X, il est absolument trivial en utilisant Preview. J'ai essayé l'éditeur de PDF et d'autres programmes mais en vain.

Je voudrais un programme où je sélectionne la partie que je veux et puis l'enregistrer en pdf avec une commande simple comme CMD+N sur OS X. Je souhaite que la partie extraite soit enregistrée au format PDF et non jpeg, etc.


306
2017-11-26 02:06


origine


Avez-vous essayé ImageMagick? - Martin Schröder
C'est pour bitmap j'ai besoin de quelque chose qui enregistre en PDF! - user72469
pdfshuffler dans les pensions - Marc
pdfshuffler ne fonctionnent plus dans Ubuntu 14.04+. Vous pouvez toujours utiliser la boîte de dialogue d'impression ou une alternative basée sur un terminal comme pdfseparate - Rho
@Rho La version directement installée via apt-get fonctionne toujours bien pour moi en 16.04. Peut-être qu'ils ont réparé les bugs, s'il y en avait? - xji


Réponses:


pdftk est un outil multi-plateforme utile pour le travail (pdftk page d'accueil).

pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf

vous transmettez le nom de fichier du pdf principal, puis vous lui dites d'inclure uniquement certaines pages (12-15 dans cet exemple) et de le sortir dans un nouveau fichier.


350
2018-04-17 15:21



+1, mais selon La réponse d'Andrzej cela peut être simplifié à pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. Pas besoin de la variable. - Sparhawk
Si je veux extraire les pages 1-10, 15 et 17, comment puis-je écrire la commande? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Notez que pdftk n'est pas disponible dans Ubuntu 18.04. (voir askubuntu.com/questions/1028522/…) - alkamid


Très simple, utilisez le lecteur PDF par défaut:

imprimer en fichier c'est ça! print menu

puis

setting new PDF


195
2017-11-14 10:25



flippin brillant - andybleaden
Produit des résultats catastrophiques avec des fichiers de beamer, des cartes et tout autre document non conforme au format de page de l'imprimante. - Luís de Sousa
Cela peut entraîner un fichier avec une taille beaucoup plus grande que le document d'origine. - dat
ainsi, il ne "extrait" pas la plage de pages. Il crée un nouveau pdf à partir de l'ancien, comme si vous utilisiez une paire imprimante / scanner haute définition. - sylvainulg
Bon pour les cas simples, mais les résultats indésirables dans les documents avec des commentaires en surbrillance: la mise en évidence devient 100% d'opacité et bloque le texte. - loved.by.Jesus


Plage de pages - script Nautilus


Vue d'ensemble

J'ai créé un script légèrement plus avancé basé sur le tutoriel @ThiagoPonte lié à. Ses principales caractéristiques sont

  • que c'est basé sur une interface graphique,
  • compatible avec les espaces dans les noms de fichiers,
  • et basé sur trois moteurs différents capables de préserver tous les attributs du fichier d'origine

Capture d'écran

enter image description here

Code

#!/bin/bash
#
# TITLE:        PDFextract
#
# AUTHOR:       (c) 2013-2015 Glutanimate (https://github.com/Glutanimate)
#
# VERSION:      0.2
#
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# 
# OVERVIEW:     PDFextract is a simple PDF extraction script based on Ghostscript/qpdf/cpdf.
#               It provides a simple way to extract a page range from a PDF document and is meant
#               to be used as a file manager script/addon (e.g. Nautilus script).
#
# FEATURES:     - simple GUI based on YAD, an advanced Zenity fork.
#               - preserves _all_ attributes of your original PDF file and does not compress 
#                 embedded images further than they are.      
#               - can choose from three different backends: ghostscript, qpdf, cpdf
#
# DEPENDENCIES: ghostscript/qpdf/cpdf poppler-utils yad libnotify-bin
#                         
#               You need to install at least one of the three backends supported by this script.
#
#               - ghostscript, qpdf, poppler-utils, and libnotify-bin are available via 
#                 the standard Ubuntu repositories
#               - cpdf is a commercial CLI PDF toolkit that is free for personal use.
#                 It can be downloaded here: https://github.com/coherentgraphics/cpdf-binaries
#               - yad can be installed from the webupd8 PPA with the following command:
#                 sudo add-apt-repository ppa:webupd8team/y-ppa-manager && apt-get update && apt-get install yad
#
# NOTES:        Here is a quick comparison of the advantages and disadvantages of each backend:
#
#                               speed     metadata preservation     content preservation        license
#               ghostscript:     --               ++                         ++               open-source
#               cpdf:             -               ++                         ++               proprietary
#               qpdf:            ++                +                         ++               open-source
#
#               Results might vary depending on the document and the version of the tool in question.
#
# INSTALLATION: https://askubuntu.com/a/236415
#
# This script was inspired by Kurt Pfeifle's PDF extraction script 
# (http://www.linuxjournal.com/content/tech-tip-extract-pages-pdf)
#
# Originally posted on askubuntu
# (https://askubuntu.com/a/282453)

# Variables

DOCUMENT="$1"
BACKENDSELECTION="^qpdf!ghostscript!cpdf"

# Functions

check_input(){
  if [[ -z "$1" ]]; then
    notify "Error: No input file selected."
    exit 1
  elif [[ ! "$(file -ib "$1")" == *application/pdf* ]]; then
    notify "Error: Not a valid PDF file."
    exit 1
  fi
}

check_deps () {
  for i in "$@"; do
    type "$i" > /dev/null 2>&1 
    if [[ "$?" != "0" ]]; then
      MissingDeps+="$i"
    fi
  done
}

ghostscriptextract(){
  gs -dFirstPage="$STARTPAGE "-dLastPage="$STOPPAGE" -sOutputFile="$OUTFILE" -dSAFER -dNOPAUSE -dBATCH -dPDFSETTING=/default -sDEVICE=pdfwrite -dCompressFonts=true -c \
  ".setpdfwrite << /EncodeColorImages true /DownsampleMonoImages false /SubsetFonts true /ASCII85EncodePages false /DefaultRenderingIntent /Default /ColorConversionStrategy \
  /LeaveColorUnchanged /MonoImageDownsampleThreshold 1.5 /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /GrayACSImageDict \
  << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /PreserveOverprintSettings false /MonoImageResolution 300 /MonoImageFilter /FlateEncode \
  /GrayImageResolution 300 /LockDistillerParams false /EncodeGrayImages true /MaxSubsetPCT 100 /GrayImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor \
  0.4 /Blend 1 >> /ColorImageFilter /FlateEncode /EmbedAllFonts true /UCRandBGInfo /Remove /AutoRotatePages /PageByPage /ColorImageResolution 300 /ColorImageDict << \
  /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.4 /Blend 1 >> /CompatibilityLevel 1.7 /EncodeMonoImages true /GrayImageDownsampleThreshold 1.5 \
  /AutoFilterGrayImages false /GrayImageFilter /FlateEncode /DownsampleGrayImages false /AutoFilterColorImages false /DownsampleColorImages false /CompressPages true \
  /ColorImageDownsampleThreshold 1.5 /PreserveHalftoneInfo false >> setdistillerparams" -f "$DOCUMENT"
}

cpdfextract(){
  cpdf "$DOCUMENT" "$STARTPAGE-$STOPPAGE" -o "$OUTFILE"
}

qpdfextract(){
  qpdf --linearize "$DOCUMENT" --pages "$DOCUMENT" "$STARTPAGE-$STOPPAGE" -- "$OUTFILE"
  echo "$OUTFILE"
  return 0 # even benign qpdf warnings produce error codes, so we suppress them
}

notify(){
  echo "$1"
  notify-send -i application-pdf "PDFextract" "$1"
}

dialog_warning(){
  echo "$1"
  yad --center --image dialog-warning \
  --title "PDFExtract Warning" \
  --text "$1" \
  --button="Try again:0" \
  --button="Exit:1"

  [[ "$?" != "0" ]] && exit 0
}

dialog_settings(){
  PAGECOUNT=$(pdfinfo "$DOCUMENT" | grep Pages | sed 's/[^0-9]*//') #determine page count

  SETTINGS=($(\
      yad --form --width 300 --center \
          --window-icon application-pdf --image application-pdf \
          --separator=" " --title="PDFextract"\
          --text "Please choose the page range and backend"\
          --field="Start:NUM" 1[!1..$PAGECOUNT[!1]] --field="End:NUM" $PAGECOUNT[!1..$PAGECOUNT[!1]] \
          --field="Backend":CB "$BACKENDSELECTION" \
          --button="gtk-ok:0" --button="gtk-cancel:1"\
      ))

  SETTINGSRET="$?"

  [[ "$SETTINGSRET" != "0" ]] && exit 1

  STARTPAGE=$(printf %.0f ${SETTINGS[0]}) #round numbers and store array in variables
  STOPPAGE=$(printf %.0f ${SETTINGS[1]})
  BACKEND="${SETTINGS[2]}"
  EXTRACTOR="${BACKEND}extract"

  check_deps "$BACKEND"

  if [[ -n "$MissingDeps" ]]; then
    dialog_warning "Error, missing dependency: $MissingDeps"
    unset MissingDeps
    dialog_settings
    return
  fi

  if [[ "$STARTPAGE" -gt "$STOPPAGE" ]]; then 
    dialog_warning "<b>   Start page higher than stop page.   </b>"
    dialog_settings
    return
  fi

  OUTFILE="${DOCUMENT%.pdf} (p${STARTPAGE}-p${STOPPAGE}).pdf"
}

extract_pages(){
  $EXTRACTOR
  EXTRACTORRET="$?"
  if [[ "$EXTRACTORRET" = "0" ]]; then
    notify "Pages $STARTPAGE to $STOPPAGE succesfully extracted."
  else
    notify "There has been an error. Please check the CLI output."
  fi
}


# Main

check_input "$1"
dialog_settings
extract_pages

Installation

Veuillez suivre le instructions d'installation génériques pour les scripts Nautilus. Assurez-vous de lire attentivement l'en-tête du script, car cela aidera à clarifier l'installation et l'utilisation du script.


Pages partielles - PDF Shuffler


Vue d'ensemble

PDF-Shuffler est une petite application python-gtk qui permet à l'utilisateur de fusionner ou de diviser des documents PDF et de faire pivoter, recadrer et réorganiser leurs pages à l'aide d'une interface graphique interactive et intuitive. C'est une interface pour python-pyPdf.

Installation

sudo apt-get install pdfshuffler

Usage

PDF-Shuffler peut recadrer et supprimer des pages PDF uniques. Vous pouvez l'utiliser pour extraire une plage de pages d'un document ou même des pages partielles en utilisant la fonction de recadrage:

enter image description here


Éléments de la page - Inkscape


Vue d'ensemble

Inkscape est un éditeur de graphiques vectoriels open source très puissant. Il prend en charge un large éventail de formats différents, y compris les fichiers PDF. Vous pouvez l'utiliser pour extraire, modifier et enregistrer des éléments de page à partir d'un fichier PDF.

Installation

sudo apt-get install inkscape

Usage

1.) Ouvrez le fichier PDF de votre choix avec Inkscape. Une boîte de dialogue d'importation apparaîtra. Choisissez la page dont vous souhaitez extraire les éléments. Laissez les autres paramètres tels qu'ils sont:

enter image description here

2.) Dans Inkscape, cliquez et faites glisser pour sélectionner le ou les éléments à extraire:

enter image description here

3.) Inverser la sélection avec ! et supprimer l'objet sélectionné avec EFFACER:

enter image description here

4.) Recadrer le document sur les objets restants en accédant à la Propriétés du document dialogue avec CTRL+DÉCALAGE+ et en sélectionnant "ajuster le document à l'image":

enter image description here

5.) Enregistrez le document sous forme de fichier PDF à partir du Fichier -> Enregistrer sous dialogue:

6.) Si votre document rogné contient des images bitmap / raster, vous pouvez définir leur DPI dans la boîte de dialogue qui apparaît ensuite:

enter image description here

7.) Si vous avez suivi toutes les étapes, vous aurez produit un vrai fichier PDF composé uniquement des objets de votre choix:

enter image description here


63
2018-04-17 15:11



Grand effort. Merci! Je comprends que cela ne permet pas de sélectionner un portion d'une page, mais seulement des pages entières. Ai-je raison? - carnendil
@carnendil: Oui, exactement. Je ne pense pas que Ghostscript soit capable de ça. Mais il pourrait y avoir d'autres solutions pour le faire par programmation. Pour l'instant j'ai édité ma réponse avec une solution alternative (et un peu piratée) utilisant PDF-shuffler. - Glutanimate
ok, j'ai ajouté une méthode différente avec Inkscape. - Glutanimate
pdfshuffler n'est pas suffisant si vous souhaitez extraire une partie de la page PDF. Les données PDF d'origine de la page sont toujours conservées dans le fichier. N'utilisez pas cette méthode si vous souhaitez supprimer des données sensibles d'un fichier PDF. - Rob W


Enregistrez ceci en tant que script shell, comme pdfextractor.sh:

#!/bin/bash
# this function uses 3 arguments:
#     $1 is the first page of the range to extract
#     $2 is the last page of the range to extract
#     $3 is the input file
#     output file will be named "inputfile_pXX-pYY.pdf"
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER \
   -dFirstPage=${1} \
   -dLastPage=${2} \
   -sOutputFile=${3%.pdf}_p${1}-p${2}.pdf \
   ${3}

Pour exécuter le type:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 se réfère à la page, il va commencer le nouveau pdf.

2) 20 se réfère à la page avec laquelle il terminera le pdf.

3) myfile.pdf est le fichier pdf que vous voulez extraire des parties.

Le résultat serait myfile_p4_p20.pdf dans le même répertoire que le fichier pdf original.

Tout cela et plus d'informations ici: Conseil technique


31
2018-04-16 17:40



Restons simple: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
et comment spécifier un fichier d'entrée? - Anwar
-1 pour effectuer l'extension du paramètre bash en dehors de la chaîne entre guillemets. (devrait être "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" etc. (notez les guillemets)). - Rotsor


QPDF c'est génial Utilisez-le de cette façon pour extraire les pages 1-10 de input.pdf et l'enregistrer comme output.pdf.

qpdf --pages input.pdf 1-10 -- input.pdf output.pdf

S'il vous plaît noter que input.pdf est écrit deux fois

Vous pouvez l'installer en appelant:

apt-get install qpdf

Ou, en allant dans le répertoire des applications Ubuntu:

Install via the software center

C'est un excellent outil pour la manipulation de fichiers PDF, qui est très rapide, avec très peu de dépendances. "Il peut chiffrer et linéariser des fichiers, exposer les éléments internes d’un fichier PDF et effectuer de nombreuses autres opérations utiles aux utilisateurs finaux et aux développeurs de PDF."

http://sourceforge.net/projects/qpdf/


26
2017-09-09 07:10



Le seul problème que j'ai avec cela est qu'il répertorie toujours toutes les pages de la table des matières, bien que la plupart soient supprimées. En dehors de ça, merci! :) - Wilf
Bon logiciel Agréable - Anwar


Il y a un utilitaire de ligne de commande appelé pdfseparate.

De la documentation:

pdfseparate sample.pdf sample-%d.pdf

extracts  all pages from sample.pdf, if i.e. sample.pdf has 3 pages, it
   produces

sample-1.pdf, sample-2.pdf, sample-3.pdf

Ou, pour sélectionner une seule page (dans ce cas, la première page) du fichier sample.pdf:

pdfseparate -f 1 -l 1 sample.pdf sample-1.pdf

20
2017-10-29 18:17



excellent outil! beaucoup plus rapide que pdftk - Anwar
Bien, mais il est limité à une seule page, et si vous voulez plus que cela, vous obtiendrez des pages séparées. - Ho1
Bien sûr, bien que l'on puisse suivre la commande ci-dessus avec pdfunite pour produire un seul document. - jdmcbr
Si vous avez un document volumineux et que vous devez diviser toutes les pages, il est vraiment rapide et utile. - MEDVIS


pdftk (sudo apt-get install pdftk) est une excellente ligne de commande pour la manipulation de fichiers PDF. Voici quelques exemples de quoi pdftk peut faire:

   Collate scanned pages
     pdftk A=even.pdf B=odd.pdf shuffle A B output collated.pdf
     or if odd.pdf is in reverse order:
     pdftk A=even.pdf B=odd.pdf shuffle A Bend-1 output collated.pdf

   Join in1.pdf and in2.pdf into a new PDF, out1.pdf
     pdftk in1.pdf in2.pdf cat output out1.pdf
     or (using handles):
     pdftk A=in1.pdf B=in2.pdf cat A B output out1.pdf
     or (using wildcards):
     pdftk *.pdf cat output combined.pdf

   Remove page 13 from in1.pdf to create out1.pdf
     pdftk in.pdf cat 1-12 14-end output out1.pdf
     or:
     pdftk A=in1.pdf cat A1-12 A14-end output out1.pdf

   Burst a single PDF document into pages and dump its data to
   doc_data.txt
     pdftk in.pdf burst

   Rotate the first PDF page to 90 degrees clockwise
     pdftk in.pdf cat 1east 2-end output out.pdf

   Rotate an entire PDF document to 180 degrees
     pdftk in.pdf cat 1-endsouth output out.pdf

Dans votre cas, je le ferais:

     pdftk A=input.pdf cat A<page_range> output output.pdf

17
2017-10-29 18:23





Dans tout système où une distribution TeX est installée:

pdfjam <input file> <page ranges> -o <output file>

Par exemple:

pdfjam original.pdf 5-10 -o out.pdf

Voir https://tex.stackexchange.com/a/79626/8666


10
2017-09-01 20:18