Как программно удалить страницу из PDF-документа на Mac? - PullRequest
6 голосов
/ 29 сентября 2010

У меня есть несколько документов PDF, и все они содержат титульную страницу, которую я хочу удалить.

Есть ли способ программно удалить их?

Большинство утилит PDF, которые я обнаружил, могут только объединять документы, но не удалять страницы. В диалоговом окне печати я могу выбрать страницу 2 и затем распечатать ее в файл, но не могу найти какой-либо способ доступа к этой функции программным путем.

Ответы [ 3 ]

8 голосов
/ 29 сентября 2010

Используйте pdftk .

Чтобы удалить страницу 8:

pdftk in.pdf cat 1-7 9-end output out.pdf
3 голосов
/ 30 сентября 2010

Только для справки: вы также можете использовать Ghostscript:

gs \
  -o removed-page-1-from-input.pdf \
  -sDEVICE=pdfwrite \
  -dFirstPage=2 \
  /path/to/input.pdf

Однако pdftk - лучший инструмент для этой работы (и уже рекомендованной вам).

Кроме того, эта командная строка Ghostscript может изменить некоторые свойства в вашем файле input.pdf, поскольку она по существу перегоняет его.Это может быть желаемым изменением или нет.Чтобы контролировать отдельные аспекты этого поведения (или подавлять некоторые из них), требуется более сложная командная строка с большим количеством параметров.

pdftk будет повторно использовать исходные объекты PDF для каждой страницы как есть.


Обновление

Ghostscript также имеет дополнительный параметр -dLastPage.Вместе с -dFirstPage это позволяет извлекать диапазоны страниц.

В новейших версиях указан новый параметр -sPageList.Это можно использовать так:

-sPageList="1, 5-10, 12-"

для извлечения страниц 1, 5-10 и 12-последней из входного документа.Однако я (пока) лично не тестировал эту новую функцию и не уверен, насколько надежно она работает.

Для более старых версий Ghostscript (а также самой последней) она должна работать дляподача одного и того же входного PDF несколько раз с различными параметрами в один и тот же вызов GS для извлечения несмежных выборов страниц из документа.Вы даже можете комбинировать страницы из разных документов следующим образом:

gs \
  -o selected-pages.pdf \
  -sDEVICE=pdfwrite     \
  -dFirstPage=2         \
  -dLastPage=2          \
   in1.pdf              \
                        \
  -dFirstPage=10        \
  -dLastPage=15         \
   in1.pdf              \
                        \
  -dFirstPage=1         \
  -dLastPage=1          \
   in1.pdf              \
                        \
  -dFirstPage=4         \
  -dLastPage=6          \
   in2.pdf

Предостережения: Объединение страниц из разных документов, которые используют не встроенные шрифты или идентичныеимена шрифтов, но разные кодировки и / или разные подмножества (с одинаковыми префиксами имени шрифта) могут привести к неправильному PDF в результате.

0 голосов
/ 29 сентября 2010

-[PDFDocument removePageAtIndex:] похоже, что это должно сделать это возможным. Кстати, Preview.app может удалить страницу, но она не предназначена для сценариев, поэтому это не программное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...