├── .codeclimate.yml
├── .gitignore
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── lib
├── powerpoint.rb
└── powerpoint
│ ├── compression.rb
│ ├── presentation.rb
│ ├── slide
│ ├── intro.rb
│ ├── pictorial.rb
│ ├── picture_description.rb
│ ├── text_picture_split.rb
│ └── textual.rb
│ ├── util.rb
│ ├── version.rb
│ └── views
│ ├── app.xml.erb
│ ├── content_type.xml.erb
│ ├── intro_slide.xml.erb
│ ├── pictorial_rel.xml.erb
│ ├── pictorial_slide.xml.erb
│ ├── picture_description_rels.xml.erb
│ ├── picture_description_slide.xml.erb
│ ├── presentation.xml.erb
│ ├── presentation.xml.rel.erb
│ ├── text_picture_split_rel.xml.erb
│ ├── text_picture_split_slide.xml.erb
│ ├── textual_rel.xml.erb
│ └── textual_slide.xml.erb
├── powerpoint.gemspec
├── samples
├── images
│ ├── sample_gif.gif
│ ├── sample_jpg.jpg
│ └── sample_png.png
└── pptx
│ └── sample.pptx
├── spec
└── test_spec.rb
└── template
├── _rels
└── .rels
├── docProps
└── core.xml
└── ppt
├── _rels
└── .keep
├── media
└── .keep
├── presProps.xml
├── slideLayouts
├── _rels
│ ├── slideLayout1.xml.rels
│ ├── slideLayout10.xml.rels
│ ├── slideLayout11.xml.rels
│ ├── slideLayout2.xml.rels
│ ├── slideLayout3.xml.rels
│ ├── slideLayout4.xml.rels
│ ├── slideLayout5.xml.rels
│ ├── slideLayout6.xml.rels
│ ├── slideLayout7.xml.rels
│ ├── slideLayout8.xml.rels
│ └── slideLayout9.xml.rels
├── slideLayout1.xml
├── slideLayout10.xml
├── slideLayout11.xml
├── slideLayout2.xml
├── slideLayout3.xml
├── slideLayout4.xml
├── slideLayout5.xml
├── slideLayout6.xml
├── slideLayout7.xml
├── slideLayout8.xml
└── slideLayout9.xml
├── slideMasters
├── _rels
│ └── slideMaster1.xml.rels
└── slideMaster1.xml
├── slides
└── _rels
│ └── .keep
├── tableStyles.xml
├── theme
└── theme1.xml
└── viewProps.xml
/.codeclimate.yml:
--------------------------------------------------------------------------------
1 | ---
2 | engines:
3 | rubocop:
4 | enabled: true
5 | ratings:
6 | paths:
7 | - powerpoint/**
8 | exclude_paths:
9 | - spec/**/*
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
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
18 | .pryrc
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | # Specify your gem's dependencies in powerpoint.gemspec
4 | gemspec
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
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.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://badge.fury.io/rb/powerpointk)
2 | [](https://ruby-gem-downloads-badge.herokuapp.com/powerpoint?type=total&total_label=downloads)
3 |
4 | # 'powerpoint' gem -- for creating PowerPoint Slides in Ruby.
5 |
6 | 'powerpoint' is a Ruby gem that can generate PowerPoint files(pptx).
7 |
8 | ## Installation
9 |
10 | 'powerpoint' 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:
11 |
12 | gem install powerpoint
13 |
14 | To use it in Rails, add this line to your Gemfile:
15 |
16 | gem "powerpoint"
17 |
18 |
19 | ## Basic Usage
20 |
21 | 'powerpoint' gem can generate a PowerPoint presentaion based on a standard template:
22 |
23 | ```ruby
24 | require 'powerpoint'
25 |
26 | @deck = Powerpoint::Presentation.new
27 |
28 | # Creating an introduction slide:
29 | title = 'Bicycle Of the Mind'
30 | subtitle = 'created by Steve Jobs'
31 | @deck.add_intro title, subtitle
32 |
33 | # Creating a text-only slide:
34 | # Title must be a string.
35 | # Content must be an array of strings that will be displayed as bullet items.
36 | title = 'Why Mac?'
37 | content = ['Its cool!', 'Its light.']
38 | @deck.add_textual_slide title, content
39 |
40 | # Creating an image Slide:
41 | # It will contain a title as string.
42 | # and an embeded image
43 | title = 'Everyone loves Macs:'
44 | image_path = 'samples/images/sample_gif.gif'
45 | @deck.add_pictorial_slide title, image_path
46 |
47 | # Specifying coordinates and image size for an embeded image.
48 | # x and y values define the position of the image on the slide.
49 | # cx and cy define the width and height of the image.
50 | # x, y, cx, cy are in points. Each pixel is 12700 points.
51 | # coordinates parameter is optional.
52 | coords = {x: 124200, y: 3356451, cx: 2895600, cy: 1013460}
53 | @deck.add_pictorial_slide title, image_path, coords
54 |
55 | # Saving the pptx file to the current directory.
56 | @deck.save('test.pptx')
57 | ```
58 |
59 | ## Compatibility
60 |
61 | '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).
62 |
63 | ## Contributing
64 |
65 | 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.
66 |
67 | After forking and then cloning the repository locally, install Bundler and then use it to install the development gem dependecies:
68 |
69 | gem install bundler
70 | bundle install
71 |
72 | Once this is complete, you should be able to run the test suite:
73 |
74 | rake
75 |
76 |
77 | ## Bug Reporting
78 |
79 | Please use the [Issues](https://github.com/pythonicrubyist/powerpoint/issues) page to report bugs or suggest new enhancements.
80 |
81 | ## License
82 |
83 | Powerpoint has been published under [MIT License](https://github.com/pythonicrubyist/powerpoint/blob/master/LICENSE.txt)
84 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
/lib/powerpoint.rb:
--------------------------------------------------------------------------------
1 | require "powerpoint/version"
2 | require 'powerpoint/util'
3 | require 'powerpoint/slide/intro'
4 | require 'powerpoint/slide/textual'
5 | require 'powerpoint/slide/pictorial'
6 | require 'powerpoint/slide/text_picture_split'
7 | require 'powerpoint/slide/picture_description'
8 | require 'powerpoint/compression'
9 | require 'powerpoint/presentation'
10 |
11 | module Powerpoint
12 | ROOT_PATH = File.expand_path("../..", __FILE__)
13 | TEMPLATE_PATH = "#{ROOT_PATH}/template/"
14 | VIEW_PATH = "#{ROOT_PATH}/lib/powerpoint/views/"
15 | end
16 |
--------------------------------------------------------------------------------
/lib/powerpoint/compression.rb:
--------------------------------------------------------------------------------
1 | module Powerpoint
2 | def self.decompress_pptx(in_path, out_path)
3 | Zip::File.open(in_path) do |zip_file|
4 | zip_file.each do |f|
5 | f_path = File.join(out_path, f.name)
6 | FileUtils.mkdir_p(File.dirname(f_path))
7 | zip_file.extract(f, f_path) unless File.exist?(f_path)
8 | end
9 | end
10 | end
11 |
12 | def self.compress_pptx(in_path, out_path)
13 | Zip::File.open(out_path, Zip::File::CREATE) do |zip_file|
14 | Dir.glob("#{in_path}/**/*", ::File::FNM_DOTMATCH).each do |path|
15 | zip_path = path.gsub("#{in_path}/","")
16 | next if zip_path == "." || zip_path == ".." || zip_path.match(/DS_Store/)
17 | begin
18 | zip_file.add(zip_path, path)
19 | rescue Zip::ZipEntryExistsError
20 | raise "#{out_path} already exists!"
21 | end
22 | end
23 | end
24 | end
25 | end
26 |
--------------------------------------------------------------------------------
/lib/powerpoint/presentation.rb:
--------------------------------------------------------------------------------
1 | require 'zip/filesystem'
2 | require 'fileutils'
3 | require 'tmpdir'
4 |
5 | module Powerpoint
6 | class Presentation
7 | include Powerpoint::Util
8 |
9 | attr_reader :slides
10 |
11 | def initialize
12 | @slides = []
13 | end
14 |
15 | def add_intro(title, subtitile = nil)
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
23 | end
24 |
25 | def add_textual_slide(title, content = [])
26 | @slides << Powerpoint::Slide::Textual.new(presentation: self, title: title, content: content)
27 | end
28 |
29 | def add_pictorial_slide(title, image_path, coords = {})
30 | @slides << Powerpoint::Slide::Pictorial.new(presentation: self, title: title, image_path: image_path, coords: coords)
31 | end
32 |
33 | def add_text_picture_slide(title, image_path, content = [])
34 | @slides << Powerpoint::Slide::TextPicSplit.new(presentation: self, title: title, image_path: image_path, content: content)
35 | end
36 |
37 | def add_picture_description_slide(title, image_path, content = [])
38 | @slides << Powerpoint::Slide::DescriptionPic.new(presentation: self, title: title, image_path: image_path, content: content)
39 | end
40 |
41 | def save(path)
42 | Dir.mktmpdir do |dir|
43 | extract_path = "#{dir}/extract_#{Time.now.strftime("%Y-%m-%d-%H%M%S")}"
44 |
45 | # Copy template to temp path
46 | FileUtils.copy_entry(TEMPLATE_PATH, extract_path)
47 |
48 | # Remove keep files
49 | Dir.glob("#{extract_path}/**/.keep").each do |keep_file|
50 | FileUtils.rm_rf(keep_file)
51 | end
52 |
53 | # Render/save generic stuff
54 | render_view('content_type.xml.erb', "#{extract_path}/[Content_Types].xml")
55 | render_view('presentation.xml.rel.erb', "#{extract_path}/ppt/_rels/presentation.xml.rels")
56 | render_view('presentation.xml.erb', "#{extract_path}/ppt/presentation.xml")
57 | render_view('app.xml.erb', "#{extract_path}/docProps/app.xml")
58 |
59 | # Save slides
60 | slides.each_with_index do |slide, index|
61 | slide.save(extract_path, index + 1)
62 | end
63 |
64 | # Create .pptx file
65 | File.delete(path) if File.exist?(path)
66 | Powerpoint.compress_pptx(extract_path, path)
67 | end
68 |
69 | path
70 | end
71 |
72 | def file_types
73 | slides.map {|slide| slide.file_type if slide.respond_to? :file_type }.compact.uniq
74 | end
75 | end
76 | end
77 |
--------------------------------------------------------------------------------
/lib/powerpoint/slide/intro.rb:
--------------------------------------------------------------------------------
1 | require 'fileutils'
2 | require 'erb'
3 |
4 | module Powerpoint
5 | module Slide
6 | class Intro
7 | include Powerpoint::Util
8 |
9 | attr_reader :title, :subtitile
10 |
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(extract_path, index)
17 | save_rel_xml(extract_path, index)
18 | save_slide_xml(extract_path, index)
19 | end
20 |
21 | def file_type
22 | nil
23 | end
24 |
25 | def save_rel_xml(extract_path, index)
26 | render_view('textual_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
27 | end
28 | private :save_rel_xml
29 |
30 | def save_slide_xml(extract_path, index)
31 | render_view('intro_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
32 | end
33 | private :save_slide_xml
34 | end
35 | end
36 | end
37 |
--------------------------------------------------------------------------------
/lib/powerpoint/slide/pictorial.rb:
--------------------------------------------------------------------------------
1 | require 'zip/filesystem'
2 | require 'fileutils'
3 | require 'fastimage'
4 | require 'erb'
5 |
6 | module Powerpoint
7 | module Slide
8 | class Pictorial
9 | include Powerpoint::Util
10 |
11 | attr_reader :image_name, :title, :coords, :image_path
12 |
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(extract_path, index)
21 | copy_media(extract_path, @image_path)
22 | save_rel_xml(extract_path, index)
23 | save_slide_xml(extract_path, index)
24 | end
25 |
26 | def file_type
27 | File.extname(image_name).gsub('.', '')
28 | end
29 |
30 | def default_coords
31 | slide_width = pixle_to_pt(720)
32 | default_width = pixle_to_pt(550)
33 |
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
41 | private :default_coords
42 |
43 | def save_rel_xml(extract_path, index)
44 | render_view('pictorial_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
45 | end
46 | private :save_rel_xml
47 |
48 | def save_slide_xml(extract_path, index)
49 | render_view('pictorial_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
50 | end
51 | private :save_slide_xml
52 | end
53 | end
54 | end
55 |
--------------------------------------------------------------------------------
/lib/powerpoint/slide/picture_description.rb:
--------------------------------------------------------------------------------
1 | require 'zip/filesystem'
2 | require 'fileutils'
3 | require 'fastimage'
4 | require 'erb'
5 |
6 | module Powerpoint
7 | module Slide
8 | class DescriptionPic
9 | include Powerpoint::Util
10 |
11 | attr_reader :title, :content, :image_name, :image_path, :coords
12 |
13 | def initialize(options={})
14 | require_arguments [:presentation, :title, :image_path, :content], options
15 | options.each {|k, v| instance_variable_set("@#{k}", v)}
16 | @coords = default_coords
17 | @image_name = File.basename(@image_path)
18 | end
19 |
20 | def save(extract_path, index)
21 | copy_media(extract_path, @image_path)
22 | save_rel_xml(extract_path, index)
23 | save_slide_xml(extract_path, index)
24 | end
25 |
26 | def file_type
27 | File.extname(image_name).gsub('.', '')
28 | end
29 |
30 | def default_coords
31 | slide_width = pixle_to_pt(720)
32 | default_width = pixle_to_pt(550)
33 | default_height = pixle_to_pt(300)
34 |
35 | return {} unless dimensions = FastImage.size(image_path)
36 | image_width, image_height = dimensions.map {|d| pixle_to_pt(d)}
37 |
38 | capped_width = [default_width, image_width].min
39 | w_ratio = capped_width / image_width.to_f
40 |
41 | capped_height = [default_height, image_height].min
42 | h_ratio = capped_height / image_height.to_f
43 |
44 | ratio = [w_ratio, h_ratio].min
45 |
46 | new_width = (image_width.to_f * ratio).round
47 | new_height = (image_height.to_f * ratio).round
48 | {x: (slide_width / 2) - (new_width/2), y: pixle_to_pt(60), cx: new_width, cy: new_height}
49 | end
50 | private :default_coords
51 |
52 | def save_rel_xml(extract_path, index)
53 | render_view('picture_description_rels.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
54 | end
55 | private :save_rel_xml
56 |
57 | def save_slide_xml(extract_path, index)
58 | render_view('picture_description_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
59 | end
60 | private :save_slide_xml
61 | end
62 | end
63 | end
64 |
--------------------------------------------------------------------------------
/lib/powerpoint/slide/text_picture_split.rb:
--------------------------------------------------------------------------------
1 | require 'zip/filesystem'
2 | require 'fileutils'
3 | require 'fastimage'
4 | require 'erb'
5 |
6 | module Powerpoint
7 | module Slide
8 | class TextPicSplit
9 | include Powerpoint::Util
10 |
11 | attr_reader :title, :content, :image_name, :image_path, :coords
12 |
13 | def initialize(options={})
14 | require_arguments [:presentation, :title, :image_path, :content], options
15 | options.each {|k, v| instance_variable_set("@#{k}", v)}
16 | @coords = default_coords
17 | @image_name = File.basename(@image_path)
18 | end
19 |
20 | def save(extract_path, index)
21 | copy_media(extract_path, @image_path)
22 | save_rel_xml(extract_path, index)
23 | save_slide_xml(extract_path, index)
24 | end
25 |
26 | def file_type
27 | File.extname(image_name).gsub('.', '')
28 | end
29 |
30 | def default_coords
31 | start_x = pixle_to_pt(360)
32 | default_width = pixle_to_pt(300)
33 |
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: start_x, y: pixle_to_pt(120), cx: new_width, cy: new_height}
40 | end
41 | private :default_coords
42 |
43 | def save_rel_xml(extract_path, index)
44 | render_view('text_picture_split_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
45 | end
46 | private :save_rel_xml
47 |
48 | def save_slide_xml(extract_path, index)
49 | render_view('text_picture_split_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
50 | end
51 | private :save_slide_xml
52 | end
53 | end
54 |
55 |
56 | end
57 |
--------------------------------------------------------------------------------
/lib/powerpoint/slide/textual.rb:
--------------------------------------------------------------------------------
1 | require 'fileutils'
2 | require 'erb'
3 |
4 | module Powerpoint
5 | module Slide
6 | class Textual
7 | include Powerpoint::Util
8 |
9 | attr_reader :title, :content
10 |
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(extract_path, index)
17 | save_rel_xml(extract_path, index)
18 | save_slide_xml(extract_path, index)
19 | end
20 |
21 | def save_rel_xml(extract_path, index)
22 | render_view('textual_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
23 | end
24 | private :save_rel_xml
25 |
26 | def save_slide_xml(extract_path, index)
27 | render_view('textual_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
28 | end
29 | private :save_slide_xml
30 | end
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/lib/powerpoint/util.rb:
--------------------------------------------------------------------------------
1 | module Powerpoint
2 | module Util
3 |
4 | def pixle_to_pt(px)
5 | px * 12700
6 | end
7 |
8 | def render_view(template_name, path, variables = {})
9 | view_contents = read_template(template_name)
10 | renderer = ERB.new(view_contents)
11 | b = merge_variables(binding, variables)
12 | data = renderer.result(b)
13 |
14 | File.open(path, 'w') { |f| f << data }
15 | end
16 |
17 | def read_template(filename)
18 | File.read("#{Powerpoint::VIEW_PATH}/#{filename}")
19 | end
20 |
21 | def require_arguments(required_argements, argements)
22 | raise ArgumentError unless required_argements.all? {|required_key| argements.keys.include? required_key}
23 | end
24 |
25 | def copy_media(extract_path, image_path)
26 | image_name = File.basename(image_path)
27 | dest_path = "#{extract_path}/ppt/media/#{image_name}"
28 | FileUtils.copy_file(image_path, dest_path) unless File.exist?(dest_path)
29 | end
30 |
31 | def merge_variables(b, variables)
32 | return b if variables.empty?
33 | variables.each do |k,v|
34 | b.local_variable_set(k, v)
35 | end
36 | b
37 | end
38 | end
39 | end
40 |
--------------------------------------------------------------------------------
/lib/powerpoint/version.rb:
--------------------------------------------------------------------------------
1 | module Powerpoint
2 | VERSION = "1.8"
3 | end
4 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/app.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
4 | 0
5 | 43
6 | Microsoft Macintosh PowerPoint
7 | On-screen Show (4:3)
8 | 15
9 | <%= slides.length %>
10 | 0
11 | 0
12 | 0
13 | false
14 |
15 |
16 |
17 | Fonts Used
18 |
19 |
20 | 2
21 |
22 |
23 | Theme
24 |
25 |
26 | 1
27 |
28 |
29 | Slide Titles
30 |
31 |
32 | <%= slides.length %>
33 |
34 |
35 |
36 |
37 |
38 | Arial
39 | Calibri
40 | Office Theme
41 | <% slides.each do |slide| %>
42 | <%= slide.title %>
43 | <% end %>
44 |
45 |
46 |
47 | false
48 | false
49 | false
50 | 15.0000
51 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/content_type.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | <% file_types.each do |type| %>
6 |
7 | <% end %>
8 |
9 |
10 | <% slides.each_with_index do |slide, index| %>
11 |
12 | <% end %>
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/intro_slide.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | <%= title %>
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | <%= subtitile %>
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/pictorial_rel.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/pictorial_slide.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | <%= title %>
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 | <% if coords.any? %>
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | <% else %>
74 |
75 | <% end %>
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/picture_description_rels.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/picture_description_slide.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | <%= title %>
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 | <% if coords.any? %>
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | <% else %>
74 |
75 | <% end %>
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 | <% content.each_with_index do |c, index| %>
92 |
93 |
94 |
95 | <%= c %>
96 |
97 | <% if content.length == (index + 1) %>
98 |
99 | <% end %>
100 |
101 | <% end %>
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/presentation.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | <% slides.each_with_index do |slide, index| %>
8 |
9 | <% end %>
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
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 |
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 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/presentation.xml.rel.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <% slides.each_with_index do |slide, index| %>
9 | <% id = 5 + (index+1) %>
10 |
11 | <% end %>
12 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/text_picture_split_rel.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/text_picture_split_slide.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | <%= title %>
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | <% content.each_with_index do |c, index| %>
56 |
57 |
58 |
59 | <%= c %>
60 |
61 | <% if content.length == (index + 1) %>
62 |
63 | <% end %>
64 |
65 | <% end %>
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 | <% if coords.any? %>
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | <% else %>
101 |
102 | <% end %>
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/textual_rel.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/lib/powerpoint/views/textual_slide.xml.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | <%= title %>
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | <% content.each_with_index do |c, index| %>
56 |
57 |
58 |
59 | <%= c %>
60 |
61 | <% if content.length == (index + 1) %>
62 |
63 | <% end %>
64 |
65 | <% end %>
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/powerpoint.gemspec:
--------------------------------------------------------------------------------
1 | # coding: utf-8
2 | lib = File.expand_path('../lib', __FILE__)
3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4 | require 'powerpoint/version'
5 |
6 | Gem::Specification.new do |spec|
7 | spec.name = "powerpoint"
8 | spec.version = Powerpoint::VERSION
9 | spec.authors = ["pythonicrubyist"]
10 | spec.email = ["pythonicrubyist@gmail.com"]
11 | spec.description = %q{A Ruby gem that can create a PowerPoint presentation.}
12 | spec.summary = %q{powerpoint is a Ruby gem that can create a PowerPoint presentation based on a standard pptx template.}
13 | spec.homepage = "https://github.com/pythonicrubyist/powerpoint"
14 | spec.license = "MIT"
15 |
16 | spec.files = `git ls-files`.split($/)
17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19 | spec.require_paths = ["lib"]
20 |
21 | spec.required_ruby_version = '>= 1.9.2'
22 |
23 | spec.add_development_dependency "bundler", "~> 1.3"
24 | spec.add_development_dependency "rake"
25 | spec.add_development_dependency 'rspec', '~> 2.13.0'
26 | spec.add_development_dependency 'pry'
27 |
28 |
29 | spec.add_dependency 'rubyzip', '~> 1'
30 | spec.add_dependency 'fastimage', '~> 1'
31 | end
32 |
--------------------------------------------------------------------------------
/samples/images/sample_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/samples/images/sample_gif.gif
--------------------------------------------------------------------------------
/samples/images/sample_jpg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/samples/images/sample_jpg.jpg
--------------------------------------------------------------------------------
/samples/images/sample_png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/samples/images/sample_png.png
--------------------------------------------------------------------------------
/samples/pptx/sample.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/samples/pptx/sample.pptx
--------------------------------------------------------------------------------
/spec/test_spec.rb:
--------------------------------------------------------------------------------
1 | require 'powerpoint'
2 |
3 | describe 'Powerpoint parsing a sample PPTX file' do
4 | before(:all) do
5 | @deck = Powerpoint::Presentation.new
6 | @deck.add_intro 'Bicycle Of the Mind', 'created by Steve Jobs'
7 | @deck.add_textual_slide 'Why Mac?', ['Its cool!', 'Its light!']
8 | @deck.add_textual_slide 'Why Iphone?', ['Its fast!', 'Its cheap!']
9 | @deck.add_pictorial_slide 'JPG Logo', 'samples/images/sample_png.png'
10 | @deck.add_text_picture_slide('Text Pic Split', 'samples/images/sample_png.png', content = ['Here is a string', 'here is another'])
11 | @deck.add_pictorial_slide 'PNG Logo', 'samples/images/sample_png.png'
12 | @deck.add_picture_description_slide('Pic Desc', 'samples/images/sample_png.png', content = ['Here is a string', 'here is another'])
13 | @deck.add_picture_description_slide('JPG Logo', 'samples/images/sample_jpg.jpg', content = ['descriptions'])
14 | @deck.add_pictorial_slide 'GIF Logo', 'samples/images/sample_gif.gif', {x: 124200, y: 3356451, cx: 2895600, cy: 1013460}
15 | @deck.add_textual_slide 'Why Android?', ['Its great!', 'Its sweet!']
16 | @deck.save 'samples/pptx/sample.pptx' # Examine the PPTX file
17 | end
18 |
19 | it 'Create a PPTX file successfully.' do
20 | #@deck.should_not be_nil
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/template/_rels/.rels:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/template/docProps/core.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Powerpoint
4 | Nobody
5 | 1
6 | 2015-07-15T00:51:18Z
7 |
--------------------------------------------------------------------------------
/template/ppt/_rels/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/template/ppt/_rels/.keep
--------------------------------------------------------------------------------
/template/ppt/media/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/template/ppt/media/.keep
--------------------------------------------------------------------------------
/template/ppt/presProps.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout1.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout10.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout11.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout2.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout3.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout4.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout5.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout6.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout7.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout8.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/_rels/slideLayout9.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | Click to edit Master title style
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 |
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 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | Click to edit Master subtitle style
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 | 7/14/15
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 | ‹#›
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout10.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text stylesSecond levelThird levelFourth levelFifth level7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout11.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text stylesSecond levelThird levelFourth levelFifth level7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | Click to edit Master title style
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | Click to edit Master text styles
60 |
61 |
62 |
63 |
64 |
65 |
66 | Second level
67 |
68 |
69 |
70 |
71 |
72 |
73 | Third level
74 |
75 |
76 |
77 |
78 |
79 |
80 | Fourth level
81 |
82 |
83 |
84 |
85 |
86 |
87 | Fifth level
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | 7/14/15
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 | ‹#›
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout3.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text styles7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout4.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text stylesSecond levelThird levelFourth levelFifth levelClick to edit Master text stylesSecond levelThird levelFourth levelFifth level7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout5.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text stylesClick to edit Master text stylesSecond levelThird levelFourth levelFifth levelClick to edit Master text stylesClick to edit Master text stylesSecond levelThird levelFourth levelFifth level7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout6.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title style7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout7.xml:
--------------------------------------------------------------------------------
1 |
2 | 7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout8.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text stylesSecond levelThird levelFourth levelFifth levelClick to edit Master text styles7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideLayouts/slideLayout9.xml:
--------------------------------------------------------------------------------
1 |
2 | Click to edit Master title styleClick to edit Master text styles7/14/15‹#›
--------------------------------------------------------------------------------
/template/ppt/slideMasters/_rels/slideMaster1.xml.rels:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/slideMasters/slideMaster1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | Click to edit Master title style
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | Click to edit Master text styles
85 |
86 |
87 |
88 |
89 |
90 |
91 | Second level
92 |
93 |
94 |
95 |
96 |
97 |
98 | Third level
99 |
100 |
101 |
102 |
103 |
104 |
105 | Fourth level
106 |
107 |
108 |
109 |
110 |
111 |
112 | Fifth level
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 | 7/14/15
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 | ‹#›
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
--------------------------------------------------------------------------------
/template/ppt/slides/_rels/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonicrubyist/powerpoint/3622186613b5bd09d076ddf550d3083f143b3a47/template/ppt/slides/_rels/.keep
--------------------------------------------------------------------------------
/template/ppt/tableStyles.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/theme/theme1.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/template/ppt/viewProps.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------