ghostscriptを使用してPDFがパスワードで保護されているかどうかを確認することはできますか?コマンドは何でしょうか?ghostscriptを使用してPDFパスワードを削除できることは知っていますが、PDFがパスワードで保護されているか、セキュリティが有効になっているかを確認するだけです。
5 に答える
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で「暗号化」を検索することで少し回避策を実行できます。多くのファイルをすばやく検索できます。
Findstr /M /I "Encrypt" *.pdf
これにより、保護されているすべてのファイル名が返されます(dosが読み取るときに「暗号化」がファイルに書き込まれるため)
多分これは誰かが使用できるものです。私は:を使用
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