show_off_pdf 0.0.2.pre → 0.0.3.pre
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.
- data/README.md +43 -3
- data/bin/showoff2pdf +8 -1
- data/example.pdf +0 -0
- data/lib/markdown_fragments/image_fragment.rb +69 -1
- data/lib/show_off_slide.rb +29 -4
- data/show_off_pdf.gemspec +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -5,15 +5,55 @@ Using Markdown Prawn, showoff2pdf will try to convert
|
|
5
5
|
a ShowOff presentation into a sensible PDF document
|
6
6
|
ready to print.
|
7
7
|
|
8
|
+
At the moment it supports the following features:
|
9
|
+
|
10
|
+
* Bulleted Lists
|
11
|
+
* Ordered lists
|
12
|
+
* Images (local and remote)
|
13
|
+
* Multiple levels of headings
|
14
|
+
* Bold, Italic and Underline text
|
15
|
+
|
16
|
+
With partial (and in progress) support for:
|
17
|
+
|
18
|
+
* Code blocks
|
19
|
+
* Commandline argument
|
20
|
+
* Formatting / Alignment
|
21
|
+
|
22
|
+
Requirements
|
23
|
+
------------
|
24
|
+
|
25
|
+
Requires the latest <tt>Prawn</tt> and also requires
|
26
|
+
<tt>ShowOff</tt>.
|
27
|
+
|
28
|
+
Prawn is used to generate the PDFs and ShowOff itself
|
29
|
+
is used to read the configuration information from the
|
30
|
+
slideshow and pull in its content from each section.
|
31
|
+
|
32
|
+
|
8
33
|
Installation
|
9
34
|
------------
|
10
35
|
|
11
|
-
$ sudo gem install
|
36
|
+
$ sudo gem install prawn --pre
|
37
|
+
$ sudo gem install show_off_pdf --pre showoff
|
12
38
|
|
13
39
|
Usage
|
14
40
|
-----
|
15
41
|
|
16
|
-
$ cd
|
42
|
+
$ cd /path/to/show_off_presentation
|
17
43
|
$ showoff2pdf > presentation.pdf
|
18
44
|
|
19
|
-
|
45
|
+
Known Issues
|
46
|
+
------------
|
47
|
+
|
48
|
+
The following known issues are being worked on
|
49
|
+
|
50
|
+
* Detecting and dealing with code blocks is sketchy
|
51
|
+
and inconsistant.
|
52
|
+
* Detecting and dealing with commandline blocks is
|
53
|
+
sketchy and inconsistant.
|
54
|
+
|
55
|
+
Bugs
|
56
|
+
----
|
57
|
+
|
58
|
+
Please open an issue here if you encounter a problem with
|
59
|
+
using showoff2pdf.
|
data/bin/showoff2pdf
CHANGED
@@ -4,10 +4,17 @@ require File.dirname(__FILE__) + '/../show_off_pdf'
|
|
4
4
|
paths = []
|
5
5
|
images = []
|
6
6
|
ShowOffUtils.showoff_sections.each do |section|
|
7
|
-
paths << Dir.glob(File.expand_path("./#{section}
|
7
|
+
paths << Dir.glob(File.expand_path("./#{section}/**/*.{md,mdown}"))
|
8
8
|
images << Dir.glob(File.expand_path("./#{section}/**/*.{png,jpg,jpeg}"))
|
9
9
|
end
|
10
10
|
paths.flatten!
|
11
11
|
images.flatten!
|
12
12
|
ImageFragment._image_assets = images
|
13
|
+
|
14
|
+
# If we set this, then it'll automatically preshrink
|
15
|
+
# images to 80% of their size before attempting to
|
16
|
+
# scale them.
|
17
|
+
#
|
18
|
+
ImageFragment._page_image_ratio = 0.8
|
19
|
+
|
13
20
|
puts ShowoffSlideStream.new(paths).to_pdf.render
|
data/example.pdf
CHANGED
Binary file
|
@@ -2,6 +2,15 @@ require 'net/http'
|
|
2
2
|
require 'tmpdir'
|
3
3
|
|
4
4
|
class ImageFragment < MarkdownFragment
|
5
|
+
|
6
|
+
def self._page_image_ratio=(value)
|
7
|
+
@@_page_image_ratio = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def self._page_image_ratio
|
11
|
+
@@_page_image_ratio
|
12
|
+
end
|
13
|
+
|
5
14
|
def self._image_assets=(value)
|
6
15
|
@@_image_assets = value
|
7
16
|
end
|
@@ -35,7 +44,8 @@ class ImageFragment < MarkdownFragment
|
|
35
44
|
width = JPEG.new(file_path).width
|
36
45
|
height = JPEG.new(file_path).height
|
37
46
|
end
|
38
|
-
|
47
|
+
width,height = best_fit(width, height, pdf_object)
|
48
|
+
pdf_object.image file_path , :fit => [ width, height], :position => :center
|
39
49
|
end
|
40
50
|
|
41
51
|
private
|
@@ -44,6 +54,64 @@ class ImageFragment < MarkdownFragment
|
|
44
54
|
!/^(http:|https:)/.match(@content.first).nil?
|
45
55
|
end
|
46
56
|
|
57
|
+
# Calculate the width and height to best fit the
|
58
|
+
# image on the page.
|
59
|
+
#
|
60
|
+
def best_fit(width, height, pdf)
|
61
|
+
ph = pdf.bounds.height - page_padding
|
62
|
+
pw = pdf.bounds.width - page_padding
|
63
|
+
return [width, height] if height <= ph && width <= pw
|
64
|
+
|
65
|
+
if ImageFragment._page_image_ratio
|
66
|
+
iw = width * ImageFragment._page_image_ratio
|
67
|
+
ih = height * ImageFragment._page_image_ratio
|
68
|
+
else
|
69
|
+
iw = width
|
70
|
+
ih = height
|
71
|
+
end
|
72
|
+
iw = pixels_to_points(iw)
|
73
|
+
ih = pixels_to_points(ih)
|
74
|
+
|
75
|
+
if ih <= ph && iw <= pw
|
76
|
+
return [iw, ih]
|
77
|
+
elsif ih > ph
|
78
|
+
r = height / width
|
79
|
+
ih = (ih - (page_padding * 2))
|
80
|
+
iw = ih * r
|
81
|
+
elsif iw > pw
|
82
|
+
r = width / height
|
83
|
+
iw = (iw - (page_padding * 2))
|
84
|
+
ih = iw * r
|
85
|
+
else
|
86
|
+
puts "SHOULD NEXT GET HERE"
|
87
|
+
exit(-1)
|
88
|
+
end
|
89
|
+
return [iw, ih]
|
90
|
+
end
|
91
|
+
|
92
|
+
# Work out the page padding later, for not assume that
|
93
|
+
# it's 20.
|
94
|
+
#
|
95
|
+
def page_padding
|
96
|
+
20
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
# Very rough way to convert pixels to points, by
|
101
|
+
# assuming the we're at 96 DPI. This isn't the most
|
102
|
+
# ideal method, but it should be good enough for
|
103
|
+
# sizing images to fit on page correctly.
|
104
|
+
#
|
105
|
+
def pixels_to_points(pixels)
|
106
|
+
pixels * 72 / 96
|
107
|
+
end
|
108
|
+
|
109
|
+
# Very rough reversal ov the above
|
110
|
+
#
|
111
|
+
def points_to_pixels(points)
|
112
|
+
points / 72 * 96
|
113
|
+
end
|
114
|
+
|
47
115
|
end
|
48
116
|
|
49
117
|
class JPEG
|
data/lib/show_off_slide.rb
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
class ShowOffSlide
|
2
2
|
attr_accessor :components, :content
|
3
|
-
|
3
|
+
|
4
|
+
SHOWOFF_SLIDE_TYPES = [
|
5
|
+
'subsection',
|
6
|
+
'commandline',
|
7
|
+
'incremental',
|
8
|
+
'center',
|
9
|
+
'command',
|
10
|
+
'small',
|
11
|
+
'full-page',
|
12
|
+
'bullets',
|
13
|
+
'smbullets',
|
14
|
+
'code',
|
15
|
+
'smaller',
|
16
|
+
'execute',
|
17
|
+
'transition='
|
18
|
+
]
|
19
|
+
|
4
20
|
def initialize(content = '', options = {})
|
5
21
|
@components = []
|
6
22
|
@options = { :size => 'A4', :layout => :landscape }.merge(options)
|
@@ -17,7 +33,17 @@ class ShowOffSlide
|
|
17
33
|
private
|
18
34
|
|
19
35
|
def parse
|
20
|
-
|
36
|
+
# Get rid of leading \n characters
|
37
|
+
#
|
38
|
+
@content.gsub!(/^(\n)*/,'')
|
39
|
+
|
40
|
+
# Skip aparently blank slides
|
41
|
+
#
|
42
|
+
return if @content.empty?
|
43
|
+
|
44
|
+
# Pull out presenter notes for displaying at the bottom
|
45
|
+
# of the page
|
46
|
+
#
|
21
47
|
s =/(\s)?.notes\s(.*)(\n)?/.match(@content)
|
22
48
|
if !s.nil?
|
23
49
|
@slide_notes = $2
|
@@ -25,10 +51,9 @@ class ShowOffSlide
|
|
25
51
|
else
|
26
52
|
@slide_notes = nil
|
27
53
|
end
|
28
|
-
|
54
|
+
|
29
55
|
sp = MarkdownPrawn::StringParser.new(@content)
|
30
56
|
sp.parse!
|
31
|
-
#@components << ParagraphFragment.new([@content])
|
32
57
|
@components = sp.document_structure
|
33
58
|
if @slide_notes
|
34
59
|
@components << PresenterNotesFragment.new([@slide_notes])
|
data/show_off_pdf.gemspec
CHANGED
@@ -11,7 +11,7 @@ TXT
|
|
11
11
|
|
12
12
|
Gem::Specification.new do |spec|
|
13
13
|
spec.name = "show_off_pdf"
|
14
|
-
spec.version = '0.0.
|
14
|
+
spec.version = '0.0.3.pre'
|
15
15
|
spec.platform = Gem::Platform::RUBY
|
16
16
|
spec.files = Dir.glob("{bin,lib,.}/**/**/*") +
|
17
17
|
["show_off_pdf.rb","README.md","COPYING.md",'LICENSE', "show_off_pdf.gemspec"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: show_off_pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 961915976
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
9
|
+
- 3
|
10
10
|
- pre
|
11
|
-
version: 0.0.
|
11
|
+
version: 0.0.3.pre
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Ryan Stenhouse
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-12-
|
19
|
+
date: 2010-12-10 00:00:00 +00:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|