powerpoint 1.4

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.
Files changed (61) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.rdoc +81 -0
  6. data/Rakefile +7 -0
  7. data/lib/powerpoint.rb +40 -0
  8. data/lib/powerpoint/content_type.rb +14 -0
  9. data/lib/powerpoint/meta.rb +14 -0
  10. data/lib/powerpoint/presentation.rb +50 -0
  11. data/lib/powerpoint/relationship.rb +14 -0
  12. data/lib/powerpoint/slide/intro.rb +22 -0
  13. data/lib/powerpoint/slide/pictorial.rb +108 -0
  14. data/lib/powerpoint/slide/relationship.rb +15 -0
  15. data/lib/powerpoint/slide/textual.rb +26 -0
  16. data/lib/powerpoint/version.rb +3 -0
  17. data/powerpoint.gemspec +28 -0
  18. data/samples/images/sample_gif.gif +0 -0
  19. data/samples/images/sample_jpg.jpg +0 -0
  20. data/samples/images/sample_png.png +0 -0
  21. data/samples/images/sample_svg.svg +69 -0
  22. data/samples/pptx/sample.pptx +0 -0
  23. data/spec/test_spec.rb +20 -0
  24. data/template/[Content_Types].xml +32 -0
  25. data/template/_rels/.rels +2 -0
  26. data/template/ppt/_rels/presentation.xml.rels +2 -0
  27. data/template/ppt/media/README +0 -0
  28. data/template/ppt/presProps.xml +2 -0
  29. data/template/ppt/presentation.xml +2 -0
  30. data/template/ppt/slideLayouts/_rels/slideLayout1.xml.rels +2 -0
  31. data/template/ppt/slideLayouts/_rels/slideLayout10.xml.rels +2 -0
  32. data/template/ppt/slideLayouts/_rels/slideLayout11.xml.rels +2 -0
  33. data/template/ppt/slideLayouts/_rels/slideLayout2.xml.rels +2 -0
  34. data/template/ppt/slideLayouts/_rels/slideLayout3.xml.rels +2 -0
  35. data/template/ppt/slideLayouts/_rels/slideLayout4.xml.rels +2 -0
  36. data/template/ppt/slideLayouts/_rels/slideLayout5.xml.rels +2 -0
  37. data/template/ppt/slideLayouts/_rels/slideLayout6.xml.rels +2 -0
  38. data/template/ppt/slideLayouts/_rels/slideLayout7.xml.rels +2 -0
  39. data/template/ppt/slideLayouts/_rels/slideLayout8.xml.rels +2 -0
  40. data/template/ppt/slideLayouts/_rels/slideLayout9.xml.rels +2 -0
  41. data/template/ppt/slideLayouts/slideLayout1.xml +2 -0
  42. data/template/ppt/slideLayouts/slideLayout10.xml +2 -0
  43. data/template/ppt/slideLayouts/slideLayout11.xml +2 -0
  44. data/template/ppt/slideLayouts/slideLayout2.xml +2 -0
  45. data/template/ppt/slideLayouts/slideLayout3.xml +2 -0
  46. data/template/ppt/slideLayouts/slideLayout4.xml +2 -0
  47. data/template/ppt/slideLayouts/slideLayout5.xml +2 -0
  48. data/template/ppt/slideLayouts/slideLayout6.xml +2 -0
  49. data/template/ppt/slideLayouts/slideLayout7.xml +2 -0
  50. data/template/ppt/slideLayouts/slideLayout8.xml +2 -0
  51. data/template/ppt/slideLayouts/slideLayout9.xml +2 -0
  52. data/template/ppt/slideMasters/_rels/slideMaster1.xml.rels +2 -0
  53. data/template/ppt/slideMasters/slideMaster1.xml +2 -0
  54. data/template/ppt/slides/_rels/slide1.xml.rels +2 -0
  55. data/template/ppt/slides/_rels/slide2.xml.rels +2 -0
  56. data/template/ppt/slides/slide1.xml +6 -0
  57. data/template/ppt/slides/slide2.xml +6 -0
  58. data/template/ppt/tableStyles.xml +2 -0
  59. data/template/ppt/theme/theme1.xml +2 -0
  60. data/template/ppt/viewProps.xml +2 -0
  61. metadata +161 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjNkNDQ2MDRjZjlkN2QxZTE3ODMzZDE4NDNlOTYwY2U2NjEzYzA4OA==
