iT邦幫忙

10

[RoR] 快速產生 RTF 格式超簡單

最近為了面對單位的需要,希望在各網頁上可以有不同的格式呈獻,
而試著做出這線上直接產生相容於word格式的RTF檔。
簡單地說 Rich Text Format 的格式算是最相容的word檔,
在各平台間去開rtf檔,不會有像不同版本word格式造成無法讀取的狀況。

在RoR裡已可直接輸出html,XML,只要經過以下簡單的步驟,也可直接以RTF的格式輸出。

安裝相關套件
1.首先安裝Ruby Rich Text Format (RTF) Library 0.1.0
以root身份執行 gem install rtf 即可順利安裝。
2.安裝RTF-Extensions
可在上述網頁下載tarball後,解開,將目錄裡的 rtf 目錄到 RAILS_ROOT/lib 即可。
裝這library才可順利呈獻UTF8,以及可讓RTF檔裡有超連結的功能。
3.安裝 RTFto 的plugin
在rails的project中執行 script/plugin install git://github.com/GertThiel/rtfto.git 即裝上。
這plugin,可讓Rails用簡單的view、template語法,把RTF檔畫出來。

簡單設定
在 Item 的 Controller 中,只要加上

  def show
#增加以下的 require
    require 'rtf'
    require 'rtf/utf8'
    require 'rtf/hyperlink'
    @item = Item.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @item }
      format.pdf  { render :layout => false }
#增加輸出 rtf 格式的選項
      format.rtf  { render :layout => false }
    end
  end

而在view中做一個 show.rtf.rtfto 的檔案,內容為:

  rtf.paragraph() do |p|
#這可讓 rtf 檔中有超連結
    p.hyperlink("http://MySite/items/#{@item.id}", "#{@item.title}")
  end

  rtf.paragraph do |p|
    p << "#{@item.title}"
  end

  rtf.paragraph do |p|
    p << "#{@item.memo}"
  end

當然,裡面的中文字可很正常地顯示出來。
而要連到這rtf檔案的連結是 http://MySite/items/1.rtf

Script 產生 RTF
如果不在 RoR 裡產生,而是做個 Script,用下指令方式產生,
以下是根據套件裡的範例檔及少許的修改,產生rtf無誤:

# load Ruby RTF first
require 'rubygems'
require 'rtf'
include RTF
# then load extensions
# 看extensions放在哪個目錄,指對就好,與在RoR的寫法上有點不同
require 'rtf-extensions/rtf/utf8.rb'
require 'rtf-extensions/rtf/hyperlink.rb'

# RoR 因有 rtfto 的plugin而不需以下這一行來宣告。
doc = RTF::Document.new(Font.new(Font::ROMAN, 'Times New Roman'))

# hyperlink example
doc.paragraph() do |p|
  p << "Visit "
  p.hyperlink('http://www.google.com', 'Google')
  p << " and start searching the web."
end
# utf8 - works only if the Ruby script if UTF8 encoded itself...
utf8_string = "中文測試"
doc.paragraph do |p|
  p << "A UTF-8 encoded string : #{utf8_string}"
end
File.open('./my_document.rtf','w') { |file| file.write(doc.to_rtf) }

至於 RTF 裡的字型變化、怎麼讓一些字是用 標楷體字型、畫表格 等變化…,
還待繼續了解及測試,但至少有了簡單的開始。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言