Railsで使えるGem RubyOnRailsで帳票印刷

RubyでDocxを分解してみた~Nokogiri::XML::SAX

投稿日:

 

 

参照

Rubyでdocxをいろいろ分析してみた

今度はsaxのアプローチでdocxのword/document.xmlを分解してみた

使い方は、Nokogiri::XML::SAX::Documentを継承したクラスを作る.
そして、parseメソッドでxmlドキュメントを指定してやれば、タグの始まりやタグの終わり、タグとタグの間を認識するので、そのイベントごとに処理を書けばいい.

例えばタグの始まりでは、start_elementが呼ばれて、タグの終わりではend_elementが呼ばれる.
タグとタグの間では、charactersが呼ばれる.

出力例はこんな感じ

 

たぶんxmlからhtmlに変えるとかいうときには使えると思う

例えば、

w:pが始まったら<p>を出力
w:pが終わったら</p>を出力
w:tblが始まったら<table>を出力

って感じでやっていけば、htmlが出力される.

 

*docxのテーブルだけど次のような構造っぽい

任意の列のテーブルを実現するには、こんなDSLで

##START_ROW @products.each do |product| ##
## product.name product.price ##
##END_ROW##

こんな処理をする必要があるのだろう

  1. 任意の列の始まり(START_ROW)を認識する
  2. その列(START_ROW)は削除する
  3. 変数でeach
  4. その次の列に代入する
  5. 終わり(END_ROW)を認識するまで代入する
  6. 繰り返し
  7. 終わりの列(END_ROW)は削除する

-Railsで使えるGem, RubyOnRailsで帳票印刷
-,

執筆者:

関連記事

CarrierWaveで添付したファイルをrroongaで全文検索

By: Alan Levine – CC BY 2.0 目次1 Carrierwave2 rroonga3 Gemfile4 application.rb5 config/initiali …

backbone-railsのscaffoldで生成されるコードでルーティングとCRUDの処理をどうやってるのか読んでみた

By: asobi tsuchiya   目次1 はじめに2 サンプルの準備3 初期化4 ルーター5 READ6 CREATE7 UPDATE8 DELETE はじめに backbone-r …

Rails5でマテリアルデザイン~material_design_lite-sass

By: AnnaKika – CC BY 2.0 目次1 マテリアルデザイン2 gem3 scss & javascript4 Turbolinksに対応5 simple_form …

Rails3.2でajaxなフォルダツリーを導入する2~dynatree-rails

  目次1 jQuery ajax送信側2 app/views/folders/show.js.coffee3  で、コントローラーを設定4 今までのは置いといてJsonでやり取りするアプロ …

Rails3.2でTwitterBootstrap導入のあれこれ

  目次1 sass-rails-bootstrap導入2 Layout関係3 Notification4 confirmをmodalにする5 SimpleForm導入6 kaminari導 …