Combine_PDF 在 Ruby 上 Rails 活动存储解析错误

Combine_PDF in Ruby on Rails Active Storage Parsing Error

我一直在尝试 Combine_PDF 为上传的文档添加水印。我已经设法让它结合本地托管的文件或通过使用 net/http 请求来工作。我希望它在用户下载时为存储在活动存储中的文件加水印。我不断在终端中收到此错误:

 Warning: parser advancing for unknown reason. Potential data-loss.

网页上是这样的:

Unknown PDF parsing error - malformed PDF file?

检查文档这是一个非常普遍的错误 gem。上传到 Active Storage 的 PDF 文件与我在 net/http 解析功能中使用的网站下载的文件相同。这是我的代码:

require 'combine_pdf'
require 'net/http'
def show
    user = User.last
    respond_to do |format|
      format.html
      format.pdf do  
        pdf = CombinePDF.new
        url = url_for(@script.document)
        pdf = CombinePDF.parse Net::HTTP.get_response(URI.parse(url)).body
        pdf.pages.each {|page| page.textbox "#{user.first_name} #{user.last_name}", height: 70, width: 400, y: 200, x: 25}
        send_data pdf.to_pdf, filename: "combined.pdf", 
                                          type: "application/pdf",
                                          disposition: "inline"
      end
    end
  end

正如我之前所说,此设置在从外部托管的 pdf 中提取时工作正常:

require 'combine_pdf'
  require 'net/http'
   def show
    user = User.last
    respond_to do |format|
      format.html
      format.pdf do  
        pdf = CombinePDF.new
        url = "https://www.americanexpress.com/content/dam/amex/us/staticassets/pdf/GCO/Test_PDF.pdf"  
        pdf = CombinePDF.parse Net::HTTP.get_response(URI.parse(url)).body
        pdf.pages.each {|page| page.textbox "#{user.first_name} #{user.last_name}", height: 70, width: 400, y: 200, x: 25}
        send_data pdf.to_pdf, filename: "combined.pdf", 
                                          type: "application/pdf",
                                          disposition: "inline"
      end
    end
  end

如您所见,我使用了美国运通的测试 PDF,它运行良好。我可以假设这只是 Active Storage 的一个问题。如果可能的话,我宁愿不要弄乱临时文件。

非常感谢任何帮助!在此先感谢大家。

尝试替换:

pdf = CombinePDF.new
url = url_for(@script.document)
pdf = CombinePDF.parse Net::HTTP.get_response(URI.parse(url)).body

…与:

pdf = @script.document.open { |f| CombinePDF.load(f.path) }