powerpoint 1.5 → 1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/.codeclimate.yml +9 -0
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/lib/powerpoint.rb +3 -6
- data/lib/powerpoint/presentation.rb +37 -22
- data/lib/powerpoint/slide/intro.rb +21 -11
- data/lib/powerpoint/slide/pictorial.rb +42 -94
- data/lib/powerpoint/slide/textual.rb +20 -14
- data/lib/powerpoint/util.rb +26 -0
- data/lib/powerpoint/version.rb +1 -1
- data/lib/powerpoint/views/content_type.xml.erb +30 -0
- data/lib/powerpoint/views/intro_slide.xml.erb +74 -0
- data/lib/powerpoint/views/pictorial_rel.xml.erb +5 -0
- data/lib/powerpoint/views/pictorial_slide.xml.erb +87 -0
- data/lib/powerpoint/views/presentation.xml.erb +124 -0
- data/lib/powerpoint/views/presentation.xml.rel.erb +12 -0
- data/lib/powerpoint/views/textual_rel.xml.erb +4 -0
- data/lib/powerpoint/views/textual_slide.xml.erb +78 -0
- data/powerpoint.gemspec +4 -1
- data/samples/pptx/sample.pptx +0 -0
- data/spec/test_spec.rb +1 -2
- data/template/_rels/.rels +5 -1
- data/template/docProps/app.xml +2 -0
- data/template/docProps/core.xml +7 -0
- data/template/ppt/{media/README → _rels/.keep} +0 -0
- data/template/ppt/media/.keep +0 -0
- data/template/ppt/presProps.xml +13 -1
- data/template/ppt/slideLayouts/_rels/slideLayout1.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout10.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout11.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout2.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout3.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout4.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout5.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout6.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout7.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout8.xml.rels +0 -0
- data/template/ppt/slideLayouts/_rels/slideLayout9.xml.rels +0 -0
- data/template/ppt/slideLayouts/slideLayout1.xml +236 -1
- data/template/ppt/slideLayouts/slideLayout10.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout11.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout2.xml +164 -1
- data/template/ppt/slideLayouts/slideLayout3.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout4.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout5.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout6.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout7.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout8.xml +1 -1
- data/template/ppt/slideLayouts/slideLayout9.xml +1 -1
- data/template/ppt/slideMasters/_rels/slideMaster1.xml.rels +1 -1
- data/template/ppt/slideMasters/slideMaster1.xml +504 -1
- data/template/ppt/slides/_rels/.keep +0 -0
- data/template/ppt/tableStyles.xml +0 -0
- data/template/ppt/theme/theme1.xml +0 -0
- data/template/ppt/viewProps.xml +31 -1
- metadata +45 -15
- data/lib/powerpoint/content_type.rb +0 -14
- data/lib/powerpoint/meta.rb +0 -14
- data/lib/powerpoint/relationship.rb +0 -14
- data/lib/powerpoint/slide/relationship.rb +0 -15
- data/samples/images/sample_svg.svg +0 -69
- data/template/[Content_Types].xml +0 -32
- data/template/ppt/_rels/presentation.xml.rels +0 -2
- data/template/ppt/presentation.xml +0 -2
- data/template/ppt/slides/_rels/slide1.xml.rels +0 -2
- data/template/ppt/slides/_rels/slide2.xml.rels +0 -2
- data/template/ppt/slides/slide1.xml +0 -6
- data/template/ppt/slides/slide2.xml +0 -6
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmRkNjczMjVlMGFjMWMxMWYxOTNhY2NhNDFiMjA3MmU1NjU1ODNhZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Mjg1OGZiYmFjY2ZiNjExY2JmYjkxNDk2MWJkMGYyMmI3MTk2ZDM5Zg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTRhMmJiYjI0YWY4MDBhYTliZTYzOTU5ZjU4ODI5N2E0Yzk1OGM4NTI3YjEx
|
10
|
+
NmY2ZjBlZDVjZjZmNzY0YThmMWQ4N2VkYTE5OTdiNjRjOWUxMmZiYmU5ZjIy
|
11
|
+
ZGVjMDhmY2I5ZmM5NmE0Nzc3NzVjZWM4NzI1NmUzZTQxZDJjNTU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWJhZjNkODJkYmUwNGZlMDgxNGZlYzg1NGRhNzMyNGQ0N2JiYmEwZDczMGVk
|
14
|
+
ZjU1Y2UwYjUwYzdhNmYyNTc4ODdiOTczNGIxNmQ1YTlhMzFiN2I3YzZjMzdj
|
15
|
+
ZjljYTZmYjI5MzI1OTM3OTk2ZmZkZDUyMTU0YzRlMDI0YzJlNTI=
|
data/.codeclimate.yml
ADDED
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/powerpoint.rb
CHANGED
@@ -1,18 +1,15 @@
|
|
1
1
|
require "powerpoint/version"
|
2
|
+
require 'powerpoint/util'
|
2
3
|
require 'powerpoint/slide/intro'
|
3
4
|
require 'powerpoint/slide/textual'
|
4
5
|
require 'powerpoint/slide/pictorial'
|
5
|
-
require 'powerpoint/relationship'
|
6
|
-
require 'powerpoint/slide/relationship'
|
7
|
-
require 'powerpoint/content_type'
|
8
|
-
require 'powerpoint/meta'
|
9
6
|
require 'powerpoint/presentation'
|
10
7
|
|
11
8
|
module Powerpoint
|
12
9
|
|
13
10
|
spec = Gem::Specification.find_by_name("powerpoint")
|
14
|
-
|
15
|
-
TEMPLATE_PATH = "#{
|
11
|
+
ROOT_PATH = spec.gem_dir
|
12
|
+
TEMPLATE_PATH = "#{ROOT_PATH}/template/"
|
16
13
|
|
17
14
|
def self.decompress_pptx in_path, out_path
|
18
15
|
Zip::File.open(in_path) do |zip_file|
|
@@ -3,48 +3,63 @@ require 'fileutils'
|
|
3
3
|
require 'tmpdir'
|
4
4
|
|
5
5
|
module Powerpoint
|
6
|
-
class
|
6
|
+
class Presentation
|
7
|
+
include Powerpoint::Util
|
7
8
|
|
8
|
-
attr_reader :pptx_path, :extract_path
|
9
|
+
attr_reader :pptx_path, :extract_path, :slides
|
9
10
|
|
10
11
|
def initialize
|
11
|
-
@
|
12
|
-
@extract_path = File.join Dir.tmpdir, "extract_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}"
|
13
|
-
FileUtils.copy_entry TEMPLATE_PATH, @extract_path
|
12
|
+
@slides = []
|
14
13
|
end
|
15
14
|
|
16
15
|
def add_intro title, subtitile=nil
|
17
|
-
@
|
18
|
-
Powerpoint::Slide::Intro.new
|
16
|
+
existing_intro_slide = @slides.select {|s| s.class == Powerpoint::Slide::Intro}[0]
|
17
|
+
slide = Powerpoint::Slide::Intro.new(presentation: self, title: title, subtitile: subtitile)
|
18
|
+
if existing_intro_slide
|
19
|
+
@slides[@slides.index(existing_intro_slide)] = slide
|
20
|
+
else
|
21
|
+
@slides.insert 0, slide
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
25
|
def add_textual_slide title, content=[]
|
22
|
-
@
|
23
|
-
Powerpoint::Slide::Textual.new @extract_path, title, content, @slide_count
|
24
|
-
Powerpoint::Slide::Relationship.new @extract_path, @slide_count
|
25
|
-
setablish_relationships
|
26
|
+
@slides << Powerpoint::Slide::Textual.new(presentation: self, title: title, content: content)
|
26
27
|
end
|
27
28
|
|
28
29
|
def add_pictorial_slide title, image_path, coords={}
|
29
|
-
@
|
30
|
-
Powerpoint::Slide::Pictorial.new @extract_path, title, image_path, @slide_count, coords
|
31
|
-
setablish_relationships
|
32
|
-
end
|
33
|
-
|
34
|
-
def setablish_relationships
|
35
|
-
if @slide_count > 2
|
36
|
-
Powerpoint::ContentType.new @extract_path, @slide_count
|
37
|
-
Powerpoint::Relationship.new @extract_path, @slide_count
|
38
|
-
Powerpoint::Meta.new @extract_path, @slide_count
|
39
|
-
end
|
30
|
+
@slides << Powerpoint::Slide::Pictorial.new(presentation: self, title: title, image_path: image_path, coords: coords)
|
40
31
|
end
|
41
32
|
|
42
33
|
def save path
|
34
|
+
# Copy template to temp path
|
35
|
+
@extract_path = File.join(Dir.tmpdir, "extract_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}")
|
36
|
+
FileUtils.copy_entry TEMPLATE_PATH, @extract_path
|
37
|
+
|
38
|
+
# Remove keep files
|
39
|
+
FileUtils.rm_rf("#{@extract_path}/ppt/_rels/.keep")
|
40
|
+
FileUtils.rm_rf("#{@extract_path}/ppt/media/.keep")
|
41
|
+
FileUtils.rm_rf("#{@extract_path}/ppt/slides/_rels/.keep")
|
42
|
+
|
43
|
+
# Render/save generic stuff
|
44
|
+
File.open("#{extract_path}/[Content_Types].xml", 'w') { |f| f << render_view('content_type.xml.erb') }
|
45
|
+
File.open("#{extract_path}/ppt/_rels/presentation.xml.rels", 'w') { |f| f << render_view('presentation.xml.rel.erb') }
|
46
|
+
File.open("#{extract_path}/ppt/presentation.xml", 'w') { |f| f << render_view('presentation.xml.erb') }
|
47
|
+
|
48
|
+
# Save slides
|
49
|
+
slides.each_with_index do |slide, index|
|
50
|
+
slide.save(index + 1)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Create .pptx file
|
43
54
|
@pptx_path = path
|
44
55
|
File.delete(path) if File.exist?(path)
|
45
56
|
Powerpoint.compress_pptx @extract_path, @pptx_path
|
46
57
|
FileUtils.rm_rf(@extract_path)
|
47
58
|
path
|
48
59
|
end
|
60
|
+
|
61
|
+
def file_types
|
62
|
+
slides.select {|slide| slide.class == Powerpoint::Slide::Pictorial}.map(&:file_type).uniq
|
63
|
+
end
|
49
64
|
end
|
50
65
|
end
|
@@ -1,21 +1,31 @@
|
|
1
|
-
require 'zip/filesystem'
|
2
1
|
require 'fileutils'
|
2
|
+
require 'erb'
|
3
3
|
|
4
4
|
module Powerpoint
|
5
5
|
module Slide
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
class Intro
|
7
|
+
include Powerpoint::Util
|
8
|
+
|
9
|
+
attr_reader :title, :subtitile
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
def initialize(options={})
|
12
|
+
require_arguments [:title, :subtitile], options
|
13
|
+
options.each {|k, v| instance_variable_set("@#{k}", v)}
|
14
|
+
end
|
15
|
+
|
16
|
+
def save(index)
|
17
|
+
save_rel_xml(index)
|
18
|
+
save_slide_xml(index)
|
19
|
+
end
|
13
20
|
|
14
|
-
|
15
|
-
|
21
|
+
private
|
22
|
+
|
23
|
+
def save_rel_xml index
|
24
|
+
File.open("#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", 'w'){ |f| f << render_view('textual_rel.xml.erb') }
|
25
|
+
end
|
16
26
|
|
17
|
-
|
18
|
-
File.open(
|
27
|
+
def save_slide_xml index
|
28
|
+
File.open("#{extract_path}/ppt/slides/slide#{index}.xml", 'w'){ |f| f << render_view('intro_slide.xml.erb') }
|
19
29
|
end
|
20
30
|
end
|
21
31
|
end
|
@@ -1,108 +1,56 @@
|
|
1
1
|
require 'zip/filesystem'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'fastimage'
|
4
|
+
require 'erb'
|
3
5
|
|
4
6
|
module Powerpoint
|
5
7
|
module Slide
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
image_name = File.basename(image_path)
|
10
|
-
FileUtils.copy_file(image_path, "#{extract_path}/ppt/media/#{image_name}")
|
8
|
+
class Pictorial
|
9
|
+
include Powerpoint::Util
|
11
10
|
|
12
|
-
|
13
|
-
<a:xfrm>
|
14
|
-
<a:off x="' + coords[:x].to_s + '" y="' + coords[:y].to_s + '" />
|
15
|
-
<a:ext cx="' + coords[:cx].to_s + '" cy="' + coords[:cy].to_s + '" />
|
16
|
-
</a:xfrm>
|
17
|
-
</p:spPr>'
|
11
|
+
attr_reader :image_name, :title, :coords, :image_path
|
18
12
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
def initialize(options={})
|
14
|
+
require_arguments [:presentation, :title, :image_path], options
|
15
|
+
options.each {|k, v| instance_variable_set("@#{k}", v)}
|
16
|
+
@coords = default_coords unless @coords.any?
|
17
|
+
@image_name = File.basename(@image_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def save(index)
|
21
|
+
copy_media_to_extract_path
|
22
|
+
save_rel_xml(index)
|
23
|
+
save_slide_xml(index)
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
-
File.
|
26
|
+
def file_type
|
27
|
+
File.extname(image_name).gsub('.', '')
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
27
31
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
<p:grpSpPr>
|
38
|
-
<a:xfrm>
|
39
|
-
<a:off x="0" y="0" />
|
40
|
-
<a:ext cx="0" cy="0" />
|
41
|
-
<a:chOff x="0" y="0" />
|
42
|
-
<a:chExt cx="0" cy="0" />
|
43
|
-
</a:xfrm>
|
44
|
-
</p:grpSpPr>
|
45
|
-
<p:sp>
|
46
|
-
<p:nvSpPr>
|
47
|
-
<p:cNvPr id="2" name="Title 1" />
|
48
|
-
<p:cNvSpPr>
|
49
|
-
<a:spLocks noGrp="1" />
|
50
|
-
</p:cNvSpPr>
|
51
|
-
<p:nvPr>
|
52
|
-
<p:ph type="title" />
|
53
|
-
</p:nvPr>
|
54
|
-
</p:nvSpPr>
|
55
|
-
<p:spPr />
|
56
|
-
<p:txBody>
|
57
|
-
<a:bodyPr />
|
58
|
-
<a:lstStyle />
|
59
|
-
<a:p>
|
60
|
-
<a:r>
|
61
|
-
<a:rPr lang="en-US" dirty="0" smtClean="0" />
|
62
|
-
<a:t>' + title + '</a:t>
|
63
|
-
</a:r>
|
64
|
-
<a:endParaRPr lang="en-US" dirty="0" />
|
65
|
-
</a:p>
|
66
|
-
</p:txBody>
|
67
|
-
</p:sp>
|
68
|
-
<p:pic>
|
69
|
-
<p:nvPicPr>
|
70
|
-
<p:cNvPr id="4" name="Content Placeholder 3" />
|
71
|
-
<p:cNvPicPr>
|
72
|
-
<a:picLocks noGrp="1" noChangeAspect="1" />
|
73
|
-
</p:cNvPicPr>
|
74
|
-
<p:nvPr>
|
75
|
-
<p:ph idx="1" />
|
76
|
-
</p:nvPr>
|
77
|
-
</p:nvPicPr>
|
78
|
-
<p:blipFill>
|
79
|
-
<a:blip r:embed="rId2">
|
80
|
-
<a:extLst>
|
81
|
-
<a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
|
82
|
-
<a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0" />
|
83
|
-
</a:ext>
|
84
|
-
</a:extLst>
|
85
|
-
</a:blip>
|
86
|
-
<a:stretch>
|
87
|
-
<a:fillRect />
|
88
|
-
</a:stretch>
|
89
|
-
</p:blipFill>' + coords_tag +
|
90
|
-
'</p:pic>
|
91
|
-
</p:spTree>
|
92
|
-
<p:extLst>
|
93
|
-
<p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}">
|
94
|
-
<p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="1474098577" />
|
95
|
-
</p:ext>
|
96
|
-
</p:extLst>
|
97
|
-
</p:cSld>
|
98
|
-
<p:clrMapOvr>
|
99
|
-
<a:masterClrMapping />
|
100
|
-
</p:clrMapOvr>
|
101
|
-
</p:sld>'
|
32
|
+
def default_coords
|
33
|
+
slide_width = pixle_to_pt(720); slide_height = pixle_to_pt(540); default_width = pixle_to_pt(550)
|
34
|
+
return {} unless dimensions = FastImage.size(image_path)
|
35
|
+
image_width, image_height = dimensions.map {|d| pixle_to_pt(d)}
|
36
|
+
new_width = default_width < image_width ? default_width : image_width
|
37
|
+
ratio = new_width / image_width.to_f
|
38
|
+
new_height = (image_height.to_f * ratio).round
|
39
|
+
{x: (slide_width / 2) - (new_width/2), y: pixle_to_pt(120), cx: new_width, cy: new_height}
|
40
|
+
end
|
102
41
|
|
103
|
-
|
104
|
-
|
42
|
+
def copy_media_to_extract_path
|
43
|
+
FileUtils.copy_file(@image_path, "#{extract_path}/ppt/media/#{@image_name}")
|
105
44
|
end
|
45
|
+
|
46
|
+
def save_rel_xml index
|
47
|
+
File.open("#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", 'w'){ |f| f << render_view('pictorial_rel.xml.erb') }
|
48
|
+
end
|
49
|
+
|
50
|
+
def save_slide_xml index
|
51
|
+
File.open("#{extract_path}/ppt/slides/slide#{index}.xml", 'w'){ |f| f << render_view('pictorial_slide.xml.erb') }
|
52
|
+
end
|
53
|
+
|
106
54
|
end
|
107
55
|
end
|
108
56
|
end
|
@@ -1,25 +1,31 @@
|
|
1
|
-
require 'zip/filesystem'
|
2
1
|
require 'fileutils'
|
2
|
+
require 'erb'
|
3
3
|
|
4
4
|
module Powerpoint
|
5
5
|
module Slide
|
6
|
-
class
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
class Textual
|
7
|
+
include Powerpoint::Util
|
8
|
+
|
9
|
+
attr_reader :title, :content
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
def initialize(options={})
|
12
|
+
require_arguments [:title, :content], options
|
13
|
+
options.each {|k, v| instance_variable_set("@#{k}", v)}
|
14
|
+
end
|
15
|
+
|
16
|
+
def save(index)
|
17
|
+
save_rel_xml(index)
|
18
|
+
save_slide_xml(index)
|
19
|
+
end
|
13
20
|
|
14
|
-
|
15
|
-
content.each do |i|
|
16
|
-
content_xml += '<a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>' + i.to_s + '</a:t></a:r></a:p>'
|
17
|
-
end
|
21
|
+
private
|
18
22
|
|
19
|
-
|
23
|
+
def save_rel_xml index
|
24
|
+
File.open("#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", 'w'){ |f| f << render_view('textual_rel.xml.erb') }
|
25
|
+
end
|
20
26
|
|
21
|
-
|
22
|
-
File.open(
|
27
|
+
def save_slide_xml index
|
28
|
+
File.open("#{extract_path}/ppt/slides/slide#{index}.xml", 'w'){ |f| f << render_view('textual_slide.xml.erb') }
|
23
29
|
end
|
24
30
|
end
|
25
31
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Powerpoint
|
2
|
+
module Util
|
3
|
+
|
4
|
+
def pixle_to_pt(px)
|
5
|
+
px * 12700
|
6
|
+
end
|
7
|
+
|
8
|
+
def render_view(filename)
|
9
|
+
view_contents = read_template(filename)
|
10
|
+
renderer = ERB.new(view_contents)
|
11
|
+
renderer.result( binding )
|
12
|
+
end
|
13
|
+
|
14
|
+
def read_template(filename)
|
15
|
+
File.read(Powerpoint::ROOT_PATH + "/lib/powerpoint/views/#{filename}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def require_arguments(required_argements, argements)
|
19
|
+
raise ArgumentError unless required_argements.all? {|required_key| argements.keys.include? required_key}
|
20
|
+
end
|
21
|
+
|
22
|
+
def extract_path
|
23
|
+
@presentation.extract_path
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/powerpoint/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
3
|
+
<Default ContentType="application/xml" Extension="xml"/>
|
4
|
+
<Default ContentType="application/vnd.openxmlformats-package.relationships+xml" Extension="rels"/>
|
5
|
+
<% file_types.each do |type| %>
|
6
|
+
<Default ContentType="image/<%= type %>" Extension="<%= type %>"/>
|
7
|
+
<% end %>
|
8
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml" PartName="/ppt/presentation.xml"/>
|
9
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" PartName="/ppt/slideMasters/slideMaster1.xml"/>
|
10
|
+
<% slides.each_with_index do |slide, index| %>
|
11
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide<%= index + 1 %>.xml"/>
|
12
|
+
<% end %>
|
13
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.presProps+xml" PartName="/ppt/presProps.xml"/>
|
14
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml" PartName="/ppt/viewProps.xml"/>
|
15
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml" PartName="/ppt/theme/theme1.xml"/>
|
16
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml" PartName="/ppt/tableStyles.xml"/>
|
17
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout1.xml"/>
|
18
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout2.xml"/>
|
19
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout3.xml"/>
|
20
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout4.xml"/>
|
21
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout5.xml"/>
|
22
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout6.xml"/>
|
23
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout7.xml"/>
|
24
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout8.xml"/>
|
25
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout9.xml"/>
|
26
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout10.xml"/>
|
27
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" PartName="/ppt/slideLayouts/slideLayout11.xml"/>
|
28
|
+
<Override ContentType="application/vnd.openxmlformats-package.core-properties+xml" PartName="/docProps/core.xml"/>
|
29
|
+
<Override ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" PartName="/docProps/app.xml"/>
|
30
|
+
</Types>
|