Извлечь первую страницу из нескольких PDF-файлов

17

Получите около 500 PDF-файлов, чтобы пройти и извлечь первую страницу. Затем им нужно пройти через процесс конверсии, требующий много времени, поэтому мы надеялись сэкономить время, выполнив пакетный процесс, чтобы извлечь только первую страницу из 500 PDF-файлов и поместить ее в новый PDF-файл. Имейте в виду Acrobat, но не можете найти реальный способ сделать это для нескольких файлов. Кто-нибудь знает какие-либо другие программы или методы, чтобы этого можно было достичь? Бесплатный и открытый исходный код явно более выгоден :)

РЕДАКТИРОВАТЬ: На самом деле были некоторые успехи с использованием GhostScript, чтобы извлечь только одну страницу. Сейчас я смотрю, как пакетировать это и взять список файлов и использовать их.

Тим Александр
источник
Что включают в себя другие шаги в процессе преобразования?
Игнасио Васкес-Абрамс
О вашем редактировании, см. Мое редактирование.
радостный

Ответы:

29

Используя pdftk ...

На Mac и Linux из командной строки.

for file in *.pdf ; do pdftk "$file" cat 1 output "${file%.pdf}-page1.pdf" ; done

В Windows вы можете создать командный файл. Откройте Блокнот, вставьте его внутрь:

for %%I in (*.pdf) do "pdftk.exe" "%%I" cat 1 output "%%~nI-page1.pdf"

Возможно, вам придется заменить «pdftk.exe» на полный путь к pdftk, например, "C:\Program Files\pdftk\pdftk.exeили что-то еще. (Я не использую Windows, поэтому я не знаю.)

Сохраните его с расширением, оканчивающимся на .bat, поместите его в папку с PDF-файлами и дважды щелкните.

Вы можете сделать то же самое с Ghostscript, да.

Посмотрим. Для Mac и Linux (все в одной строке):

for file in *.pdf ; do gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="${file%.pdf}-page1.pdf" -dFirstPage=1 -dLastPage=1 "$file" ; done

Я не совсем уверен, что соответствующая команда будет для командного файла Windows. Моя лучшая догадка (у меня нет окон, поэтому я не могу проверить ...):

for %%I in (*.pdf) do "C:\Program Files\gs\gs9.00\gswin32c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite -sOutPutFile#"%%~nI-page1.pdf" -dFirstPage#1 -dLastPage#1 "%%I"

Дважды проверьте, правильно ли указан путь к исполняемому файлу-скрипту, и я не проверял это, так как не пользуюсь Windows.


РЕДАКТИРОВАТЬ: ОК, я только что понял, что вы, вероятно, не хотите 500 одностраничных PDF, но один PDF, который объединяет их все. Просто запустите вышеописанное, и у вас останется 500 одностраничных PDF-файлов. Чтобы объединить их, используя pdftk ... на Mac и Linux:

pdftk *-page1.pdf cat output combined.pdf

Я думаю, что это, вероятно, то же самое в Windows, за исключением, возможно, необходимости полного пути к pdftk, как указано выше. Вы можете просто добавить эту строку после строки выше в вашем командном файле.

С Ghostscript ... на Mac и Linux:

gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="combined.pdf" *-page1.pdf

И, вероятно, то же самое в Windows, за исключением замены «gs» в начале на полный путь к gswin32c.exe, как указано выше.

Может быть, у ghostscript есть возможность сделать и то, и другое за один шаг, но мне лень это выяснять прямо сейчас.

Если порядок их объединения важен, нам потребуется больше информации.

радостный
источник
это команда, которую я искал. провел день, читая о циклах if в linux! Ваша начальная команда правильная, т.е. мне нужно 500 одностраничных PDF-файлов. Ему удалось собрать все первые страницы в одном PDF-файле, но преобразование в Excel делает его неуправляемым. У моих пользователей есть некоторые очень специфические требования и требования к макету, что бесит, но сложно. спасибо за помощь !!
Тим Александр
2

Просто нужно было сделать это сегодня в Linux. Это должно работать на Mac тоже. Выполните следующую команду с вашего терминала.

lpr -o page-ranges="1-1" path/to/folder/*.pdf

lpr отправляет задания на принтер.

Обратите внимание на использование символов * в команде. Это запустит команду для всех ваших файлов PDF в каталоге.

vivek_ganesan
источник
Как вы указали, это отправит задания на принтер. Это не то, о чем просит OP.
Ник К9
1

Я думаю, что вы могли бы использовать виртуальный принтер PDF, например, PDF-Forge.

Вы просто «печатаете» первую страницу, я сейчас на Mac и не могу попробовать, но я уверен, что вы можете сделать это больше, чем по одной за раз.

Удачи!!

Trufa

Trufa
источник
спасибо за указатели на тех. это привело меня к GhostScript, который выглядит так, как будто он может делать то, что я хочу. Спасибо
Тим Александр
@ Тим Александр, никаких проблем !!
Труфа
0

как для команды пакетного файла Windows (.bat) (%% для переменных в файле bat)

извлечение первой страницы в формате pdf в формате jpg с уменьшенным разрешением / размером

for %%I in (*.pdf) do "C:\Program Files (x86)\gs\gs9.14\bin\gswin32c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE#jpeg -r20 -sOutputFile#"%%~nI.jpg" -dFirstPage#1 -dLastPage#1 "%%I"

(в посте выше sOutputFile был написан неправильно .. и с текущим путем стандартной установки GS x86)

(также посмотрите на Использование Ghostscript для преобразования многостраничного PDF в один JPG? )

ebricca
источник
0

В линуксе

Я написал эту командную строку

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftk {} cat 1 output {}.firstpage.pdf

Но он выполняет свою работу, я тестировал его, он также работает с тем количеством уровней папок, которые у вас есть. Просто убедитесь, что вы запускаете его в корне структуры папок. Каждая папка будет иметь для каждого файла PDF дополнительный PDF, заканчивающийся на.firstpage.pdf

Вам нужно pdftkи treeдля этого, и для Ubuntu Linux вы можете установить его с помощью apt:

sudo apt install pdftk tree
Эдуард Флоринеску
источник