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:

“‘ruby 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.



99
100
101
102
103
104
105
106
107
108
# File 'lib/wiz_rtf/document.rb', line 99

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, pitch = 2) ⇒ Object

Sets the Font for the text.



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/wiz_rtf/document.rb', line 85

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

#head(&block) ⇒ Object



80
81
82
# File 'lib/wiz_rtf/document.rb', line 80

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.



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

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

#line_breakObject

Writes a new line.



158
159
160
# File 'lib/wiz_rtf/document.rb', line 158

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

#page_breakObject

Writes a page interruption (new page)



163
164
165
# File 'lib/wiz_rtf/document.rb', line 163

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
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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_with_index do |font, index|
        io.group do
          io.delimit do
            io.cmd :f, index
            io.cmd font.family
            io.cmd :fprq, font.pitch
            io.cmd :fcharset, font.character_set
            io.write ' '
            io.write font.name
          end
        end
      end
    end
    io.group do
      io.cmd :colortbl
      io.delimit
      @colors.each do |color|
        io.delimit do
          io.cmd :red, color.red
          io.cmd :green, color.green
          io.cmd :blue, color.blue
        end
      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.



76
77
78
# File 'lib/wiz_rtf/document.rb', line 76

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:

“‘ruby 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 “‘



153
154
155
# File 'lib/wiz_rtf/document.rb', line 153

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: ‘Arial’, ‘Arial Black’, ‘Arial Narrow’,‘Bitstream Vera Sans Mono’,

    'Bitstream Vera Sans','Bitstream Vera Serif','Book Antiqua','Bookman Old Style','Castellar','Century Gothic',
    'Comic Sans MS','Courier New','Franklin Gothic Medium','Garamond','Georgia','Haettenschweiler','Impact','Lucida Console'
    'Lucida Sans Unicode','Microsoft Sans Serif','Monotype Corsiva','Palatino Linotype','Papyrus','Sylfaen','Symbol'
    'Tahoma','Times New Roman','Trebuchet MS','Verdana'.
    
  • 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



127
128
129
130
131
132
# File 'lib/wiz_rtf/document.rb', line 127

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