Frage Wie kann ich einen Seitenbereich / einen Teil einer PDF extrahieren?


Haben Sie eine Idee, wie Sie einen Teil eines PDF-Dokuments extrahieren und als PDF speichern können? Unter OS X ist es absolut trivial, wenn Sie Vorschau verwenden. Ich habe versucht, PDF-Editor und andere Programme, aber ohne Erfolg.

Ich möchte ein Programm, wo ich den Teil, den ich will, und dann speichern Sie es als pdf mit einem einfachen Befehl wie CMD+N auf OS X. Ich möchte den extrahierten Teil im PDF-Format gespeichert werden und nicht jpeg usw.


307
2017-11-26 02:06


Ursprung


Haben Sie ImageMagick ausprobiert? - Martin Schröder
Das ist für Bitmap ich brauche etwas, das als PDF speichert! - user72469
pdfshuffler in den Repos. - Marc
pdfshuffler funktionieren in Ubuntu 14.04+ nicht mehr. Sie können immer den Druckdialog oder eine Terminal-basierte Alternative verwenden pdfseparate - Rho
@Rho Die Version direkt über installiert apt-get funktioniert immer noch gut für mich in 16.04. Vielleicht haben sie die Fehler behoben, wenn es welche gab? - xji


Antworten:


pdftk ist ein nützliches Multiplattform-Tool für den Job (pdfk Homepage).

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

Sie übergeben den Dateinamen des Haupt-PDF, dann sagen Sie, dass nur bestimmte Seiten (12-15 in diesem Beispiel) enthalten sind, und geben Sie es in eine neue Datei aus.


351
2018-04-17 15:21



+1, aber nach Andrzejs Antwort Dies kann vereinfacht werden pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. Keine Notwendigkeit für die Variable. - Sparhawk
Wenn ich die Seiten 1-10, 15 und 17 extrahieren möchte, wie schreibe ich den Befehl? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Beachten Sie, dass pdftk ist in Ubuntu 18.04 nicht verfügbar. (sehen askubuntu.com/questions/1028522/ ...) - alkamid


sehr einfach, verwenden Sie den Standard-PDF-Reader:

als Datei drucken das ist es! print menu

dann

setting new PDF


195
2017-11-14 10:25



flippin brilliant - andybleaden
Erzeugt katastrophale Ergebnisse mit Beamer-Dateien, Karten und anderen Dokumenten, die nicht dem Format der Druckerseite entsprechen. - Luís de Sousa
Dies kann dazu führen, dass die Datei viel größer ist als das Originaldokument. - dat
also "extrahiert" es den Seitenbereich nicht. Es erstellt eine neue PDF-Datei aus der alten, als ob Sie ein High-Definition-Drucker / Scanner-Paar verwendet hätten. - sylvainulg
Gut für einfache Fälle, aber unerwünschte Ergebnisse in Dokumenten mit Hervorhebungskommentaren: Die Hervorhebung wird zu 100% Deckkraft und blockiert den Text. - loved.by.Jesus


Seitenbereich - Nautilus-Skript


Überblick

Ich habe ein etwas fortgeschritteneres Skript erstellt, das auf dem Tutorial @ThiagoPonte basiert. Seine Hauptmerkmale sind

  • dass es GUI-basiert ist,
  • kompatibel mit Leerzeichen in Dateinamen,
  • und basierend auf drei verschiedenen Backends, die alle Attribute der ursprünglichen Datei beibehalten können

Bildschirmfoto

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

Bitte folge der allgemeine Installationsanweisungen für Nautilus-Skripte. Lesen Sie den Skriptkopf sorgfältig durch, da er die Installation und Verwendung des Skripts verdeutlicht.


Teilseiten - PDF Shuffler


Überblick

PDF-Shuffler ist eine kleine Python-GTK-Anwendung, die dem Benutzer hilft, PDF-Dokumente zusammenzufassen oder zu teilen und ihre Seiten mithilfe einer interaktiven und intuitiven grafischen Benutzeroberfläche zu drehen, auszuschneiden und neu anzuordnen. Es ist ein Frontend für python-pyPdf.

Installation

sudo apt-get install pdfshuffler

Verwendung

PDF-Shuffler kann einzelne PDF-Seiten zuschneiden und löschen. Sie können damit einen Seitenbereich aus einem Dokument oder sogar Teilseiten mit der Cropping-Funktion extrahieren:

enter image description here


Seitenelemente - Inkscape


Überblick

Inkscape ist ein sehr leistungsfähiger Open-Source-Vektor-Grafik-Editor. Es unterstützt eine Vielzahl von verschiedenen Formaten, einschließlich PDF-Dateien. Sie können damit Seitenelemente aus einer PDF-Datei extrahieren, ändern und speichern.

Installation

sudo apt-get install inkscape

Verwendung

1.) Öffnen Sie die PDF-Datei Ihrer Wahl mit Inkscape. Ein Importdialog erscheint. Wählen Sie die Seite aus, aus der Sie Elemente extrahieren möchten. Belassen Sie die anderen Einstellungen so, wie sie sind:

enter image description here

2.) In Inkscape klicken und ziehen, um die Elemente auszuwählen, die Sie extrahieren möchten:

enter image description here

3.) Invertieren Sie die Auswahl mit ! und löschen Sie das ausgewählte Objekt mit LÖSCHEN:

enter image description here

4.) Beschneiden Sie das Dokument auf die verbleibenden Objekte, indem Sie auf das Symbol klicken Dokumenteigenschaften Dialog mit STRG+VERSCHIEBUNG+D und Auswählen von "Dokument an Bild anpassen":

enter image description here

5.) Speichern Sie das Dokument als PDF-Datei von der Datei -> Speichern als Dialog:

6.) Wenn sich in Ihrem beschnittenen Dokument Bitmap- / Rasterbilder befinden, können Sie ihre DPI im nächsten Dialogfeld einstellen:

enter image description here

7.) Wenn Sie alle Schritte befolgt haben, haben Sie eine echte PDF-Datei erstellt, die nur aus den Objekten Ihrer Wahl besteht:

enter image description here


63
2018-04-17 15:11



Große Anstrengung. Vielen Dank! Ich verstehe, dass es nicht erlaubt, ein zu wählen Portion einer Seite, aber nur ganze Seiten. Habe ich recht? - carnendil
@carnendil: Ja, genau. Ich glaube nicht, dass Ghostscript dazu in der Lage ist. Aber Es könnte andere Lösungen geben, um dies programmatisch zu machen. Für jetzt habe ich meine Antwort mit einer alternativen (und ein wenig hackish) Lösung mit PDF-Shuffler bearbeitet. - Glutanimate
ok, ich habe eine andere Methode mit Inkscape hinzugefügt. - Glutanimate
pdfshuffler ist nicht ausreichend, wenn Sie einen Teil der PDF-Seite extrahieren möchten. Die ursprünglichen PDF-Daten der Seite bleiben in der Datei erhalten. Verwenden Sie diese Methode nicht, wenn Sie vertrauliche Daten aus einer PDF-Datei entfernen möchten. - Rob W


Speichern Sie dies als Shell-Skript, wie zB 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}

Um den Typ auszuführen:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 bezieht sich auf die Seite, die das neue PDF startet.

2) 20 bezieht sich auf die Seite, mit der das PDF enden wird.

3) MeineDatei.pdf ist die PDF-Datei, die Sie extrahieren möchten.

Die Ausgabe wäre myfile_p4_p20.pdf im selben Verzeichnis der Original-PDF-Datei.

All dies und mehr Informationen hier: Technischer Tipp


31
2018-04-16 17:40



Lass es uns einfach halten: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
und Wie lege ich die Eingabedatei fest? - Anwar
-1 für die Bash-Parametererweiterung außerhalb der doppelten Zeichenfolge. (sollte sein "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" usw. (notieren Sie die Anführungszeichen)). - Rotsor


QPDF ist toll. Verwenden Sie diese Methode, um die Seiten 1-10 zu extrahieren input.pdf und speichern Sie es als output.pdf.

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

Bitte beachte, dass input.pdf ist zweimal geschrieben.

Sie können es installieren, indem Sie Folgendes aufrufen:

apt-get install qpdf

Oder gehen Sie zum Ubuntu Apps-Verzeichnis:

Install via the software center

Es ist ein großartiges Werkzeug für die PDF-Manipulation, die sehr schnell ist, sehr wenige Abhängigkeiten hat. "Es kann Dateien verschlüsseln und linearisieren, die Interna einer PDF-Datei aufdecken und viele andere Operationen ausführen, die für Endbenutzer und PDF-Entwickler nützlich sind."

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


26
2017-09-09 07:10



Das einzige Problem, das ich dabei hatte, ist, dass immer noch alle Seiten im Inhaltsverzeichnis aufgelistet sind, obwohl die meisten entfernt wurden. Abgesehen von, vielen Dank! :) - Wilf
Tolle Software. nett - Anwar


Es gibt ein Befehlszeilen-Dienstprogramm aufgerufen pdfseparate.

Aus den Dokumenten:

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

Oder um eine einzelne Seite (in diesem Fall die erste Seite) aus der Datei sample.pdf auszuwählen:

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

20
2017-10-29 18:17



Tolles Werkzeug! viel schneller als pdftk - Anwar
Gut, aber es ist nur auf eine Seite beschränkt, und wenn Sie mehr als das wollen, erhalten Sie separate Seiten. - Ho1
Sicher, obwohl man dem obigen Befehl mit pdfunite folgen kann, um ein einzelnes Dokument zu erzeugen. - jdmcbr
Wenn Sie ein riesiges Dokument haben und alle Seiten teilen müssen, ist es sehr schnell und nützlich. - MEDVIS


pdftk (sudo apt-get install pdftk) ist eine großartige Befehlszeile für die PDF-Manipulation. Hier sind einige Beispiele von was pdftk tun können:

   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

In Ihrem Fall würde ich tun:

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

17
2017-10-29 18:23