Vraag Hoe kan ik een paginabereik / een deel van een PDF extraheren?


Heb je enig idee hoe je een deel van een PDF-document kunt extraheren en opslaan als PDF? Op OS X is het absoluut triviaal door Preview te gebruiken. Ik probeerde de pdf-editor en andere programma's, maar het mocht niet baten.

Ik zou graag een programma willen waarbij ik het deel selecteer dat ik wil en het dan opslaan als pdf met een eenvoudig commando zoals CMD+N op OS X. Ik wil dat het geëxtraheerde deel wordt opgeslagen in PDF-indeling en niet jpeg etc.


306
2017-11-26 02:06


oorsprong


Heb je ImageMagick geprobeerd? - Martin Schröder
Dat is voor bitmap ik heb iets nodig dat als PDF redt! - user72469
pdfshuffler in de repo's. - Marc
pdfshuffler werkt niet meer in Ubuntu 14.04+. U kunt altijd het afdrukdialoogvenster of een terminalgebaseerd alternatief gebruiken zoals pdfseparate - Rho
@Rho De versie direct geïnstalleerd via apt-get werkt nog steeds goed voor mij in 16.04. Misschien hebben ze de bugs opgelost, als er wat waren? - xji


antwoorden:


pdftk is een nuttige multi-platform tool voor de klus (pdftk startpagina).

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

je geeft de bestandsnaam van de hoofdpdf door, dan zeg je dat het alleen bepaalde pagina's moet bevatten (12-15 in dit voorbeeld) en het naar een nieuw bestand moet uitvoeren.


350
2018-04-17 15:21



+1, maar als per Andrzej's antwoord dit kan worden vereenvoudigd tot pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. De variabele is niet nodig. - Sparhawk
Als ik pagina's 1-10, 15 en 17 wil uitpakken, hoe schrijf ik het commando? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Let daar op pdftk is niet beschikbaar in Ubuntu 18.04. (zien askubuntu.com/questions/1028522/...) - alkamid


heel eenvoudig, gebruik standaard PDF-lezer:

print als bestand. dat is het! print menu

dan

setting new PDF


195
2017-11-14 10:25



flippin briljant - andybleaden
Produceert catastrofale resultaten met beamer-bestanden, kaarten en andere documenten die niet overeenstemmen met het paginaformaat van de printer. - Luís de Sousa
Dit kan resulteren in een bestand met een veel grotere omvang dan het originele document. - dat
dus "pakt" het paginabereik niet uit. Het maakt een nieuwe pdf van de oude, alsof je een high-definition printer / scanner-paar hebt gebruikt. - sylvainulg
Goed voor eenvoudige gevallen, maar ongewenste resultaten in documenten met accentuerende opmerkingen: de markering wordt 100% dekking en blokkeert de tekst. - loved.by.Jesus


Paginabereik - Nautilus-script


Overzicht

Ik heb een iets geavanceerder script gemaakt op basis van de tutorial @ThiagoPonte waarnaar is gelinkt. De belangrijkste kenmerken zijn

  • dat het gebaseerd is op GUI,
  • compatibel met spaties in bestandsnamen,
  • en gebaseerd op drie verschillende backends die in staat zijn om alle attributen van het originele bestand te behouden

screenshot

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

Installatie

Volg alstublieft de generieke installatie-instructies voor Nautilus-scripts. Zorg ervoor dat u de scriptkop aandachtig leest, omdat dit de installatie en het gebruik van het script verduidelijkt.


Gedeeltelijke pagina's - PDF Shuffler


Overzicht

PDF-Shuffler is een kleine python-gtk-toepassing, die de gebruiker helpt bij het samenvoegen of splitsen van pdf-documenten en het roteren, bijsnijden en herschikken van hun pagina's met behulp van een interactieve en intuïtieve grafische interface. Het is een frontend voor python-pyPdf.

Installatie

sudo apt-get install pdfshuffler

Gebruik

PDF-Shuffler kan afzonderlijke PDF-pagina's bijsnijden en verwijderen. U kunt het gebruiken om een ​​paginabereik uit een document of zelfs gedeeltelijke pagina's te extraheren met behulp van de bijsnijdfunctie:

enter image description here


Pagina-elementen - Inkscape


Overzicht

Inkscape is een zeer krachtige open-source vector grafische editor. Het ondersteunt een breed scala aan verschillende formaten, waaronder PDF-bestanden. U kunt het gebruiken om pagina-elementen uit een PDF-bestand te extraheren, aan te passen en op te slaan.

Installatie

sudo apt-get install inkscape

Gebruik

1.) Open het PDF-bestand van uw keuze met Inkscape. Er verschijnt een importdialoogvenster. Kies de pagina waaruit u elementen wilt extraheren. Laat de andere instellingen zoals ze zijn:

