Class: WizRtf::Document

Inherits:
Object
  • Object
show all
Defined in:
lib/wiz_rtf/document.rb

Overview

Rtf Document

Creates a new Rtf document specifing the format of the pages.

Example:

doc = WizRtf::Document.new do

text "A Example of Rtf Document", 'text-align' => :center, 'font-family' => 'Microsoft YaHei', 'font-size' => 48, 'font-bold' => true, 'font-italic' => true, 'font-underline' => true
image('h:\eahey.png')
page_break
text "A Table Demo", 'foreground-color' => WizRtf::Color::RED, 'background-color' => '#0f00ff'
table [[{content: WizRtf::Image.new('h:\eahey.png'),rowspan:4},{content:'4',rowspan:4},1,{content:'1',colspan:2}],
       [{content:'4',rowspan:3,colspan:2},8],[11]], column_widths:{1=>100,2 => 100,3 => 50,4 => 50,5 => 50} do
  add_row [1]
end

end doc.save(‘c:text.rtf’)

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, &block) ⇒ Document

Returns a new instance of Document.



26
27
28
29
30
31
32
# File 'lib/wiz_rtf/document.rb', line 26

def initialize(options = {}, &block)
  @fonts = []
  @colors = []
  @parts = []
  font 'Courier New'
  block.arity<1 ? self.instance_eval(&block) : block.call(self) if block_given?
end

Instance Method Details

#color(*rgb) ⇒ Object

Sets the color for the text.



82
83
84
85
86
87
88
89
90
91
# File 'lib/wiz_rtf/document.rb', line 82

def color(*rgb)
  color = WizRtf::Color.new(*rgb)
  if index = @colors.index {|c| c.to_rgb_hex == color.to_rgb_hex}
    index += 1
  else
    @colors << color
    index = @colors.size
  end
  index
end

#font(name, family = nil, character_set = 0, prq = 2) ⇒ Object

Sets the Font for the text.



72
73
74
75
76
77
78
79
# File 'lib/wiz_rtf/document.rb', line 72

def font(name, family = nil,  character_set = 0, prq = 2)
  unless index = @fonts.index {|f| f.name == name}
    index = @fonts.size
    opts = WizRtf::Font::FONTS.detect {|f| f[:name] == name}
    @fonts << WizRtf::Font.new(index, opts[:name], opts[:family], opts[:character], opts[:prq])
  end
  index
end

#head(&block) ⇒ Object



67
68
69
# File 'lib/wiz_rtf/document.rb', line 67

def head(&block)
  block.arity<1 ? self.instance_eval(&block) : block.call(self) if block_given?
end

#image(file) ⇒ Object

Puts a image into the current position within the document.

  • file - image file path and filename.



115
116
117
# File 'lib/wiz_rtf/document.rb', line 115

def image(file)
  @parts << WizRtf::Image.new(file)
end

#line_breakObject

Writes a new line.



137
138
139
# File 'lib/wiz_rtf/document.rb', line 137

def line_break
  @parts << WizRtf::Cmd.new(:par)
end

#page_breakObject

Writes a page interruption (new page)



142
143
144
# File 'lib/wiz_rtf/document.rb', line 142

def page_break
  @parts << WizRtf::Cmd.new(:page)
end

#render(io) ⇒ Object

Outputs the Complete Rtf Document to a Generic Stream as a Rich Text Format (RTF)

  • io - The Generic IO to Output the RTF Document



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/wiz_rtf/document.rb', line 36

def render(io)
  io.group do
    io.cmd :rtf, 1
    io.cmd :ansi
    io.cmd :ansicpg, 2052
    io.cmd :deff, 0
    io.group do
      io.cmd :fonttbl
      @fonts.each do |font|
        font.render(io)
      end
    end
    io.group do
      io.cmd :colortbl
      io.delimit
      @colors.each do |color|
        color.render(io)
      end
    end
    @parts.each do |part|
      part.render(io)
    end
  end
end

#save(file) ⇒ Object

Outputs the complete Rtf Document to a file as a Rich Text Format (RTF)

  • file - file path and filename.



63
64
65
# File 'lib/wiz_rtf/document.rb', line 63

def save(file)
  File.open(file, 'w') { |file| render(WizRtf::RtfIO.new(file)) }
end

#table(rows = [], options = {}, &block) ⇒ Object

Creates a new Table

  • rows - a table can be thought of as consisting of rows and columns.

Options:

  • column_widths - sets the widths of the Columns.

Example:

table [

   [{content: WizRtf::Image.new('h:\eahey.png'),rowspan:4},{content:'4',rowspan:4},1,{content:'1',colspan:2}],
   [{content:'4',rowspan:3,colspan:2},8],[11]
 ], column_widths:{1=>100,2 => 100,3 => 50,4 => 50,5 => 50} do
add_row [1]

end



132
133
134
# File 'lib/wiz_rtf/document.rb', line 132

def table(rows = [],options = {}, &block)
  @parts << WizRtf::Table.new(rows, options, &block)
end

#text(str, styles = {}) ⇒ Object

This will add a string of str to the document, starting at the current drawing position.

Styles:

  • text-align - sets the horizontal alignment of the text. optional values: :left, :center, :right

  • font-family - set the font family of the text. optional values:

  • font-size - set font size of the text.

  • font-bold - setting the value true for bold of the text.

  • font-italic - setting the value true for italic of the text.

  • font-underline - setting the value true for underline of the text.

Example:

text “A Example of Rtf Document”, ‘text-align’ => :center, ‘font-family’ => ‘Microsoft YaHei’, ‘font-size’ => 48, ‘font-bold’ => true, ‘font-italic’ => true, ‘font-underline’ => true



106
107
108
109
110
111
# File 'lib/wiz_rtf/document.rb', line 106

def text(str, styles = {})
  styles['foreground-color'] = color(styles['foreground-color']) if styles['foreground-color']
  styles['background-color'] = color(styles['background-color']) if styles['background-color']
  styles['font-family'] = font(styles['font-family']) if styles['font-family']
  @parts << WizRtf::Text.new(str, styles)
end