Вопрос Как я могу извлечь диапазон страниц / часть PDF?


Вы знаете, как извлечь часть PDF-документа и сохранить его в формате PDF? В OS X это абсолютно тривиально, используя Preview. Я попробовал PDF-редактор и другие программы, но безрезультатно.

Мне нужна программа, в которой я выбираю часть, которую хочу, а затем сохраняю ее как pdf с помощью простой команды, например CMD+N на OS X. Я хочу, чтобы извлеченная часть была сохранена в формате PDF, а не jpeg и т. д.


308
2017-11-26 02:06


происхождения


Вы пробовали ImageMagick? - Martin Schröder
Это для растрового изображения Мне нужно что-то, что сохраняется в формате PDF! - user72469
pdfshuffler в репозиториях. - Marc
pdfshuffler doen't больше не работает в Ubuntu 14.04+. Вы всегда можете использовать диалог печати или альтернативу на основе терминала, например pdfseparate - Rho
@Rho Версия, напрямую установленная через apt-get все еще отлично работает для меня в 16.04. Может быть, они исправили ошибки, если они были? - xji


ответы:


pdftk является полезным многоплатформенным инструментом для работы (Главная страница pdftk).

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

вы передаете имя файла основного pdf, тогда вы укажете, что он включает только определенные страницы (12-15 в этом примере) и выводит их в новый файл.


353
2018-04-17 15:21



+1, но согласно Ответ Анджей это можно упростить до pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf, Нет необходимости в переменной. - Sparhawk
Если я хочу извлечь страницы 1-10, 15 и 17, как мне написать команду? - Patrick Li
@PatrickLi pdftk A=in.pdf cat A1-10 A15 A17 output out.pdf - m8mble
Обратите внимание, что pdftk недоступен в Ubuntu 18.04. (видеть askubuntu.com/questions/1028522/...) - alkamid


очень простой, используйте читатель PDF по умолчанию:

печатать как файл. вот и все! print menu

тогда

setting new PDF


195
2017-11-14 10:25



Flippin блестящий - andybleaden
Производит катастрофические результаты с файлами диаграмм, картами и любыми другими документами, которые не соответствуют формату страницы принтера. - Luís de Sousa
Это может привести к тому, что файл будет иметь гораздо больший размер, чем исходный документ. - dat
поэтому он не «извлекает» диапазон страниц. Он создает новый pdf-файл из старого, как если бы вы использовали партию принтера / сканера высокой четкости. - sylvainulg
Хорошо подходит для простых случаев, но нежелательные результаты в документах с подсветкой комментариев: подсветка становится 100% непрозрачностью и блокирует текст. - loved.by.Jesus


Диапазон страниц - скрипт Nautilus


обзор

Я создал несколько более продвинутый скрипт, основанный на учебнике @ThiagoPonte. Его основные особенности:

  • что он основан на графическом интерфейсе,
  • совместимый с пробелами в именах файлов,
  • и на основе трех разных бэкендов, которые способны сохранять все атрибуты исходного файла

Скриншот

enter image description here

Код

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

Монтаж

Пожалуйста, следуйте общие инструкции по установке для сценариев Nautilus, Обязательно внимательно прочитайте заголовок сценария, так как это поможет прояснить установку и использование скрипта.


Частичные страницы - PDF Shuffler


обзор

PDF-Shuffler - небольшое приложение python-gtk, которое помогает пользователю объединять или разделить документы PDF, а также поворачивать, обрезать и переупорядочивать свои страницы с помощью интерактивного и интуитивно понятного графического интерфейса. Это интерфейс для python-pyPdf.

Монтаж

sudo apt-get install pdfshuffler

Применение

PDF-Shuffler может обрезать и удалить отдельные страницы PDF. Вы можете использовать его для извлечения диапазона страниц из документа или даже частичных страниц с помощью функции обрезки:

enter image description here


Элементы страницы - Inkscape


обзор

Inkscape - очень мощный редактор векторной графики с открытым исходным кодом. Он поддерживает широкий диапазон различных форматов, включая файлы PDF. Вы можете использовать его для извлечения, изменения и сохранения элементов страницы из файла PDF.

Монтаж

sudo apt-get install inkscape

Применение

1.) Откройте файл PDF по вашему выбору с помощью Inkscape. Появится диалоговое окно импорта. Выберите страницу, из которой вы хотите извлечь элементы. Оставьте остальные настройки такими, какие они есть:

enter image description here

2.) В Inkscape нажмите и перетащите, чтобы выбрать элементы (элементы), которые вы хотите извлечь:

enter image description here

3.) Инвертируйте выбор с помощью ! и удалите выбранный объект с помощью УДАЛИТЬ:

enter image description here

4.) Обрезайте документ до остальных объектов, обратившись к Свойства документа диалога с CTRL+СДВИГ+D и выбрав «подходящий документ для изображения»:

enter image description here

5.) Сохраните документ как файл PDF из файл -> Сохранить как диалог:

6.) Если в вашем обрезанном документе есть растровые / растровые изображения, вы можете установить их DPI в появившемся диалоговом окне:

enter image description here

7.) Если вы выполнили все шаги, вы создадите настоящий PDF-файл, который будет состоять только из объектов по вашему выбору:

enter image description here


63
2018-04-17 15:11



