使用Ghostscript可以检查PDF是否受密码保护吗?相应的命令是什么? 我知道可以使用Ghostscript去除PDF密码, 但是我只想检查PDF是否受密码保护或者安全启用。
使用Ghostscript可以检查PDF是否受密码保护吗?相应的命令是什么? 我知道可以使用Ghostscript去除PDF密码, 但是我只想检查PDF是否受密码保护或者安全启用。
checkuserpasswdPDF.sh
:
checkuserpasswdPDF.sh
:
#!/bin/sh
GS=~/gs/bin/gs
output=`$GS -dBATCH -sNODISPLAY "$1" 2>&1`
gsexit=$?
if [ "$gsexit" == "0" ]; then
echo "Not user-password protected"
exit 0;
else
found=`echo "$output" |grep -o "This file requires a password"`
if [ -z "$found" ]; then
echo "Failed to invoke gs"
exit $gsexit
else
echo "Protected"
exit 0;
fi
fi
检查用户密码保护的PDF文件:checkuserpasswdPDF.sh test.pdf
。
GS忽略所有者密码(请参见这个链接)。
使用 pdftk
工具可以通过尝试执行 dump_data
操作来检测用户密码或所有者密码。
protected=0
pdftk "input.pdf" dump_data output /dev/null dont_ask || protected=1
通过使用bat文件,你可以通过在pdf中搜索“Encrypt”来进行一些变通。这样做可以快速搜索许多文件。
Findstr /M /I "Encrypt" *.pdf
这将返回所有已加密的文件名(因为在 dos 读取文件时会写入 "Encrypt")
也许有人可以用到这个。我使用:
for /f %%a in ('Findstr /M /I "Encrypt" *.pdf') do move %%a c:\tempfiles\
将所有受保护的PDF移动到c:\tempfiles. 然后我使用ghostscript来删除安全性,并将其移回原始文件夹。
您可以使用pdfinfo
进行测试。
pdfinfo $filename &>/dev/null;
if [[ $? -eq 1 ]] ; then
echo "File can not be opened for reading"
fi
@Benoit的答案在控制台上会出现丑陋的错误,但是可以正常工作。
因此,我会将其放入一个一行代码中,并抑制错误输出:
protected=0 && pdftk "input.pdf" dump_data output /dev/null dont_ask 2>/dev/null || protected=1