Domanda Come posso estrarre un intervallo di pagine / una parte di un PDF?


Hai idea di come estrarre una parte di un documento PDF e salvarla come PDF? Su OS X è assolutamente banale usando Anteprima. Ho provato l'editor PDF e altri programmi, ma senza risultato.

Mi piacerebbe un programma in cui seleziono la parte che voglio e poi salvarla come pdf con un semplice comando come CMD+N su OS X. Voglio che la parte estratta sia salvata in formato PDF e non in jpeg ecc.


307
2017-11-26 02:06


origine


Hai provato ImageMagick? - Martin Schröder
Questo è per bitmap ho bisogno di qualcosa che salva come PDF! - user72469
pdfshuffler nei repository. - Marc
pdfshuffler non funziona più su Ubuntu 14.04+. È sempre possibile utilizzare la finestra di dialogo di stampa o un'alternativa basata su terminale come pdfseparate - Rho
@Rho La versione direttamente installata tramite apt-get funziona ancora bene per me nel 16.04. Forse hanno risolto i bug, se ce ne fossero alcuni? - xji


risposte:


pdftk è un utile strumento multi-piattaforma per il lavoro (pdftk homepage).

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

si passa il nome file del pdf principale, quindi si dice di includere solo determinate pagine (12-15 in questo esempio) e di inviarlo a un nuovo file.


351
2018-04-17 15:21



+1, ma come La risposta di Andrzej questo può essere semplificato a pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. Non c'è bisogno della variabile. - Sparhawk
Se voglio estrarre le pagine 1-10, 15 e 17, come scrivo il comando? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Nota che pdftk non è disponibile in Ubuntu 18.04. (vedere askubuntu.com/questions/1028522/...) - alkamid


molto semplice, usa il lettore PDF predefinito:

stampa come file. è così! print menu

poi

setting new PDF


195
2017-11-14 10:25



flippin brillante - andybleaden
Produce risultati catastrofici con file di beamer, mappe e qualsiasi altro documento non conforme al formato di pagina della stampante. - Luís de Sousa
Ciò può comportare un file con dimensioni molto maggiori rispetto al documento originale. - dat
quindi non "estrae" l'intervallo di pagine. Crea un nuovo pdf da quello vecchio, come se si usasse una coppia di stampanti / scanner ad alta definizione. - sylvainulg
Buono per casi semplici, ma risultati indesiderati nei documenti con commenti di evidenziazione: l'evidenziazione diventa opacità al 100% e blocca il testo. - loved.by.Jesus


Intervallo di pagine - Script Nautilus


Panoramica

Ho creato uno script leggermente più avanzato basato sul tutorial @ThiagoPonte collegato a. Le sue caratteristiche principali sono

  • che è basato sulla GUI,
  • compatibile con gli spazi nei nomi dei file,
  • e basato su tre diversi backend che sono in grado di preservare tutti gli attributi del file originale

Immagine dello schermo

enter image description here

Codice

#!/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

Installazione

Per favore segui il istruzioni di installazione generiche per gli script Nautilus. Assicurati di leggere attentamente l'intestazione dello script in quanto aiuterà a chiarire l'installazione e l'utilizzo dello script.


Pagine parziali - PDF Shuffler


Panoramica

PDF-Shuffler è una piccola applicazione python-gtk, che aiuta l'utente a unire o dividere documenti PDF e ruotare, ritagliare e riorganizzare le proprie pagine utilizzando un'interfaccia grafica interattiva e intuitiva. È un frontend per python-pyPdf.

Installazione

sudo apt-get install pdfshuffler

uso

PDF-Shuffler può ritagliare ed eliminare singole pagine PDF. Puoi usarlo per estrarre un intervallo di pagine da un documento o anche pagine parziali usando la funzione di ritaglio:

enter image description here


Elementi della pagina - Inkscape


Panoramica

Inkscape è un editor di grafica vettoriale open source molto potente. Supporta un'ampia gamma di formati diversi, inclusi i file PDF. Puoi usarlo per estrarre, modificare e salvare elementi di pagina da un file PDF.

Installazione

sudo apt-get install inkscape

uso

1.) Apri il file PDF di tua scelta con Inkscape. Apparirà una finestra di dialogo di importazione. Scegli la pagina da cui vuoi estrarre gli elementi. Lascia le altre impostazioni così come sono:

enter image description here

2.) In Inkscape clicca e trascina per selezionare gli elementi che vuoi estrarre:

enter image description here

3.) Invertire la selezione con ! ed elimina l'oggetto selezionato con ELIMINA:

enter image description here

4.) Ritaglia il documento sugli oggetti rimanenti accedendo al Proprietà del documento dialogo con CTRL+CAMBIO+D e selezionando "adatta documento all'immagine":

