Разбиение всех файлов в папке с помощью 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 и нет никаких деталей, поэтому трудно сказать, что происходит не так.

Другие вопросы по тегам