附有 Paperclip 的 PDF - 获取文档属性(如页数)

PDF attached with Paperclip - get document properties (like page count)

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

一种方法是使用命令行,但如何获取文件(此处 @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

它抛出一个错误:

undefined method `split' for nil:NilClass

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

<%= @no_of_pages %>

同时我查看了 gem“[pdfinfo][1]”作为替代方案,但如何使用它?

使用 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 变量中的页数、file_size 等。 您可以轻松获取所需的相应详细信息。 希望对您有所帮助!!

UPDATE

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

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

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

<%= @no_of_pages %>

简单的解决方案L使用PDFINFO gem;效果很好