我有一个允许用户制作自定义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
。我正在寻找的是一个工具(最好是红宝石),它可以获取加密的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可以进行这样的转换,那么以编程方式执行此类操作的最佳方式是什么?谢谢你的任何建议!
答案 0 :(得分:2)
在过去我工作的项目中,我们需要修改用户上传的PDF,在某些情况下加密,我们使用ps2pdfwr
程从原件中删除保护。尽管名称它将接受PDF文件作为输入。