Class: PREP::Core::Prep
- Inherits:
-
Object
- Object
- PREP::Core::Prep
- Defined in:
- lib/core/prep.rb
Overview
PREP の中心クラス
Instance Attribute Summary collapse
-
#page_pos_x ⇒ Object
readonly
Returns the value of attribute page_pos_x.
-
#page_pos_y ⇒ Object
readonly
Returns the value of attribute page_pos_y.
-
#pages ⇒ Object
readonly
Returns the value of attribute pages.
-
#pdf ⇒ Object
readonly
Returns the value of attribute pdf.
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Instance Method Summary collapse
-
#current_page ⇒ Object
現在描画中のページインスタンスを返却.
-
#current_page=(pos) ⇒ Object
現在のページを強制的に変更.
-
#current_page_number ⇒ Object
現在の通しページ番号を返却.
-
#draw_contents(values) ⇒ Object
コンテンツの埋め込み.
-
#draw_footers(values) ⇒ Object
フッタの埋め込み.
-
#draw_headers(values) ⇒ Object
ヘッダの埋め込み.
-
#exists_and_drawed_page?(x, y) ⇒ Boolean
指定されたページが存在し描画済みであるかどうかをチェック.
-
#exists_move_to_page?(x, y) ⇒ Boolean
移動先のページが存在するかどうかをチェック.
-
#exists_page?(x, y) ⇒ Boolean
指定されたページが存在するかどうかをチェック.
-
#generate(output_file_path, values = { }) ⇒ Object
帳票の生成.
-
#generate_page ⇒ Object
ページオブジェクトの作成とページ設定.
-
#generate_sample_dataset ⇒ Object
データセット雛形を生成して返却.
-
#group(group_identifiy) ⇒ Object
指定されたグループ識別子を検索して返却 存在しない場合は例外発生.
-
#has_group?(group_identifiy) ⇒ Boolean
指定されたグループ識別子の存在確認.
-
#init_configuration ⇒ Object
設定の初期化.
-
#initialize(configuration_file_path = nil) ⇒ Prep
constructor
初期化.
-
#initialize_pages ⇒ Object
ページの初期化.
-
#load_configuration(configuration_file_path) ⇒ Object
設定ファイルのロード.
-
#move_page_to(x, y) ⇒ Object
ページの移動および追加.
-
#page_content_region ⇒ Object
コンテンツ描画領域の取得.
-
#page_footer_region ⇒ Object
フッタ領域の取得.
-
#page_header_region ⇒ Object
ヘッダ領域の取得.
-
#print_flat_pages ⇒ Object
ページ構成を模式印字するデバッグ用メソッド.
-
#total_pages ⇒ Object
現在の総ページ数を返却.
Constructor Details
#initialize(configuration_file_path = nil) ⇒ Prep
初期化
設定ファイルのパスが与えられれば初期化 無ければブランクの設定をロード
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/core/prep.rb', line 43 def initialize(configuration_file_path = nil) if configuration_file_path if File.exists?(configuration_file_path) load_configuration(configuration_file_path) else raise "File not found \"#{configuration_file_path}\"." end else init_configuration end end |
Instance Attribute Details
#page_pos_x ⇒ Object (readonly)
Returns the value of attribute page_pos_x.
37 38 39 |
# File 'lib/core/prep.rb', line 37 def page_pos_x @page_pos_x end |
#page_pos_y ⇒ Object (readonly)
Returns the value of attribute page_pos_y.
37 38 39 |
# File 'lib/core/prep.rb', line 37 def page_pos_y @page_pos_y end |
#pages ⇒ Object (readonly)
Returns the value of attribute pages.
37 38 39 |
# File 'lib/core/prep.rb', line 37 def pages @pages end |
#pdf ⇒ Object (readonly)
Returns the value of attribute pdf.
37 38 39 |
# File 'lib/core/prep.rb', line 37 def pdf @pdf end |
#values ⇒ Object (readonly)
Returns the value of attribute values.
37 38 39 |
# File 'lib/core/prep.rb', line 37 def values @values end |
Instance Method Details
#current_page ⇒ Object
現在描画中のページインスタンスを返却
208 209 210 |
# File 'lib/core/prep.rb', line 208 def current_page return @flat_pages[@page_pos_y][@page_pos_x] end |
#current_page=(pos) ⇒ Object
現在のページを強制的に変更
存在しないページへの移動は不可(例外) 引数の形式はハッシュ: Ex.) { :x => 0, :y => 0 }
226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/core/prep.rb', line 226 def current_page=(pos) if exists_page?(pos[:x], pos[:y]) puts "[#{@page_pos_x}:#{@page_pos_y}] => [#{pos[:x]}:#{pos[:y]}]" if ENV["DEBUG"] @page_pos_x, @page_pos_y = pos[:x], pos[:y] print_flat_pages if ENV["DEBUG"] return current_page else print_flat_pages if ENV["DEBUG"] raise "Unknown page index [#{pos[:x]},#{pos[:y]}]." end end |
#current_page_number ⇒ Object
現在の通しページ番号を返却
213 214 215 216 217 218 219 220 |
# File 'lib/core/prep.rb', line 213 def current_page_number @pages.each_with_index do |page, index| if page === current_page return index + 1 end end raise "Unknown Page instance \"#{page}\"." end |
#draw_contents(values) ⇒ Object
コンテンツの埋め込み
111 112 113 114 115 116 |
# File 'lib/core/prep.rb', line 111 def draw_contents(values) content = @content[:content] # 描画領域を含めて描画開始 content.draw(self, page_content_region, values[:content]) end |
#draw_footers(values) ⇒ Object
フッタの埋め込み
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/core/prep.rb', line 134 def (values) return unless @content.has_identifier?(:footer) = @content[:footer] # 全てのページに対してインデックスを切り替えながら実行 @flat_pages.each_with_index do |row_pages, y| row_pages.each_with_index do |page, x| self.current_page = { :x => x, :y => y } .draw(self, , values[:footer]) end end end |
#draw_headers(values) ⇒ Object
ヘッダの埋め込み
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/core/prep.rb', line 119 def draw_headers(values) return unless @content.has_identifier?(:header) header = @content[:header] # 全てのページに対してインデックスを切り替えながら実行 @flat_pages.each_with_index do |row_pages, y| row_pages.each_with_index do |page, x| self.current_page = { :x => x, :y => y } header.draw(self, page_header_region, values[:header]) end end end |
#exists_and_drawed_page?(x, y) ⇒ Boolean
指定されたページが存在し描画済みであるかどうかをチェック
186 187 188 189 190 191 192 |
# File 'lib/core/prep.rb', line 186 def exists_and_drawed_page?(x, y) if exists_page?(x, y) return @flat_pages[y][x].drawed? else return false end end |
#exists_move_to_page?(x, y) ⇒ Boolean
移動先のページが存在するかどうかをチェック
167 168 169 170 171 172 |
# File 'lib/core/prep.rb', line 167 def exists_move_to_page?(x, y) x += @page_pos_x y += @page_pos_y return exists_and_drawed_page?(x, y) end |
#exists_page?(x, y) ⇒ Boolean
指定されたページが存在するかどうかをチェック
175 176 177 178 179 180 181 182 183 |
# File 'lib/core/prep.rb', line 175 def exists_page?(x, y) if @flat_pages[y].nil? return false elsif @flat_pages[y][x].nil? return false else return true end end |
#generate(output_file_path, values = { }) ⇒ Object
帳票の生成
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/core/prep.rb', line 71 def generate(output_file_path, values = { }) # 再描画用に初期値を保持 @values = values.dup @pdf = HPDFDoc.new # 日本語対応 @pdf.use_jp_fonts @pdf.use_jp_encodings # ページの初期化 initialize_pages draw_contents(values) draw_headers(values) (values) # 指定されたファイルへの書込 @pdf.save_to_file(output_file_path) rescue => e @pdf.save_to_file(output_file_path) if ENV["DEBUG"] puts "Error occured!!\n#{e}" raise PrepError.new(e) end |
#generate_page ⇒ Object
ページオブジェクトの作成とページ設定
195 196 197 198 199 200 |
# File 'lib/core/prep.rb', line 195 def generate_page page = @pdf.add_page page.set_size(@page_config.size, @page_config.orientation) return page end |
#generate_sample_dataset ⇒ Object
データセット雛形を生成して返却
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/core/prep.rb', line 56 def generate_sample_dataset # ヘッダのデータセット生成 dataset = { } if @content.has_identifier?(:header) dataset[:header] = @content[:header].generate_sample_dataset(self) end dataset[:content] = @content[:content].generate_sample_dataset(self) if @content.has_identifier?(:footer) dataset[:footer] = @content[:footer].generate_sample_dataset(self) end return dataset end |
#group(group_identifiy) ⇒ Object
指定されたグループ識別子を検索して返却 存在しない場合は例外発生
354 355 356 |
# File 'lib/core/prep.rb', line 354 def group(group_identifiy) return @content[group_identifiy] end |
#has_group?(group_identifiy) ⇒ Boolean
指定されたグループ識別子の存在確認
359 360 361 |
# File 'lib/core/prep.rb', line 359 def has_group?(group_identifiy) return @content.drawables.has_key?(group_identifiy.to_sym) end |
#init_configuration ⇒ Object
設定の初期化
308 309 310 |
# File 'lib/core/prep.rb', line 308 def init_configuration raise "Need configuration file!" end |
#initialize_pages ⇒ Object
ページの初期化
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/core/prep.rb', line 94 def initialize_pages # 一次元配列 @pages = [] # 二次元配列 @flat_pages = [] # ページの作成 page = generate_page # 1ページ目の登録 @pages << page @flat_pages = [[page]] # [0][0] 位置への追加 # 現在のページの位置情報を初期化 @page_pos_x, @page_pos_y = 0, 0 return page end |
#load_configuration(configuration_file_path) ⇒ Object
設定ファイルのロード
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
# File 'lib/core/prep.rb', line 313 def load_configuration(configuration_file_path) # YAML からハッシュ形式に変換 config_values = YAML.load_file(configuration_file_path) # ページ設定情報を取り込み @page_config = Page.new if config_values["page"] values = config_values["page"] if !values["size"].nil? && values["size"] != "" @page_config.size = Page::SIZES[values["size"].to_sym] end if !values["orientation"].nil? && values["orientation"] != "" @page_config.orientation = Page::ORIENTATIONS[values["orientation"].to_sym] end if !values["margin"].nil? margin_values = values["margin"].keys.inject({ }) do |hash, key| hash[key.to_sym] = values["margin"][key].mm2pixcel next hash end @page_config.margin = margin_values end if !values["header_height"].nil? @page_config.header_height = values["header_height"].mm2pixcel end if !values["footer_height"].nil? @page_config. = values["footer_height"].mm2pixcel end end # コンテンツ定義情報を読み込む # page 以外について読み込みを実施 @content = Group.new config_values.keys.each do |identifier| unless identifier == "page" @content.add_drawable(identifier, config_values[identifier], true) end end end |
#move_page_to(x, y) ⇒ Object
ページの移動および追加
指定された位置への移動に際してページが存在しなければページを追加
151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/core/prep.rb', line 151 def move_page_to(x, y) puts "[#{@page_pos_x}:#{@page_pos_y}] => [#{@page_pos_x + x}:#{@page_pos_y + y}]" if ENV["DEBUG"] @page_pos_x, @page_pos_y = @page_pos_x + x, @page_pos_y + y @flat_pages[@page_pos_y] ||= [] if @flat_pages[@page_pos_y][@page_pos_x].nil? @flat_pages[@page_pos_y][@page_pos_x] = (page = generate_page) @pages << page end print_flat_pages if ENV["DEBUG"] return @flat_pages[@page_pos_y][@page_pos_x] end |
#page_content_region ⇒ Object
コンテンツ描画領域の取得
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/core/prep.rb', line 254 def page_content_region # 全体の描画領域を取得 width = current_page.get_width height = current_page.get_height x = 0 y = 0 # マージンを含める x += @page_config.margin[:left] width -= (@page_config.margin[:left] + @page_config.margin[:right]) y += @page_config.margin[:top] height -= (@page_config.margin[:top] + @page_config.margin[:bottom]) # ヘッダ、および、フッタ領域を含める y += @page_config.header_height height -= (@page_config.header_height + @page_config.) return Region.new(x, y, width, height) end |
#page_footer_region ⇒ Object
フッタ領域の取得
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/core/prep.rb', line 290 def # 全体の描画領域を取得 width = current_page.get_width height = current_page.get_height x = 0 y = current_page.get_height # マージンを含める x += @page_config.margin[:left] width -= (@page_config.margin[:left] + @page_config.margin[:right]) # 高さをフッタ領域に変更 height = @page_config. # フッタの開始 Y 座標を計算 y -= (@page_config.margin[:bottom] + height) return Region.new(x, y, width, height) end |
#page_header_region ⇒ Object
ヘッダ領域の取得
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/core/prep.rb', line 273 def page_header_region # 全体の描画領域を取得 width = current_page.get_width height = current_page.get_height x = 0 y = 0 # マージンを含める x += @page_config.margin[:left] width -= (@page_config.margin[:left] + @page_config.margin[:right]) y += @page_config.margin[:top] # 高さをヘッダ領域に変更 height = @page_config.header_height return Region.new(x, y, width, height) end |
#print_flat_pages ⇒ Object
ページ構成を模式印字するデバッグ用メソッド
239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/core/prep.rb', line 239 def print_flat_pages @flat_pages.each_with_index do |flat_page, y| flat_page.each_with_index do |one_page, x| char = one_page.nil? ? "?" : "." if x == page_pos_x && y == page_pos_y char = '!' end STDERR.write("[#{char}]") end STDERR.write("\n") end gets if ENV["DEBUG"] end |
#total_pages ⇒ Object
現在の総ページ数を返却
203 204 205 |
# File 'lib/core/prep.rb', line 203 def total_pages return @pages.size end |