【问题标题】:pdftk, tempfile and railspdftk、tempfile 和 rails
【发布时间】:2011-07-26 19:51:14
【问题描述】:

好的,我尝试了各种方法,但我不完全确定这会奏效。我需要合并的 pdf 文件在服务器上,并且它们的链接是硬编码的。 pdftk 在我的终端本地工作,但不适用于这些远程链接。所以我不确定一旦我将它投入生产,这是否会奏效。

基本上,我正在尝试编写一种方法,该方法将检索一组选定的 pdf 并将它们合并为一个 pdf 供用户下载。

但我很难理解如何使用临时文件并通过 rails 应用程序运行终端命令。

方法如下:

def create
@routes = TransitRoute.find(params[:selected_routes])
@selected_routes = @routes.collect {|x| x.new_pdf_link + " "}
Tempfile.open('prefix', "#{Rails.root}/tmp") do |f|
    f.print("pdftk #{@selected_routes} cat output temporary.pdf")
    f.flush
    f.read
  end

respond_to do |format|
  format.html
end
end

我有几个问题:

  1. 我的临时文件中写入了正确的命令行:

    pdftk 1.pdf 2.pdf cat 输出new.pdf

如何让这条线运行以创建 new.pdf?

  1. 我应该用新的 pdf 替换临时文件,还是将新的 pdf 写入它,或者只是在它自己的位置制作新的 pdf?如果是后者,我如何让它成为临时的?

  2. 如何获得新 pdf 的链接以便用户下载?

其中一些可能是基本的东西,但我从来不用像这样动态地制作 pdf 的临时文件。

哦,是的,这个应用程序也在 Rails 2.3 中

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails pdftk temporary-files


    【解决方案1】:

    好的,我已经成功了。这是新代码,以防有人提出改进建议或有同样的问题:

    def create
     file = Tempfile.new('temp_route_pdf', "#{Rails.root}/tmp/")
     @routes = TransitRoute.find(params[:selected_routes])
     selected_routes = @routes.collect {|x| x.new_pdf_link + " "}
     route_names = @routes.collect {|x| x.short_name + "_"}
     @generated_pdf_file = "#{route_names}routes.pdf"
     `pdftk #{selected_routes}cat output #{file.path}`
     raise Exception unless $?.success?
     send_file( "#{file.path}",
           :type => "application/pdf",
           :filename => "#{@generated_pdf_file}",
           :disposition => 'inline')
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多