2

我正在使用以下技术:

  1. JRuby 1.7.4
  2. 导轨 3.2.13
  3. Ubuntu 13.04
  4. DB2 C-Express
  5. 扭矩箱服务器 2.3.0

我的目标是制作一个实现以下功能的简单控制器:

  1. 上传文本文件(MS Word 格式、Open Office 或 Libre Office 格式)
  2. 对上传的文件执行全文搜索
  3. 将浏览器中的文本文件显示为 PDF

我已经搜索了可以帮助我实现这一目标的宝石,并且有以下问题:

  1. 存储文本文件的字段的列类型应该是什么。一般来说,我认为它应该是二进制类型。
  2. 是否可以使用Sunspot执行全文搜索?正如我所读到的,它似乎适用于文本类型的字段,而不是二进制字段。
  3. 我读到了两个可以让我生成 PDF 的 gem。Prawn gem,它增加了更多的灵活性和PDFkit,它可以从 HTML 页面生成 PDF。可以使用其中的任何一个来显示文本文件吗?我想我应该首先以某种方式在 HTML 中显示,然后使用 PDF gem。

有没有人做过这样的事情,你能指出我正确的方向吗?

4

2 回答 2

1

要回答您的问题:

  1. 我会使用两列,一列二进制 (BLOB) 来存储原始文档(MS Word 或 LibreOffice)。这对于翻译成 PDF 很有用。然后是全文搜索的另一列;这将是 TEXT 类型,并且只包含纯文本。
  2. 我不会使用 gem 进行全文搜索,我宁愿使用 SQL 'LIKE' 关键字。
  3. 据我所知,虾是最好的。您还可以搜索某些 gem 是否直接将 MSWord 转换为 pdf 或将 Libreoffice doc 转换为 PDF。

最后,Libreoffice 文本是简单的压缩档案,其中文本存储在 XML 文件中。要提取它:

content = `unzip -cq \"#{file_path}\" content.xml`
require 'nokogiri'
@nokogiri = Nokogiri::XML(content)
paragraphs = []
@nokogiri.xpath('//text:p').each do |t|
    paragraphs << t.content
end
text = paragraphs.join ' '
于 2013-07-19T03:25:08.267 回答
1

我还没有完成您要求中的大部分事情,但是我使用文本解析器将 MS Word 文档转换为 XML 文档的工作量很大。也许我至少可以让你朝着正确的方向开始。

我们使用 Apache 的一个名为POI的 Java 库,它使 DOC -> XML 转换成为一个简单的过程。由于您使用的是 JRuby,我想您将它集成到您​​的项目中会容易得多,因为我们使用的是 MRI Ruby。那是一个 PITA,因为我们必须包含许多桥梁和其他垃圾才能使用 .jar 文件。

就个人而言,我使用Carrierwave gem来处理文件上传。上传文件并将它们附加到模型上非常简单。您只需使用 Carrierwave 生成​​器生成Uploader附加到模型中的字段的类,将其配置为根据您的规范存储和处理文件,然后获利!文档很棒,但如果您需要,我很乐意为您提供帮助。如果您需要多文件上传,我在另一篇 SO 帖子中详细解释了我是如何完成它的。

希望有帮助!

于 2013-07-18T16:46:34.283 回答