Pertanyaan Bagaimana saya bisa mengekstrak rentang halaman / bagian dari PDF?


Apakah Anda tahu cara mengekstrak bagian dari dokumen PDF dan menyimpannya sebagai PDF? Pada OS X itu benar-benar sepele dengan menggunakan Preview. Saya mencoba editor PDF dan program lain tetapi tidak berhasil.

Saya ingin program di mana saya memilih bagian yang saya inginkan dan kemudian menyimpannya sebagai pdf dengan perintah sederhana seperti CMD+N di OS X. Saya ingin bagian yang diekstrak disimpan dalam format PDF dan bukan jpeg, dll.


306
2017-11-26 02:06


asal


Apakah Anda mencoba ImageMagick? - Martin Schröder
Itu untuk bitmap saya butuh sesuatu yang menyimpan sebagai PDF! - user72469
pdfshuffler di repo. - Marc
pdfshuffler tidak berfungsi lagi di Ubuntu 14.04+. Anda selalu dapat menggunakan dialog cetak atau alternatif berbasis terminal seperti pdfseparate - Rho
@Rho Versi langsung dipasang via apt-get masih berfungsi dengan baik untuk saya di 16.04. Mungkin mereka memperbaiki bug, jika ada beberapa? - xji


Jawaban:


pdftk adalah alat multi-platform yang berguna untuk pekerjaan itu (homepage pdftk).

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

Anda meneruskan nama file pdf utama, kemudian Anda mengatakannya untuk hanya menyertakan halaman tertentu (12-15 dalam contoh ini) dan menampilkannya ke file baru.


350
2018-04-17 15:21



+1, tetapi sesuai Jawaban Andrzej ini dapat disederhanakan menjadi pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf. Tidak perlu untuk variabel. - Sparhawk
Jika saya ingin mengekstrak halaman 1-10, 15, dan 17, bagaimana cara menulis perintah? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Perhatikan itu pdftk tidak tersedia di Ubuntu 18.04. (Lihat askubuntu.com/questions/1028522/…) - alkamid


sangat sederhana, gunakan pembaca PDF standar:

cetak sebagai file. hanya itu saja! print menu

kemudian

setting new PDF


195
2017-11-14 10:25



flippin brilian - andybleaden
Menghasilkan hasil bencana dengan file beamer, peta dan dokumen lain yang tidak sesuai dengan format halaman printer. - Luís de Sousa
Ini dapat menghasilkan file dengan ukuran yang jauh lebih besar daripada dokumen asli. - dat
sehingga tidak "mengekstrak" rentang halaman. Ini menciptakan pdf baru dari yang lama, seolah-olah Anda menggunakan pasangan printer / scanner definisi tinggi. - sylvainulg
Bagus untuk kasus sederhana, tetapi hasil yang tidak diinginkan dalam dokumen dengan sorotan komentar: sorotan menjadi 100% opasitas dan memblokir teks. - loved.by.Jesus


Rentang halaman - skrip Nautilus


Ikhtisar

Saya membuat skrip yang sedikit lebih maju berdasarkan pada tutorial @ThiagoPonte yang ditautkan. Fitur utamanya adalah

  • bahwa itu berbasis GUI,
  • kompatibel dengan spasi dalam nama file,
  • dan berdasarkan tiga backend berbeda yang mampu menjaga semua atribut dari file asli

Screenshot

enter image description here

Kode

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

Instalasi

Silakan ikuti instruksi instalasi generik untuk skrip Nautilus. Pastikan untuk membaca tajuk skrip dengan hati-hati karena ini akan membantu memperjelas instalasi dan penggunaan skrip.


Halaman parsial - PDF Shuffler


Ikhtisar

PDF-Shuffler adalah aplikasi python-gtk kecil, yang membantu pengguna untuk menggabungkan atau membagi dokumen pdf dan memutar, memotong dan mengatur ulang halaman mereka menggunakan antarmuka grafis interaktif dan intuitif. Ini adalah frontend untuk python-pyPdf.

Instalasi

sudo apt-get install pdfshuffler

Pemakaian

PDF-Shuffler dapat memangkas dan menghapus satu halaman PDF. Anda dapat menggunakannya untuk mengekstrak rentang halaman dari dokumen atau bahkan sebagian halaman menggunakan fungsi pemangkasan:

enter image description here


Elemen halaman - Inkscape


Ikhtisar

Inkscape adalah editor grafis vektor sumber terbuka yang sangat kuat. Mendukung berbagai format yang berbeda, termasuk file PDF. Anda dapat menggunakannya untuk mengekstrak, memodifikasi, dan menyimpan elemen halaman dari file PDF.

Instalasi

sudo apt-get install inkscape

Pemakaian

1.) Buka file PDF pilihan Anda dengan Inkscape. Dialog impor akan muncul. Pilih halaman yang ingin Anda ekstrak elemennya. Biarkan pengaturan lainnya sebagaimana adanya:

