本文最后更新于:1 年前
解锁 \(\mbox{pdf}\) 密码并替换原始文件
每次解锁 \(\mbox{pdf}\)
中的密码比较麻烦,当然有免费的在线网页资源 smallpdf
不过每次需要上传文件,而且有一定的安全风险。使用 \(\mbox{wsl}\) 安装 \(\mbox{qpdf}\) 加上脚本编辑可以实现解锁
\(\mbox{pdf}\)
(在不知道密码的情况下,有暴力解锁的 \(\mbox{linux}\) 安装包,不过现在 \(\mbox{pdf}\)
升级了,貌似不能被暴力破解了……)
在 \(\mbox{linux/wsl}\) 环境下,安装
\(\mbox{qpdf}\)
1
| sudo apt-get install qpdf
|
输入密码后便自动安装好了。之后,在当前目录下创建一个 \(\mbox{unlockPDF}\) 文件
使用 \(\mbox{nano}\) 进行编辑
在编辑界面中写入如下代码,其中 \(\#\) 开头的为注释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 第一行代表在哪个 shell 命令下执行,可以修改为 python 成为 python 脚本 # 可以使用命令行 which bash 找到当前控制台命令行所在位置(本质上命令也是一些文件) #!/usr/bin/bash # 要求文件名中不能有空格,否则处理时会把文件名分割,其中一个成为命令使得程序运行失败 # pdf名称,存储输入的第一个参数 pdfName=$1 # 密码,存储输入的第二个参数 password=$2 # 解锁 pdf 命令,安装 qpdf (sudo apt-get install qpdf) 便可以使用 qpdf -password=$password --decrypt $pdfName output.pdf # $? 为 0 代表上条命令执行成功 if [ $? -eq 0 ]; then # 删除原文件 rm -rf $pdfName # 将得到的 output.pdf 名称修改为原来 pdf 的名称,达到替换的效果 mv output.pdf $pdfName # 输出成功结果 echo "解锁成功,原文件被替换" else # 输出失败结果 echo "密码错误,或未安装qpdf" fi
|
可以看到 \(\mbox{shell}\)
中的参数传递方式、\(\mbox{if}\)
语句的输入、\(=\) 的格式规范(不要在
\(=\)
两侧加空格,加空格就代表分割命令,文件名也不能有空格)等与其他语言有些不同,需要加以熟悉,不过各语言之间的底层逻辑是相通的,只是各有千秋。
编写好之后,由于 \(\mbox{wsl}\) 与
\(\mbox{windows}\)
的分隔机制,不能把写好的脚本直接放在 \(\mbox{wsl}\)
控制台中,就直接放在文件夹中,专门用来处理文件,执行时输入
1 2
| # secure.pdf 为需要解锁的 pdf 文件,password 为解锁密码 ./unlockPDF secure.pdf password
|
转换文档的 \(\mbox{Linux}\) 命令行
( wsl
环境下输入下行代码会自动提示安装对应包,由于在命令行中运行,十分简便)
转换 \(\mbox{tex}\) 文件为
\(\mbox{md}\) 文件
1 2
| //需要安装 pandoc pandoc -s OOP_Homework.tex -o OOp_Homework.md
|
使用 \(\text {linux}\)
环境下合成多个 \(pdf\)(主要用于合成多个爬虫 \(pdf\) 文件)
1 2
| //需要安装 pdftk pdftk $(ls *.pdf) cat output 教材.pdf
|
将多张原始图片合成为 \(pdf\)(主要用于合成手写作业)
1 2
| //需要安装 ImageMagick convert *.jpg 作业.pdf
|
如果出现安全问题(如下)
1
| attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
|
需要使用权限修改 \(policy.xml\)
文件,使用以下命令行进入此文件中,回车后会进入编辑模式
1
| sudo nano /etc/ImageMagick-6/policy.xml
|
其中,\(nano\)
是字符终端的文本编辑器,可以对文件进行修改
1 2 3 4
| …………//大概在文件结尾部分 <policy domain="coder" rights="none" pattern="EPS" /> <policy domain="coder" rights="none" pattern="PDF" /> <policy domain="coder" rights="none" pattern="XPS" />
|
修改 \(\mbox{PDF}\) 对应权限
rights="none"
$$ rights="read|write"
1 2 3
| <policy domain="coder" rights="none" pattern="EPS" /> <policy domain="coder" rights="read|write" pattern="PDF" /> <policy domain="coder" rights="none" pattern="XPS" />
|
\(Ctrl+X\) 退出并输入 \(Y\) 保存就可以使用了