在处理 PDF 增加密码 (加密) 、移除解密 (解密) 时,可以使用 Ghostscript 处理,若不熟悉,可以先看下 wiki 或官方文件的介绍
首先需要先安装 ghostscript
# for macOS
brew install ghostscript
这边提供范例 PDF ,和实作的 pr,参数细节设定,可以参考官方文件
# app/services/processing_pdf.rb
class ProcessingPdf
# ghostscript Documentation: https://www.ghostscript.com/doc/current/Use.htm
def self.encryption(pwd, input_file, output_file)
_stdout_str, _stderr_str, _status = Open3.capture3("gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dNOPROMPT -dQUIET \
-sOwnerPassword=#{pwd} -sUserPassword=manan \
-sOutputFile=#{output_file} #{input_file}")
{ success: true, msg: 'PDF加密完成' }
end
def self.decrypt(pwd, input_file, output_file)
_stdout_str, stderr_str, _status = Open3.capture3("gs -q -sDEVICE=pdfwrite -dBATCH -dNOPAUSE \
-SPDFPassword=#{pwd} -sOutputFile=#{output_file} \
-c 30000000 setvmthreshold -f #{input_file}")
return { error_msgs: stderr_str.remove("\n") } if stderr_str.present?
{ success: true, msg: 'PDF解密完成' }
end
end
将加密、解密写在 services,方便之後使用,以下为实际测试加解密 PDF
# rails console
source_pdf = Rails.root.join("data/river_demo_pdf.pdf")
encryption_pdf = Rails.root.join("data/set_password_river_demo_pdf.pdf")
password = "river_test"
# 加密 PDF
encryption_result = ProcessingPdf.encryption(password, source_pdf, encryption_pdf)
# 解密 PDF
input_pdf = encryption_pdf
output_pdf = Rails.root.join("data/decrypt_river_demo_pdf.pdf")
decrypt_result = ProcessingPdf.decrypt(password, input_pdf, output_pdf)
# 处理解密时,若遇到输入密码错误,要在自行处理
之前不知道 Ghostscript 前,会找各种 Gems 看是否有好用的解决方案,後来得知这套知名的老牌软件後,支援的平台挺广泛的,直接用这套就能搞定了~
铁人赛文章连结:https://ithelp.ithome.com.tw/articles/10271819
medium 文章连结:https://link.medium.com/JoYN5HDVPjb
本文同步发布於 小菜的 Blog https://riverye.com/
备注:之後文章修改更新,以个人部落格为主
<<: Day23 | Livewire 实作 购物网站(二): 建立商品细节页面
AI 黑箱作业已经被诟病许久,因为 AI 类神经网络的复杂性不似机械学习的树状结构、线性结构容易理...
元件介绍 Modal 元件为弹出相关元件提供了重要的基础建设,如 Dialog、Popover、Dr...
Federated plugins (联合插件) 是一种将对不同平台的支援功能分为单独的软件包。所以...
那就接续着昨天的内容,今天提到的也是大家常用的function及slice function go在...
安全内容自动化协议(SCAP)是一种使用特定标准来对组织中部署的系统进行自动化漏洞管理,度量和策略合...