【发布时间】:2013-08-20 22:34:52
【问题描述】:
我有一个允许用户制作自定义 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 可以进行这样的转换,那么以编程方式进行这样的事情的最佳方法是什么?感谢您的任何建议!
【问题讨论】:
标签: ruby-on-rails ruby encryption prawn