enter image description here

2.) Klik in Inkscape en sleep om het element (of elementen) te selecteren dat u wilt extraheren:

enter image description here

3.) Keer de selectie om met ! en verwijder het geselecteerde object met DELETE:

enter image description here

4.) Snijd het document bij tot de resterende objecten door de Document eigenschappen dialoog met CTRL+VERSCHUIVING+D en selecteer "fit document to image":

enter image description here

5.) Sla het document op als PDF-bestand vanuit de het dossier -> Opslaan als dialoogvenster:

6.) Als er bitmap- / rasterafbeeldingen in uw bijgesneden document zijn, kunt u hun DPI instellen in het dialoogvenster dat hierna verschijnt:

enter image description here

7.) Als u alle stappen hebt gevolgd, heeft u een echt PDF-bestand gemaakt dat alleen uit de objecten van uw keuze bestaat:

enter image description here


63
2018-04-17 15:11



Grote moeite. Bedankt! Ik begrijp dat het niet toestaat om een ​​te selecteren deel van een pagina, maar alleen hele pagina's. Heb ik gelijk? - carnendil
@carnendil: Ja, precies. Ik denk niet dat ghostscript daartoe in staat is. Maar er zijn mogelijk andere oplossingen om dit programmatisch te doen. Voor nu heb ik mijn antwoord bewerkt met een alternatieve (en een beetje hackish) oplossing met behulp van PDF-shuffler. - Glutanimate
ok, ik heb een andere methode toegevoegd met behulp van Inkscape. - Glutanimate
pdfshuffler is niet voldoende als u een deel van de PDF-pagina wilt extraheren. De oorspronkelijke PDF-gegevens van de pagina worden nog steeds bewaard in het bestand. Gebruik deze methode niet als u gevoelige gegevens uit een PDF-bestand wilt verwijderen. - Rob W


Sla dit op als een shellscript, zoals 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}

Type uitvoeren:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 verwijst naar de pagina waarmee de nieuwe pdf wordt gestart.

2) 20 verwijst naar de pagina waarmee de pdf wordt afgesloten.

3) mijnbestand.pdf is het pdf-bestand waarvan u onderdelen wilt extraheren.

De uitvoer zou myfile_p4_p20.pdf zijn in dezelfde map als het originele pdf-bestand.

Dit alles en meer informatie hier: Technische tip


31
2018-04-16 17:40



Laten we het simpel houden: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
en Hoe geef ik een invoerbestand op? - Anwar
-1 voor het uitvoeren van bash-parameteruitbreiding buiten de dubbele tekenreeks. (zou moeten zijn "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" etc. (noteer de aanhalingstekens)). - Rotsor


QPDF is geweldig. Gebruik het op deze manier om pagina's 1-10 uit te pakken input.pdf en bewaar het als output.pdf.

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

Houd er rekening mee dat input.pdf is tweemaal geschreven.

U kunt het installeren door een beroep te doen op:

apt-get install qpdf

Of door naar de Ubuntu-app-map te gaan:

Install via the software center

Het is een geweldige tool voor PDF-manipulatie, die erg snel is, maar heel weinig afhankelijkheden heeft. "Het kan bestanden coderen en lineariseren, de internals van een PDF-bestand blootleggen en vele andere bewerkingen doen die nuttig zijn voor eindgebruikers en PDF-ontwikkelaars."

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


26
2017-09-09 07:10



Het enige probleem dat ik hiermee had, is dat nog steeds alle pagina's in de inhoudsopgave worden vermeld, ondanks dat de meeste worden verwijderd. Afgezien van, fantastische dank! :) - Wilf
Geweldige software. Leuk - Anwar


Er is een commandoregelhulpprogramma genaamd pdfseparate.

Van de documenten:

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

Of om één pagina (in dit geval de eerste pagina) te selecteren uit het bestand sample.pdf:

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

20
2017-10-29 18:17



geweldige tool! veel sneller dan pdftk - Anwar
Goed, maar het is slechts beperkt tot één pagina, en als u meer wilt, krijgt u afzonderlijke pagina's. - Ho1
Natuurlijk, hoewel men het bovenstaande commando met pdfunite kan volgen om een ​​enkel document te produceren. - jdmcbr
Als je een enorm document hebt en alle pagina's moet opsplitsen, is het echt snel en handig. - MEDVIS


pdftk (sudo apt-get install pdftk) is ook een geweldige opdrachtregel voor PDF-bewerking. Hier zijn enkele voorbeelden van wat pdftk kan doen:

   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 jouw geval zou ik doen:

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

17
2017-10-29 18:23