Class: OoxmlParser::Slide

Inherits:
OOXMLDocumentObject show all
Defined in:
lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb

Constant Summary

Constants inherited from OOXMLDocumentObject

OOXMLDocumentObject::DEFAULT_DIRECTORY_FOR_MEDIA

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from OOXMLDocumentObject

#==, add_to_xmls_stack, copy_file_and_rename_to_zip, copy_media_file, current_xml, dir, encrypted_file?, get_link_from_rels, media_folder, option_enabled?, unzip_file

Constructor Details

#initialize(elements = [], background = nil) ⇒ Slide

Returns a new instance of Slide.



10
11
12
13
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 10

def initialize(elements = [], background = nil)
  @elements = elements
  @background = background
end

Instance Attribute Details

#alternate_contentObject

Returns the value of attribute alternate_content.



8
9
10
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 8

def alternate_content
  @alternate_content
end

#backgroundObject

Returns the value of attribute background.



8
9
10
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 8

def background
  @background
end

#elementsObject

Returns the value of attribute elements.



8
9
10
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 8

def elements
  @elements
end

#timingObject

Returns the value of attribute timing.



8
9
10
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 8

def timing
  @timing
end

#transitionObject

Returns the value of attribute transition.



8
9
10
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 8

def transition
  @transition
end

Class Method Details

.parse(path_to_slide_xml) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 63

def self.parse(path_to_slide_xml)
  slide = Slide.new
  OOXMLDocumentObject.add_to_xmls_stack(path_to_slide_xml)
  doc = Nokogiri::XML(File.open(OOXMLDocumentObject.current_xml))
  doc.xpath('//p:sld/*').each do |slide_node_child|
    case slide_node_child.name
    when 'cSld'
      slide_node_child.xpath('*').each do |common_slide_node_child|
        case common_slide_node_child.name
        when 'spTree'
          common_slide_node_child.xpath('*').each do |slide_element_node|
            case slide_element_node.name
            when 'nvGrpSpPr'
            when 'grpSpPr'
            when 'sp'
              slide.elements << PresentationShape.parse(slide_element_node).dup
            when 'pic'
              slide.elements << DocxPicture.parse(slide_element_node)
            when 'graphicFrame'
              slide.elements << GraphicFrame.parse(slide_element_node)
            when 'grpSp'
              slide.elements << ShapesGrouping.parse(slide_element_node)
            end
          end
        when 'bg'
          slide.background = Background.parse(common_slide_node_child)
        end
      end
    when 'clrMapOvr'
    when 'timing'
      slide.timing = Timing.parse(slide_node_child)
    when 'transition'
      slide.transition = Transition.parse(slide_node_child)
    when 'AlternateContent'
      slide.alternate_content = PresentationAlternateContent.parse(slide_node_child)
    end
  end
  OOXMLDocumentObject.xmls_stack.pop
  slide
end

Instance Method Details

#content_distribute(object, slide_size) ⇒ Object



57
58
59
60
61
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 57

def content_distribute(object, slide_size)
  return [:horizontally, :vertically] if content_horizontal_align(object, slide_size) == :center && content_vertical_align(object, slide_size) == :middle
  return [:horizontally] if content_horizontal_align(object, slide_size) == :center
  return [:vertically] if content_vertical_align(object, slide_size) == :middle
end

#content_horizontal_align(object, slide_size) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 41

def content_horizontal_align(object, slide_size)
  transform = transform_of_object(object)
  return :left if transform.offset.x == 0
  return :center if ((slide_size.width / 2) - (transform.extents.x / 2)).round(1) == transform.offset.x.round(1)
  return :right if (slide_size.width - transform.extents.x).round(1) == transform.offset.x.round(1)
  :unknown
end

#content_vertical_align(object, slide_size) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 49

def content_vertical_align(object, slide_size)
  transform = transform_of_object(object)
  return :top if transform.offset.y == 0
  return :middle if ((slide_size.height / 2) - (transform.extents.y / 2)).round(1) == transform.offset.y.round(1)
  return :bottom if (slide_size.height - transform.extents.y).round(1) == transform.offset.y.round(1)
  :unknown
end

#graphic_framesObject



19
20
21
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 19

def graphic_frames
  @elements.select { |cur_element| cur_element.is_a?(GraphicFrame) }
end

#nonempty_elementsObject



15
16
17
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 15

def nonempty_elements
  @elements.select { |cur_shape| !cur_shape.text_body.paragraphs.first.characters.empty? }
end

#transform_of_object(object) ⇒ OOXMLDocumentObject

Get transform property of object, by object type

Parameters:

  • object (Symbol)

    type of object: :image, :chart, :table, :shape

Returns:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb', line 26

def transform_of_object(object)
  case object
  when :image
    return elements.find { |e| e.is_a? Picture }.properties.transform
  when :chart
    return elements.find { |e| e.is_a? GraphicFrame }.transform
  when :table
    return elements.find { |e| e.is_a? GraphicFrame }.transform
  when :shape
    return elements.find { |e| !e.shape_properties.preset.nil? }.shape_properties.transform
  else
    raise "Dont know this type object - #{object}"
  end
end