Разбиение всех файлов в папке с помощью pdftk
Я пытаюсь использовать pdftk, чтобы разделить папку, содержащую pdf-файлы, на составляющие их страницы. Вот мой код:
~/MCO/MCOs$ for file in *.pdf; do pdftk "$file" burst; done
Сама команда не выглядит неправильной, но я получаю сообщение об ошибке Java следующим образом:
Unhandled Java Exception in create_output():
Unhandled Java Exception in main():
java.lang.NullPointerException
at gnu.gcj.runtime.NameFinder.lookup(libgcj.so.16)
at java.lang.Throwable.getStackTrace(libgcj.so.16)
at java.lang.Throwable.stackTraceString(libgcj.so.16)
at java.lang.Throwable.printStackTrace(libgcj.so.16)
at java.lang.Throwable.printStackTrace(libgcj.so.16)
Кажется, есть некоторое признание этой проблемы, но неясно, как / если она была решена.
Я пытаюсь получить вывод таким образом, чтобы для примера файла "ad.pdf" был разделен на "ad.pdf_01" и "ad.pdf_02", если он содержит две страницы.
2 ответа
Проблема, кажется, в том, что pdftk burst
по умолчанию называет свои выходные файлы как pg_0001.pdf
, pg_0002.pdf
и так далее, независимо от имени входного файла.
Непонятно, почему это вызывает ошибки - возможно, он начинает обрабатывать следующий файл до того, как будут закрыты предыдущие выходные файлы. В любом случае перезапись файлов в этом случае явно нежелательна, поэтому решение состоит в том, чтобы изменить вывод для каждого файла отдельно.
Согласно pdftk
страница справочника:
To name these pages yourself, supply a
printf-styled format string via the output section. For
example, if you want pages named: page_01.pdf, page_02.pdf,
etc., pass output page_%02d.pdf to pdftk.
так, например, вы могли бы сделать
for file in *.pdf; do pdftk "$file" burst output "${file%.pdf}-%02d.pdf"; done
который для входов fileA.pdf
, fileB.pdf
приведет к выходным файлам fileA-01.pdf
, fileA-02.pdf
... fileB-nm.pdf
(удаление и повторное добавление .pdf
расширение после числового суффикса).
Если вы действительно хотите ad.pdf
-> ad.pdf_01
это было бы "${file}_%02d"
,
Я мог бы
- Убедитесь, что у вас pdftk версии 2.01, потому что проблема должна быть решена в соответствии с проблемой, с которой вы столкнулись.
- Попробуйте установить другой JRE, связать OpenJDK или Oracle JRE.
- Попробуйте Sejda, командную строку, с открытым исходным кодом и делит PDF-файлы (среди прочего), вы можете настроить выходные имена.
К сожалению, это необученный NullPointerException
и нет никаких деталей, поэтому трудно сказать, что происходит не так.