0

好的,我尝试了各种各样的东西,但我不完全确定这会奏效。我需要合并的 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 猫输出 new.pdf

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

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

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

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

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

谢谢你的帮助。

4

1 回答 1

2

好的,我有它的工作。这是新代码,以防有人提出改进建议或有同样的问题:

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
于 2011-07-28T13:53:10.207 回答