好的,我尝试了各种各样的东西,我不完全确定这会有用。我需要合并的pdfs是在服务器上,并且它们的链接是硬编码的。 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
我有几个问题:
我的临时文件写入了正确的命令行:
pdftk 1.pdf 2.pdf cat output new.pdf
如何运行此行以便创建new.pdf?
我是否应该用新的pdf替换tempfile,或者将新的pdf写入它或者只是在它自己的位置创建新的pdf?如果是后者,我该如何让它成为临时的?
如何获取新pdf的链接,以便用户下载?
其中一些可能是基本的东西,但我从来没有像这样动态制作pdf的动态文件。
哦是的,这个应用程序也在Rails 2.3中
感谢您的帮助。
答案 0 :(得分: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