是否可以使用ghostscript检查pdf是否受密码保护?
Posted
技术标签:
【中文标题】是否可以使用ghostscript检查pdf是否受密码保护?【英文标题】:is it possible to check if pdf is password protected using ghostscript? 【发布时间】:2010-10-28 04:06:44 【问题描述】:是否可以使用 ghostscript 检查 pdf 是否受密码保护? 命令是什么? 我知道你可以使用 ghostscript 去除 pdf 密码, 但我想做的只是检查 PDF 是否受密码保护或启用安全性。
【问题讨论】:
已经开始赏金了,我也想知道是否可以使用其他工具检测受密码保护的 PDF。 【参考方案1】: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 忽略所有者密码(请参阅 this)。
【讨论】:
嗯,这看起来很有希望,我会试试看 此命令对于较大的 pdf 会花费很多时间并增加服务器负载【参考方案2】:使用pdftk
,只需尝试执行dump_data
操作即可检测用户密码或所有者密码。
protected=0
pdftk "input.pdf" dump_data output /dev/null dont_ask || protected=1
这里的问题是您不知道密码会阻止什么:读取、提取数据、修改...?
【讨论】:
我尝试了类似的方法,但它受到了限制,而且 pdftk 并不总是给我正确的结果。【参考方案3】:使用 bat 文件,您可以通过在 pdf 中搜索“加密”来解决一些问题。搜索许多文件的速度非常安静。
Findstr /M /I "Encrypt" *.pdf
这将返回所有受保护的文件名(因为“加密”将在 dos 读取文件时写入文件)
也许这是有人可以使用的东西。
我使用:for /f %%a in ('Findstr /M /I "Encrypt" *.pdf') do move %%a c:\tempfiles\
将所有受保护的 pdf 移动到 c:\tempfiles。从那里我使用 ghostscript 删除安全性,并将其移回原始文件夹。
【讨论】:
请记住,这并不能区分所有者密码保护和用户密码保护。此测试显示它是否有任何密码保护【参考方案4】:您可以使用pdfinfo
进行测试
pdfinfo $filename &>/dev/null;
if [[ $? -eq 1 ]] ; then
echo "File can not be opened for reading"
fi
【讨论】:
【参考方案5】:@Benoit 的答案在控制台上给出了丑陋的错误,但有效。
所以我会把它放到一个带有错误输出抑制的单行器中:
protected=0 && pdftk "input.pdf" dump_data output /dev/null dont_ask 2>/dev/null || protected=1
【讨论】:
以上是关于是否可以使用ghostscript检查pdf是否受密码保护?的主要内容,如果未能解决你的问题,请参考以下文章
Ghostscript:将 PDF 转换为 CMYK EPS