Большие усилия. Благодаря! Я понимаю, что он не позволяет выбрать часть страницы, но только целые страницы. Я прав? - carnendil
@carnendil: Да, точно. Я не думаю, что ghostscript способен на это. Но там могут быть другие решения, чтобы сделать это программно, На данный момент я отредактировал свой ответ с альтернативным (и немного хакерским) решением с использованием PDF-shuffler. - Glutanimate
ОК, я добавил другой метод, используя Inkscape. - Glutanimate
pdfshuffler недостаточно, если вы хотите извлечь часть страницы PDF. Исходные данные PDF на странице все еще сохраняются в файле. Не используйте этот метод, если вы хотите удалить конфиденциальные данные из файла PDF. - Rob W


Сохраните это как скрипт оболочки, например 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}

Для запуска типа:

./pdfextractor.sh 4 20 myfile.pdf

1) 4 относится к странице, на которой он начнет новый pdf.

2) 20 ссылается на страницу, на которой он закончит PDF.

3) myfile.pdf - это файл pdf, который вы хотите извлечь.

Результатом будет файл myfile_p4_p20.pdf в том же каталоге исходного файла pdf.

Все это и более подробная информация здесь: Технический совет


31
2018-04-16 17:40



Давайте сделаем это просто: gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=1 -dLastPage=10 -sOutputFile=output.pdf input.pdf - Ho1
и Как указать входной файл? - Anwar
-1 для выполнения расширения параметра bash вне строки с двойными кавычками. (должно быть "-sOutputFile=${3%.pdf}_p${1}-p${2}.pdf" и т. д. (обратите внимание на цитаты)). - Rotsor


QPDF отлично. Используйте его таким образом, чтобы извлекать страницы 1-10 из input.pdf и сохраните его как output.pdf,

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

Обратите внимание, что input.pdf написано дважды.

Вы можете установить его, вызвав:

apt-get install qpdf

Или, перейдя в каталог приложений Ubuntu:

Install via the software center

Это отличный инструмент для манипуляций PDF, который очень быстрый, имеет очень мало зависимостей. «Он может шифровать и линеаризовать файлы, выставлять внутренности PDF-файла и делать много других операций, полезных конечным пользователям и разработчикам PDF».

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


26
2017-09-09 07:10



Единственная проблема, с которой я столкнулся, состоит в том, что все еще перечислены все страницы в оглавлении, несмотря на то, что большинство из них удалено. Кроме того, блестящая благодарность! :) - Wilf
Отличное программное обеспечение. Ницца - Anwar


Существует утилита командной строки, называемая pdfseparate,

Из документов:

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

Или, чтобы выбрать одну страницу (в данном случае первую страницу) из файла sample.pdf:

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

21
2017-10-29 18:17



отличный инструмент! намного быстрее, чем pdftk - Anwar
Хорошо, но ограничивается только одной страницей, и если вы хотите больше, вы получите отдельные страницы. - Ho1
Конечно, хотя вы можете выполнить описанную выше команду с помощью pdfunite для создания единого документа. - jdmcbr
Если у вас огромный документ и нужно разбить все страницы, это очень быстро и полезно. - MEDVIS


pdftk (sudo apt-get install pdftk) - отличная командная строка для манипуляций PDF. Вот несколько примеров того, что pdftk сможет сделать:

   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

В вашем случае я бы сделал:

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

17
2017-10-29 18:23





В любой системе, где установлен дистрибутив TeX:

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

Например:

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

Видеть https://tex.stackexchange.com/a/79626/8666


10
2017-09-01 20:18





Вы пробовали PDF Mod?

Вы можете, например, извлечь страницы и сохранить их в формате pdf.

Описание:

PDF Mod - простой инструмент для изменения PDF-документов. Он может вращаться, извлекать, удалять
и переупорядочивать страницы с помощью перетаскивания. Несколько документов могут комбинироваться с помощью перетаскивания
и падение. Вы также можете редактировать заголовок, тему, автора и ключевые слова в формате PDF
 документ с использованием PDF Mod.

Install via the software center

Надеюсь, это будет полезно.

Regars.


6
2017-11-26 02:17



ДА, я действительно пробовал, но он НЕ позволяет мне сохранить часть страницы, например. сюжет как pdf ... Если я не вижу вариант. Это позволяет мне извлечь целую страницу из документа, но это не то, что я хочу - user72469
Я использую его регулярно, отличный инструмент! но у меня был документ с примерно 170 страницами, с которым pdfmod не справился. - loved.by.Jesus
Вау. Это удивительно гладко. Бросил мою настоящую книгу на 512 страниц (50MiB), и она ... была быстрой. Пользовательский интерфейс - легкий ветерок. Для наркомана CLI, подобного мне, требуется определенный уровень GUI, чтобы убедить меня, но это будет сделано! - sehe


Я пытался сделать то же самое. Все, что вам нужно сделать, это:

  1. устанавливать pdftk:

    sudo apt-get install pdftk
    
  2. если вы хотите извлечь случайные страницы:

    pdftk myoldfile.pdf cat 1 2 4 5 output mynewfile.pdf
    
  3. если вы хотите извлечь диапазон:

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

пожалуйста, проверьте источник для получения дополнительной информации.


6
2018-05-03 04:00