Module: PdfWritingToolsProcess

Defined in:
lib/pdf_writing_tools_process.rb

Class Method Summary collapse

Class Method Details

.process_xml_obj(xml_obj, properties, attributes = {}) ⇒ Object

Produce le actions necessarie per disegnare nel PDF un determinato “tag”



137
138
139
140
141
142
143
144
145
146
# File 'lib/pdf_writing_tools_process.rb', line 137

def self.process_xml_obj(xml_obj, properties, attributes={})
  case xml_obj.name
  when 'text', 'b', 'i', 'ul', 'li', 'p', 'h1', 'ol', 'span', 'table'
    @process_xml_tag_table[xml_obj.name].call(xml_obj, properties)
  when 'br'
    PdfWritingToolsActions.new_line_action
  else
    [] # Non previsto
  end
end

.process_xml_tag_b(xml_obj, properties) ⇒ Object

Dato un oggetto rappresentante il tag b html, processa ricorsivamente i suoi figli cosi’ da ottenere le action da applicare per la creazione del pdf



6
7
8
9
10
11
12
# File 'lib/pdf_writing_tools_process.rb', line 6

def self.process_xml_tag_b(xml_obj, properties)
  actions_list = []
  xml_obj.children.each do |child|
    actions_list += process_xml_obj(child, properties + [:bold])
  end
  actions_list
end

.process_xml_tag_h1(xml_obj, properties) ⇒ Object

Al momento assumo che h1 contenga solo testo, poi eventualmente renderla ricorsiva permettendo a h1 di contenere altri tag. Sebbene l’xml che sto processando non sia vero html, voglio cercare di dargli il più possibile lo stesso comportamento. All’interno di h1, possono essere presenti solo elementi inline. Al momento non controllo questa cosa, quindi preferisco tagliare la testa al toro, assumento che h1 contenga solo testo.



90
91
92
93
94
# File 'lib/pdf_writing_tools_process.rb', line 90

def self.process_xml_tag_h1(xml_obj, properties)
  actions_list = process_xml_text(xml_obj.child, [:bold], 16, true)

  PdfWritingToolsActions.new_line_action + actions_list + PdfWritingToolsActions.new_line_action * 2
end

.process_xml_tag_i(xml_obj, properties) ⇒ Object

Dato un oggetto rappresentante il tag i html, processa ricorsivamente i suoi figli cosi’ da ottenere le action da applicare per la creazione del pdf



16
17
18
19
20
21
22
# File 'lib/pdf_writing_tools_process.rb', line 16

def self.process_xml_tag_i(xml_obj, properties)
  actions_list = []
  xml_obj.children.each do |child|
    actions_list += process_xml_obj(child, properties + [:italic])
  end
  actions_list
end

.process_xml_tag_li(xml_obj, _properties, idx = nil) ⇒ Object

Produce le “actions” che permettono di disengare nel PDF, l’elemento della lista indicato da li



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/pdf_writing_tools_process.rb', line 59

def self.process_xml_tag_li(xml_obj, _properties, idx=nil)
  actions_list = []

  xml_obj.children.each do |child|
    actions_list += process_xml_obj(child, [])
  end

  if idx
    PdfWritingToolsActions.new_line_action + PdfWritingToolsActions.atomic_text_action(idx) + PdfWritingToolsActions.indent_action(4) + actions_list
  else
    PdfWritingToolsActions.new_line_action + PdfWritingToolsActions.bullet_action + PdfWritingToolsActions.indent_action(4) + actions_list
  end
end

.process_xml_tag_ol(xml_obj, properties, idx_start = '1') ⇒ Object

Produce le “actions” che permettono di disegnare nel PDF, la lista contenuta nel tag ol



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/pdf_writing_tools_process.rb', line 45

def self.process_xml_tag_ol(xml_obj, properties, idx_start='1')
  actions_list = []
  idx = idx_start
  xml_obj.children.each do |child|
    if child.name == "li"
      actions_list += process_xml_tag_li(child, properties, idx)
      idx = idx.next
    end
  end
  actions_list
end

.process_xml_tag_p(xml_obj, properties) ⇒ Object

Produce le “actions” che permettono di disegnare nel PDF, il contenuto del tag p



75
76
77
78
79
80
81
82
# File 'lib/pdf_writing_tools_process.rb', line 75

def self.process_xml_tag_p(xml_obj, properties)
  actions_list = []
  xml_obj.children.each do |child|
    actions_list += process_xml_obj(child, properties)
  end

  PdfWritingToolsActions.new_line_action + actions_list
end

.process_xml_tag_span(xml_obj, properties) ⇒ Object

Al momento assumo che span contenga solo testo, poi eventualmente renderla ricorsiva permettendo a span di contenere altri tag. Sebbene l’xml che sto processando non sia vero html, voglio cercare di dargli il più possibile lo stesso comportamento. All’interno di span, possono essere presenti solo elementi inline. Al momento non controllo questa cosa, quindi preferisco tagliare la testa al toro, assumento che span contenga solo testo.



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/pdf_writing_tools_process.rb', line 102

def self.process_xml_tag_span(xml_obj, properties)
  span_styles_attributes = string_to_attributes(xml_obj[:style])

  color = "#000000"

  if span_styles_attributes.has_key?("color")
    color = span_styles_attributes["color"]
  end

  actions_list = process_xml_text(xml_obj.child, properties, size=12, upcase=false, color)
end

.process_xml_tag_table(xml_obj, properties) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
# File 'lib/pdf_writing_tools_process.rb', line 116

def self.process_xml_tag_table(xml_obj, properties)
  # Processo i figli della tabella che devono essere due
  # thead
  # tbody
  xml_obj.children.each do |child|
  end

  p xml_obj[:width]
  p 20.cm / 7.0
  []
end

.process_xml_tag_tr(xml_obj, properties) ⇒ Object



129
130
131
132
# File 'lib/pdf_writing_tools_process.rb', line 129

def self.process_xml_tag_tr(xml_obj, properties)


end

.process_xml_tag_ul(xml_obj, properties) ⇒ Object

Produce le “actions” che permettono di disegnare nel PDF, la lista contenuta nel tag ul



33
34
35
36
37
38
39
40
41
# File 'lib/pdf_writing_tools_process.rb', line 33

def self.process_xml_tag_ul(xml_obj, properties)
  actions_list = []
  xml_obj.children.each do |child|
    if child.name == "li"
      actions_list += process_xml_obj(child, properties)
    end
  end
  actions_list
end

.process_xml_text(xml_obj, properties, size = 12, upcase = false, color = "#000000") ⇒ Object

Produce la “action” che permette di disegnare nel pdf, il testo con le proprieta’ specificate in proprerties



26
27
28
29
# File 'lib/pdf_writing_tools_process.rb', line 26

def self.process_xml_text(xml_obj, properties, size = 12, upcase = false, color = "#000000")
  data = { text: (upcase ? xml_obj.text.upcase : xml_obj.text) + ' ', styles: properties, size: size, color: color[1..-1] }
  [{ action_name: :draw_formatted_text, data: [data] }]
end

.string_to_attributes(s) ⇒ Object



148
149
150
151
152
153
154
155
156
157
# File 'lib/pdf_writing_tools_process.rb', line 148

def self.string_to_attributes(s)
  result = {}

  s.split(";").each do |el|
    e = el.split(":")
    result[e[0]] = e[1]
  end

  result
end