enter image description here

5.) Salva il documento come file PDF dal File -> Salva come dialogo:

6.) Se ci sono immagini bitmap / raster nel tuo documento ritagliato puoi impostare il loro DPI nella finestra di dialogo che appare dopo:

enter image description here

7.) Se hai seguito tutti i passaggi, avrai creato un vero file PDF composto solo da oggetti di tua scelta:

enter image description here


63
2018-04-17 15:11



Grande sforzo. Grazie! Capisco che non consente di selezionare a porzione di una pagina, ma solo intere pagine. Ho ragione? - carnendil
@carnendil: Sì, esattamente. Non penso che ghostscript ne sia capace. Ma ci potrebbero essere altre soluzioni là fuori per farlo a livello di programmazione. Per ora ho modificato la mia risposta con una soluzione alternativa (e un po 'hacker) usando PDF-shuffler. - Glutanimate
ok, ho aggiunto un metodo diverso usando Inkscape. - Glutanimate
pdfshuffler non è sufficiente se vuoi estrarre una parte della pagina PDF. I dati PDF originali della pagina sono ancora conservati nel file. Non utilizzare questo metodo se si desidera rimuovere dati sensibili da un file PDF. - Rob W


Salva questo come uno script di shell, come 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}

Per eseguire il tipo:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 si riferisce alla pagina che avvierà il nuovo pdf.

2) 20 si riferisce alla pagina con cui terminerà il pdf.

3) myfile.pdf è il file pdf che vuoi estrarre parti.

L'output sarebbe myfile_p4_p20.pdf nella stessa directory del file pdf originale.

Tutto questo e più informazioni qui: Suggerimento tecnico


31
2018-04-16 17:40



Facciamo in modo semplice: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
e Come posso specificare il file di input? - Anwar
-1 per fare l'espansione dei parametri bash al di fuori della stringa doppia citazione. (dovrebbe essere "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" ecc. (notare le virgolette)). - Rotsor


QPDF è grande. Usalo in questo modo per estrarre le pagine 1-10 da input.pdf e salvalo come output.pdf.

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

Si prega di notare che input.pdf è scritto due volte.

Puoi installarlo invocando:

apt-get install qpdf

Oppure, andando alla directory delle app di Ubuntu:

Install via the software center

È un ottimo strumento per la manipolazione dei PDF, che è molto veloce, ha pochissime dipendenze. "È in grado di crittografare e linearizzare i file, esporre i componenti interni di un file PDF e svolgere molte altre operazioni utili agli utenti finali e agli sviluppatori di PDF".

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


26
2017-09-09 07:10



L'unico problema che ho riscontrato è che elenca ancora tutte le pagine nel sommario, nonostante la maggior parte venga rimossa. A parte, grazie di cuore! :) - Wilf
Ottimo software. Bello - Anwar


C'è una utility a riga di comando chiamata pdfseparate.

Dai documenti:

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

Oppure, per selezionare una singola pagina (in questo caso, la prima pagina) dal file sample.pdf:

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

20
2017-10-29 18:17



ottimo strumento! molto più veloce di pdftk - Anwar
Bene, ma è limitato a una sola pagina e se ne desideri di più, otterrai pagine separate. - Ho1
Certo, sebbene si possa seguire il comando precedente con pdfunite per produrre un singolo documento. - jdmcbr
Se hai un documento enorme e hai bisogno di dividere tutte le pagine, è davvero veloce e utile. - MEDVIS


pdftk (sudo apt-get install pdftk) è anche una grande linea di comando per la manipolazione di PDF. Ecco alcuni esempi di cosa pdftk può fare:

   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

Nel tuo caso, vorrei fare:

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

17
2017-10-29 18:23





In qualsiasi sistema su cui è installata una distribuzione TeX:

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

Per esempio:

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

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


10
2017-09-01 20:18





Hai provato PDF Mod?

Puoi ad esempio .. estrarre le pagine e salvarle come pdf.

Descrizione:

PDF Mod è un semplice strumento per la modifica di documenti PDF. Può ruotare, estrarre, rimuovere
e riordinare le pagine tramite trascinamento. Più documenti possono essere combinati tramite trascinamento
e cadere. È inoltre possibile modificare il titolo, l'oggetto, l'autore e le parole chiave di un PDF
 documento usando PDF Mod.

Install via the software center

Spero che questo sia utile.

REGARS.


6
2017-11-26 02:17



