使用pdftk一次解密许多PDF

时间:2011-04-14 14:29:03

标签: unix pdftk

我有10个PDF要求打开用户密码。我知道密码。我想以解密的格式保留它们。他们的文件名遵循以下形式: static_part.dynamic_part_like_date.pdf

我想转换所有10个文件。我可以在静态部分之后给出一个*并处理所有这些部分,但我也想要相应的输出文件名。因此必须有一种方法来捕获文件名的动态部分,然后在输出文件名中使用它。

对一个文件执行此操作的常规方法是:

pdftk secured.pdf input_pw foopass output unsecured.pdf

我想做类似的事情:

pdftk var = secured * .pdf input_pw foopass output unsecured + var.pdf

感谢。

1 个答案:

答案 0 :(得分:3)

您的请求有点含糊不清,但这里有一些可能对您有帮助的想法。

假设您的10个文件中有1个

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

并且您只想将SalesReport.pdf转换为不安全的,您可以使用shell脚本来满足您的要求:

# 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

您可能会发现需要将%.*内容修改为

  • 从末端剥离,(使用%。*)去除最后一个'。'和之后的所有字符(从右边剥离)。
  • 从前面剥离(使用#*。)到静态部分,留下动态部分OR
  • 从前面剥离(使用## *。)去除所有内容,直到最后一个'。'炭。

您可以更轻松地找出cmd-line所需的内容。 使用1个样本fileName

设置变量
myTestFileName=staticPart.dynamicPart.pdf

然后使用echo与变量修饰符结合来查看结果。

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

另请注意我如何将修改后的变量值与普通字符串(.pdf)合并在unsecuredName=${file%%.*}.pdf

IHTH