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) }
我一直在尝试 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) }