Расшифруйте много PDF-файлов за один раз, используя pdftk - PullRequest
1 голос
/ 14 апреля 2011

У меня есть 10 PDF-файлов с просьбой открыть пароль пользователя.Я знаю этот пароль.Я хочу сохранить их в расшифрованном виде.Их имена файлов имеют вид: static_part.dynamic_part_like_date.pdf

Я хочу преобразовать все 10 файлов.Я могу дать * после статической части и работать со всеми из них, но я также хочу соответствующие имена выходных файлов.Поэтому должен быть способ перехватить динамическую часть имени файла и затем использовать его в выходном имени файла.

Обычный способ сделать это для одного файла:

pdftk secure.pdf input_pw foopass вывод unsecured.pdf

Я хочу сделать что-то вроде:

pdftk var = secure * .pdf input_pw foopass выход незащищенный + var.pdf

Спасибо.

1 Ответ

3 голосов
/ 17 апреля 2011

Ваш запрос немного двусмысленный, но вот некоторые идеи, которые могут вам помочь.

Предполагается, что 1 из 10 ваших файлов равен

  # static_part.dynamic_part_like_date.pdf
  # SalesReport.20110416.pdf  (YYYYMMDD)

И вы хотите, чтобы только SalesReport.pdf преобразовывался как незащищенный, вы можете использовать сценарий оболочки для выполнения ваших требований:

# make a file with the following contents, 
# then make it executable with `chmod 755 pdfFixer.sh`
# the .../bin/bash has to be the first line the file.

$ cat pdfFixer.sh

#!/bin/bash

# call the script like $ pdfFixer.sh staticPart.*.pdf  
# ( not '$' char in your command, that is the cmd-line prompt in this example,
#   yours may look different )

# use a variable to hold the password you want to use
pw=foopass

for file in ${@} ; do

    # %%.* strips off everything after the first '.' char
    unsecuredName=${file%%.*}.pdf

    #your example : pdftk secured.pdf input_pw foopass output unsecured.pdf
    #converts to
    pdftk ${file} input_pw ${foopass} output ${unsecuredName}.pdf
done

Вы можете обнаружить, что вам нужно изменить %.* на

  • меньше полосы с конца (используйте%. *), Чтобы удалить только последнюю '.' и все символы после (полоса справа).
  • полоса от фронта (используйте # *.) Только к статической части, оставляя динамическую часть ИЛИ
  • раздеться спереди (используйте ## *.), Чтобы раздеть все до последнего '.' Вст.

Вам действительно будет намного легче выяснить, что вам нужно в строке cmd. Установите переменную с 1 примером fileName

myTestFileName=staticPart.dynamicPart.pdf

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

echo ${myTestFileName##*.}
echo ${myTestFileName#*.}
echo ${myTestFileName##.*}
echo ${myTestFileName#.*}
echo ${myTestFileName%%.*}

и т.д.

Также обратите внимание, как я комбинирую измененное значение переменной с простой строкой (.pdf) в unsecuredName=${file%%.*}.pdf

IHTH

...