我有一个允许用户制作自定义 PDF 的应用程序。在后端,我们使用 Prawn 将更改添加到给定的 PDF。代码看起来像这样:
path_to_existing_pdf = '/path/to/test.pdf'
document = Prawn::Document.new margin: 0, template: path_to_existing_pdf
使用普通的 PDF(无加密),这工作得很好。但是,如果 PDF 启用了加密,Prawn 会抛出错误Prawn::Errors::TemplateError: Template file is an encrypted PDF, it can't be used as a template
。我正在寻找的是一种工具(最好是 ruby),它可以获取加密的 PDF,保存未加密的版本,然后将其用于 Prawn 模板。代码可能看起来像:
path_to_existing_pdf, document = '/Users/[]/Documents/test.pdf', nil
begin
document = Prawn::Document.new margin: 0, template: path_to_existing_pdf
rescue Prawn::Errors::TemplateError
path_to_existing_pdf = [encrypted to unencrypted conversion here]
retry
end
并且澄清一下,用户一直上传加密的 PDF 是为了能够修改它们,所以这个问题不是如何规避用户的安全措施;这个问题更多地旨在为我的用户在使用我的应用程序时提供良好的体验。我想避免告诉用户只是去保存他们的 PDF 的未加密副本然后上传到应用程序。
我知道 Preview.app 可以做这样的转换,那么以编程方式做这样的事情的最好方法是什么?感谢您的任何建议!