Sì, in realtà l'ho provato ma NON mi consente di salvare parte di una pagina, ad es. una trama come pdf ... A meno che non vedo l'opzione. Mi permette di estrarre un'intera pagina da un documento ma non è quello che voglio - user72469
Lo uso regolarmente, ottimo strumento! ma avevo un documento con circa 170 pagine che pdfmod non poteva gestire. - loved.by.Jesus
Wow. Questo è sorprendentemente liscio. Ho gettato il mio vero libro di 512 pagine (50MiB) e ... è stato rapido. L'interfaccia utente è un gioco da ragazzi. Per un drogato CLI come me ci vuole un certo livello di interfaccia grafica per convincermi, ma questo lo farà! - sehe


Stavo cercando di fare lo stesso. Tutto quello che devi fare è:

  1. installare pdftk:

    sudo apt-get install pdftk
    
  2. se vuoi estrarre le pagine a caso:

    pdftk myoldfile.pdf cat 1 2 4 5 output mynewfile.pdf
    
  3. se vuoi estrarre un intervallo:

    pdftk myoldfile.pdf cat 1-2 4-5 output mynewfile.pdf
    

si prega di controllare la fonte per maggiori informazioni


6
2018-05-03 04:00





A quanto pare, posso farlo con imagemagick. Se non ce l'hai, installa semplicemente con:

sudo apt-get install imagemagick

Nota 1: Ho provato questo con un pdf di una pagina (sto imparando a usare imagemagick, quindi non volevo più problemi del necessario). Non so se / come funzionerà con più pagine, ma puoi estrarre una pagina di interesse con pdftk:

pdftk A=myfile.pdf cat A1 output page1.pdf

dove si indica il numero di pagina da dividere (nell'esempio sopra, A1 seleziona la prima pagina).

Nota 2: L'immagine risultante utilizzando questa procedura sarà un raster.


Apri il pdf con il comando display, che fa parte del imagemagick suite:

display file.pdf

Il mio sembrava così:

imagemagick display of a pdf
Clicca sull'immagine per vedere una versione a piena risoluzione

Ora fai clic sulla finestra e un menu si aprirà di lato. Lì, seleziona Trasformare | raccolto.

imagemagick transform>crop menu

Nella finestra principale, puoi selezionare l'area che vuoi ritagliare semplicemente trascinando il puntatore (selezione classica da angolo a angolo).

selection of area to crop
Notare il puntatore a forma di mano intorno all'immagine durante la selezione

Questa selezione può essere perfezionata prima di procedere al passaggio successivo.

Una volta che hai finito, prendi nota del piccolo rettangolo che appare nell'angolo in alto a sinistra (vedi l'immagine sopra). Mostra le dimensioni dell'area selezionata per prima (es. 281x218) e secondo le coordinate del primo angolo (ad es. +256+215).

Annotare le dimensioni dell'area selezionata; ne avrai bisogno al momento di salvare l'immagine ritagliata.

Ora, tornando al menu pop (che ora è il menu specifico "ritaglio"), fare clic sul pulsante raccolto.

imagemagick crop menu

Infine, una volta soddisfatti dei risultati del ritaglio, fare clic sul menu File | Salvare

Passare alla cartella in cui si desidera salvare il pdf ritagliato, digitare un nome, fare clic sul pulsante Formato, nella finestra "Seleziona il tipo di formato immagine" seleziona PDF e fare clic sul pulsante Selezionare. Torna alla finestra "Sfoglia e seleziona un file", fai clic sul pulsante Salvare.

imagemagick save as pdf

Prima di salvare, imagemagick chiederà di "selezionare la geometria della pagina". Qui, digiti le dimensioni dell'immagine ritagliata, usando una semplice lettera "x" per separare la larghezza e l'altezza.

imagemagick select page geometry

Ora, puoi fare tutto questo perfettamente dalla riga di comando (il comando è convert con l'opzione -crop) - sicuramente è più veloce, ma dovresti sapere in anticipo le coordinate dell'immagine che vuoi estrarre. Dai un'occhiata man convert e un esempio nella loro pagina web.


5
2018-04-19 00:54



Non conoscevo la GUI di imagemagick. Sembra interessante. Tuttavia, per favore correggimi se sbaglio, ma penso che imagemagick non possa gestire immagini vettoriali. Quindi quello che stai esportando sarà probabilmente solo un'immagine raster / bitmap. In tal caso, questo metodo equivale a prendere uno screenshot di una regione del documento. - Glutanimate
Infatti, imagemagick lavora solo immagini raster e display è solo un comando della suite. Ci sono molte interfacce per imagemagick - controlla la loro pagina web. Per le immagini vettoriali la soluzione migliore è, credo, il tuo metodo con Inkscape. - carnendil
Si consiglia di aggiungere una dichiarazione di non responsabilità nella parte superiore della risposta come precauzione per convertire la grafica da vettoriale a grafica raster. Questa proprietà rende un approccio fondamentalmente diverso. - bluenote10