5
+ data.tar.gz: !binary |-
6
+ MTNjNjk2MTQ2NjczNTU3NDI3OTRiYjA4ZGE4NDYzNmRiNGQ4YzJiNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YTYyY2Q1MTFhNzQ4Y2UzNzQ0NTJiMmYwY2VkZDhlZjZmMTdiNTRhMTc0ODUw
10
+ NDNmY2YxZmNmMDZjYjJmZGQ0OWExYmQ4MDExZjUxZDE4MWQzNDViOGMyMDU1
11
+ NjVlMGQxY2ZlM2YzMjNlMGM1ZGVjZTg2NDg2ZTBiZjg5MTU5NWU=
12
+ data.tar.gz: !binary |-
13
+ NTcxNGJkZjVjMzQ4NzQ3YTcxMjQ3OTk5MTk4ODVlMGI1NGVkY2FmZmEyYmI2
14
+ YmZhZjE2YzViODBjZmI5NmNhYzg2MDM5YWI0OTE5NDkwZTg3MjRlY2MyYzM2
15
+ M2E3OTNjOGJiNTEwYWNlZGUwMzE1ZDVjNjIyYzM5MjJlMzZmNDc=
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in powerpoint.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,81 @@
1
+ = 'powerpoint' gem -- for creating PowerPoint Slides in Ruby.
2
+
3
+ 'powerpoint' is a Ruby gem that can generate PowerPoint files(pptx).
4
+
5
+
6
+ == Installation
7
+
8
+ 'powerpont' can be used from the command line or as part of a Ruby web framework. To install the gem using terminal, run the following command:
9
+
10
+ gem install powerpoint
11
+
12
+ To use it in Rails, add this line to your Gemfile:
13
+
14
+ gem "powerpoint"
15
+
16
+
17
+ == Basic Usage
18
+
19
+ 'powerpoint' gem can generate a PowerPoint presentaion based on a standard template:
20
+
21
+ require 'powerpoint'
22
+
23
+ @deck = Powerpoint::Presentation.new
24
+
25
+ # Creating an introduction slide:
26
+ title = 'Bicycle Of the Mind'
27
+ subtitle = 'created by Steve Jobs'
28
+ @deck.add_intro title, subtitle
29
+
30
+ # Creating a text-only slide:
31
+ # Title must be a string.
32
+ # Content must be an array of strings that will be displayed as bullet items.
33
+ title = 'Why Mac?'
34
+ content = ['Its cool!', 'Its light.']
35
+ @deck.add_textual_slide title, content
36
+
37
+ # Creating an image Slide:
38
+ # It will contain a title as string.
39
+ # and an embeded image
40
+ title = 'Everyone loves Macs:'
41
+ image_path = 'samples/images/sample_gif.gif'
42
+ @deck.add_pictorial_slide title, image_path
43
+
44
+ # Specifying coordinates and image size for an embeded image.
45
+ # x and y values define the position of the image on the slide.
46
+ # cx and cy define the width and height of the image.
47
+ # x, y, cx, cy are in points. Each pixel is 12700 points.
48
+ # coordinates parameter is optional.
49
+ coords = {x: 124200, y: 3356451, cx: 2895600, cy: 1013460}
50
+ @deck.add_pictorial_slide title, image_path, coords
51
+
52
+ # Saving the pptx file to the current directory.
53
+ @deck.save('test.pptx')
54
+
55
+ == Compatibility
56
+
57
+ 'powerpoint' gem has been tested with LibreOffice(4.2.1.1) and Apache OpenOffice(4.0.1) on Mac OS X Mavericks, Microsoft PowerPoint 2010 on Windows 7 and Google Docs(latest version as of March 2014).
58
+
59
+ == Contributing
60
+
61
+ Contributions are welcomed. You can fork a repository, add your code changes to the forked branch, ensure all existing unit tests pass, create new unit tests cover your new changes and finally create a pull request.
62
+
63
+ After forking and then cloning the repository locally, install Bundler and then use it
64
+ to install the development gem dependecies:
65
+
66
+ gem install bundler
67
+ bundle install
68
+
69
+ Once this is complete, you should be able to run the test suite:
70
+
71
+ rake
72
+
73
+
74
+ == Bug Reporting
75
+
76
+ Please use the {Issues}[https://github.com/pythonicrubyist/powerpoint/issues] page to report bugs or suggest new enhancements.
77
+
78
+
79
+ == License
80
+
81
+ Powerpoint has been published under {MIT License}[https://github.com/pythonicrubyist/powerpoint/blob/master/LICENSE.txt]
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+
6
+ # If you want to make this the default task
7
+ task :default => :spec
@@ -0,0 +1,40 @@
1
+ require "powerpoint/version"
2
+ require 'powerpoint/slide/intro'
3
+ require 'powerpoint/slide/textual'
4
+ require 'powerpoint/slide/pictorial'
5
+ require 'powerpoint/relationship'
6
+ require 'powerpoint/slide/relationship'
7
+ require 'powerpoint/content_type'
8
+ require 'powerpoint/meta'
9
+ require 'powerpoint/presentation'
10
+
11
+ module Powerpoint
12
+
13
+ spec = Gem::Specification.find_by_name("powerpoint")
14
+ gem_root = spec.gem_dir
15
+ TEMPLATE_PATH = "#{gem_root}/template/"
16
+
17
+ def self.decompress_pptx in_path, out_path
18
+ Zip::File.open(in_path) do |zip_file|
19
+ zip_file.each do |f|
20
+ f_path = File.join(out_path, f.name)
21
+ FileUtils.mkdir_p(File.dirname(f_path))
22
+ zip_file.extract(f, f_path) unless File.exist?(f_path)
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.compress_pptx in_path, out_path
28
+ Zip::File.open(out_path, Zip::File::CREATE) do |zip_file|
29
+ Dir.glob("#{in_path}/**/*", ::File::FNM_DOTMATCH).each do |path|
30
+ zip_path = path.gsub("#{in_path}/","")
31
+ next if zip_path == "." || zip_path == ".." || zip_path.match(/DS_Store/)
32
+ begin
33
+ zip_file.add(zip_path, path)
34
+ rescue Zip::ZipEntryExistsError
35
+ raise "#{out_path} allready exists!"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ class Powerpoint::ContentType
6
+ def initialize extract_path, sllide_number
7
+ xml = '<Override PartName="/ppt/slides/slide' + sllide_number.to_s + '.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/></Types>'
8
+ path = "#{extract_path}/[Content_Types].xml"
9
+ template = File.read path
10
+ template.gsub!('</Types>', xml)
11
+ File.open(path, 'w'){ |f| f << template }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ class Powerpoint::Meta
6
+ def initialize extract_path, sllide_number
7
+ xml = '<p:sldId id="257" r:id="rId' + (sllide_number+666).to_s + '"/></p:sldIdLst>'
8
+ path = "#{extract_path}/ppt/presentation.xml"
9
+ template = File.read path
10
+ template.gsub!('</p:sldIdLst>', xml)
11
+ File.open(path, 'w'){ |f| f << template }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,50 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+ require 'tmpdir'
4
+
5
+ module Powerpoint
6
+ class Powerpoint::Presentation
7
+
8
+ attr_reader :pptx_path, :extract_path
9
+
10
+ def initialize
11
+ @slide_count = 0
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
14
+ end
15
+
16
+ def add_intro title, subtitile=nil
17
+ @slide_count += 1
18
+ Powerpoint::Slide::Intro.new @extract_path, title, subtitile
19
+ end
20
+
21
+ def add_textual_slide title, content=[]
22
+ @slide_count += 1
23
+ Powerpoint::Slide::Textual.new @extract_path, title, content, @slide_count
24
+ Powerpoint::Slide::Relationship.new @extract_path, @slide_count
25
+ setablish_relationships
26
+ end
27
+
28
+ def add_pictorial_slide title, image_path, coords={}
29
+ @slide_count += 1
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
40
+ end
41
+
42
+ def save path
43
+ @pptx_path = path
44
+ File.delete(path) if File.exist?(path)
45
+ Powerpoint.compress_pptx @extract_path, @pptx_path
46
+ FileUtils.rm_rf(@extract_path)
47
+ path
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ class Powerpoint::Relationship
6
+ def initialize extract_path, sllide_number
7
+ xml = '<Relationship Id="rId'+ (sllide_number+666).to_s + '" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide' + sllide_number.to_s + '.xml"/></Relationships>'
8
+ path = "#{extract_path}/ppt/_rels/presentation.xml.rels"
9
+ template = File.read path
10
+ template.gsub!('</Relationships>', xml)
11
+ File.open(path, 'w'){ |f| f << template }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Powerpoint::Slide::Intro
7
+ def initialize extract_path, title, subtitile=nil
8
+ template_path = "#{TEMPLATE_PATH}/ppt/slides/slide1.xml"
9
+ xml = File.read template_path
10
+
11
+ xml_title = '<a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>' + title.to_s + '</a:t></a:r><a:endParaRPr lang="en-US" dirty="0"/></a:p>'
12
+ xml.gsub!('PRESENTATION_TITLE_PACEHOLDER', xml_title)
13
+
14
+ xml_subtitle = '<a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>' + subtitile.to_s+ '</a:t></a:r><a:endParaRPr lang="en-US" dirty="0"/></a:p>'
15
+ xml.gsub!('PRESENTATION_SUBTITLE_PACEHOLDER', xml_subtitle)
16
+
17
+ intro_slide_path = "#{extract_path}/ppt/slides/slide1.xml"
18
+ File.open(intro_slide_path, 'w'){ |f| f << xml }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,108 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Powerpoint::Slide::Pictorial
7
+ def initialize extract_path, title, image_path, slide_number, coords={}
8
+
9
+ image_name = File.basename(image_path)
10
+ FileUtils.copy_file(image_path, "#{extract_path}/ppt/media/#{image_name}")
11
+
12
+ coords_tag = (coords.empty?) ? '' : '<p:spPr>
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>'
18
+
19
+ rel_xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
20
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
21
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="../media/' + image_name + '" />
22
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml" />
23
+ </Relationships>'
24
+
25
+ rel_path = "#{extract_path}/ppt/slides/_rels/slide#{slide_number}.xml.rels"
26
+ File.open(rel_path, 'w'){ |f| f << rel_xml }
27
+
28
+ slide_xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
29
+ <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
30
+ <p:cSld>
31
+ <p:spTree>
32
+ <p:nvGrpSpPr>
33
+ <p:cNvPr id="1" name="" />
34
+ <p:cNvGrpSpPr />
35
+ <p:nvPr />
36
+ </p:nvGrpSpPr>
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>'
102
+
103
+ slide_path = "#{extract_path}/ppt/slides/slide#{slide_number}.xml"
104
+ File.open(slide_path, 'w'){ |f| f << slide_xml }
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,15 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Powerpoint::Slide::Relationship
7
+ def initialize extract_path, slide_number
8
+ xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
9
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Target="../slideLayouts/slideLayout2.xml"/></Relationships>'
10
+ path = "#{extract_path}/ppt/slides/_rels/slide#{slide_number}.xml.rels"
11
+ File.open(path, 'w'){ |f| f << xml }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Powerpoint::Slide::Textual
7
+ def initialize extract_path, title, content, slide_number
8
+ template_path = "#{TEMPLATE_PATH}/ppt/slides/slide2.xml"
9
+ xml = File.read template_path
10
+
11
+ title_xml = '<a:p><a:r><a:rPr lang="en-US" dirty="0" smtClean="0"/><a:t>'+ title.to_s + '</a:t></a:r><a:endParaRPr lang="en-US" dirty="0"/></a:p>'
12
+ xml.gsub!('SLIDE_TITLE_PACEHOLDER', title_xml)
13
+
14
+ content_xml = ''
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
18
+
19
+ xml.gsub!('CONTENT_PACEHOLDER', content_xml)
20
+
21
+ slide_path = "#{extract_path}/ppt/slides/slide#{slide_number}.xml"
22
+ File.open(slide_path, 'w'){ |f| f << xml }
23
+ end
24
+ end
25
+ end
26
+ end