是否可以使用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中文本块的背景

PDF 上的 Ghostscript 邮票图像

如何检查 PDF 是不是受密码保护

Ghostscript:将 PDF 转换为 CMYK EPS

如何使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?

iTextsharp PDF 文档属性