使用Paperclip附加PDF - 获取文档属性(如页数)

时间:2016-09-14 07:32:20

标签: ruby-on-rails pdf pdfjs

在我的应用程序中学习RoR,我想看看如何处理附件。得到回形针工作,并希望获得文档属性。那么,我如何从pdf文件中获取文档属性(PDF信息)(使用Paperclip附加)?

一种方法是使用命令行,但如何获取文件(此处@annotation.file - 或其他对象@document.file)?实际上,我需要将文件下载到临时文件夹来执行此操作并执行文件删除以进行清理。如何在不下载的情况下获取详细信息?

所以控制器看起来像这样:

def pdf
    @annotation = Annotation.find(params[:id])
    render layout: false
    command = 'pdfinfo @annotation.file'
    no_of_pages = command.split("\n")[-7].split(":").last.strip
end

它会抛出错误:

  

未定义的方法`拆分'为零:NilClass

我使用以下方法将其添加到我的注释视图中:

<%= @no_of_pages %>

与此同时,我看着宝石&#34; [pdfinfo][1]&#34;作为替代方案,但如何使用它?

2 个答案:

答案 0 :(得分:2)

使用gem的替代方法,您还可以使用linux的内置命令获取任何pdf的详细信息。只需编写以下ruby代码即可执行,您将获得所有详细信息。例如:

要在ruby代码中执行linux命令,请编写如下命令:

def pdf
    @annotation = Annotation.find(params[:id])
    command = `pdfinfo @annotation.file`
    @no_of_pages = command.split("\n")[-7].split(":").last.strip
    render layout: false
end

你会得到所有的细节,如没有。您command变量中的pages,file_size等。 您可以轻松获取所需的相应详细信息。 我希望这有帮助!!

  

更新

注意:为pdf文件提供正确的路径,即放置它的确切目录。就像我的情况一样:

command = `pdfinfo /home/hbiyawarwala/Documents/books/Rails-Angular-Postgres-and-Bootstrap.pdf`

第二件事是,在您的视图中直接使用变量@no_of_pages,如

<%= @no_of_pages %>

答案 1 :(得分:0)

Easy solutionL使用PDFINFO gem;效果很好