enter image description here

2.) Di Inkscape klik dan seret untuk memilih elemen yang ingin Anda ekstrak:

enter image description here

3.) Balikkan seleksi dengan ! dan hapus objek yang dipilih dengan MENGHAPUS:

enter image description here

4.) Pangkas dokumen ke objek yang tersisa dengan mengakses Properti Dokumen dialog dengan CTRL+BERGESER+D dan memilih "muat dokumen ke gambar":

enter image description here

5.) Simpan dokumen sebagai file PDF dari Mengajukan -> Simpan sebagai dialog:

6.) Jika ada gambar bitmap / raster dalam dokumen yang Anda krop, Anda dapat mengatur DPI mereka di dialog yang muncul berikutnya:

enter image description here

7.) Jika Anda mengikuti semua langkah Anda akan menghasilkan file PDF yang benar yang hanya terdiri dari objek pilihan Anda:

enter image description here


63
2018-04-17 15:11



Usaha yang bagus. Terima kasih! Saya mengerti bahwa itu tidak memungkinkan untuk memilih bagian halaman, tetapi hanya seluruh halaman. Apakah saya benar? - carnendil
@carnendil: Ya, tepatnya. Saya tidak berpikir ghostscript mampu melakukan itu. Tapi mungkin ada solusi lain di luar sana untuk melakukan hal ini secara terprogram. Untuk saat ini saya telah mengedit jawaban saya dengan solusi alternatif (dan sedikit hackish) menggunakan PDF-shuffler. - Glutanimate
ok, saya menambahkan metode lain menggunakan Inkscape. - Glutanimate
pdfshuffler tidak cukup jika Anda ingin mengambil bagian dari halaman PDF. Data PDF asli dari halaman tersebut masih disimpan dalam file. Jangan gunakan metode ini jika Anda ingin menghapus data sensitif dari file PDF. - Rob W


Simpan ini sebagai skrip shell, seperti 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}

Untuk menjalankan jenis:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 mengacu pada halaman yang akan memulai pdf baru.

2) 20 mengacu pada halaman yang akan mengakhiri pdf dengan.

3) myfile.pdf adalah file pdf yang ingin Anda ekstrak bagiannya.

Outputnya adalah myfile_p4_p20.pdf di direktori yang sama dengan file pdf asli.

Semua ini dan informasi lebih lanjut di sini: Kiat Teknis


31
2018-04-16 17:40



Mari kita tetap sederhana: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
dan Bagaimana saya menentukan file input? - Anwar
-1 untuk melakukan ekspansi parameter bash di luar string yang dikutip ganda. (seharusnya "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" dll. (perhatikan tanda kutip)). - Rotsor


QPDF bagus. Gunakan cara ini untuk mengekstrak halaman 1-10 dari input.pdf dan simpan sebagai output.pdf.

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

Harap dicatat bahwa input.pdf ditulis dua kali.

Anda dapat menginstalnya dengan memohon:

apt-get install qpdf

Atau, dengan membuka direktori aplikasi Ubuntu:

Install via the software center

Ini adalah alat yang hebat untuk manipulasi PDF, yang sangat cepat, memiliki sangat sedikit dependensi. "Ini dapat mengenkripsi dan melapisi file, mengekspos internal file PDF, dan melakukan banyak operasi lain yang berguna untuk pengguna akhir dan pengembang PDF."

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


26
2017-09-09 07:10



Satu-satunya masalah yang saya miliki dengan ini adalah bahwa masih daftar semua halaman dalam daftar isi, meskipun sebagian besar dihapus. Terlepas dari, terima kasih yang brilian! :) - Wilf
Perangkat lunak hebat. Bagus - Anwar


Ada utilitas baris perintah yang disebut pdfseparate.

Dari dokumen:

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

Atau, untuk memilih satu halaman (dalam hal ini, halaman pertama) dari file sample.pdf:

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

20
2017-10-29 18:17



alat hebat! jauh lebih cepat daripada pdftk - Anwar
Bagus, tetapi hanya terbatas pada satu halaman, dan jika Anda menginginkan lebih dari itu, Anda akan mendapatkan halaman terpisah. - Ho1
Tentu, meskipun seseorang dapat mengikuti perintah di atas dengan pdfunite untuk menghasilkan dokumen tunggal. - jdmcbr
Jika Anda memiliki dokumen yang sangat besar dan perlu membagi semua halaman, itu sangat cepat dan berguna. - MEDVIS


pdftk (sudo apt-get install pdftk) adalah baris perintah yang bagus juga untuk manipulasi PDF. Berikut beberapa contoh tentang apa pdftk bisa lakukan:

   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

Dalam kasus Anda, saya akan melakukan:

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

17
2017-10-29 18:23