3

我有一个允许用户制作自定义 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 可以做这样的转换,那么以编程方式做这样的事情的最好方法是什么?感谢您的任何建议!

4

1 回答 1

2

在我过去工作的一个项目中,我们需要修改用户上传的 PDF,在某些情况下是加密的,我们使用作为ghostscriptps2pdfwr包一部分的程序来删除原始文件的保护。尽管有名称,但它会接受 PDF 文件作为输入。

于 2013-08-20T23:03:04.390 回答