any2pdf 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/any2pdf.gemspec +2 -1
- data/bin/any2pdf +51 -3
- data/data/pandoc-template.html +30 -0
- data/data/telekom.css +4 -0
- data/data/template.html.erb +2 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d78a031dfe4f63afa1d0b33c4770b1ea769704a
|
4
|
+
data.tar.gz: bd3975264c73cf68f6ed59b4f40add219f1521c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd7cf986a1f429c1733cc61c817cdbe1fa55b3b7b3690d68fdc8faf96eed2c9aedadeeba62f9b97a7a616295e826873e2ffee4fedd3de7b5eb34a0b4e7e4e238
|
7
|
+
data.tar.gz: a71db6d57213764152e53f0e2013ea2ca9f60f85b0cd18122f5f39bfba117ed700873f062d39832231a1fd205c4a692ac6d558c6c9542365792415d7ba19acd6
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
Any2Pdf
|
2
2
|
========
|
3
3
|
|
4
|
+
[![RubyGems][gem_version_badge]][ruby_gems]
|
5
|
+
|
4
6
|
Convert things to PDF. This is a quick and dirty collection of scripts I have grown accustomed to coupled with an inherent lazyness to enter tedious commands. Remember: it is dirty by design.
|
5
7
|
|
6
8
|
Currently supports:
|
data/any2pdf.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'any2pdf'
|
4
|
-
s.version = '1.0
|
4
|
+
s.version = '1.1.0'
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.summary = "convert anything to pdf (via pandoc and pdfkit)"
|
7
7
|
s.description = s.summary
|
@@ -9,6 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = "dominik.richter@gmail.com"
|
10
10
|
|
11
11
|
s.add_dependency "pdfkit"
|
12
|
+
s.add_dependency "css_parser"
|
12
13
|
s.add_dependency "trollop"
|
13
14
|
s.add_dependency "nokogiri"
|
14
15
|
s.add_dependency "fileutils"
|
data/bin/any2pdf
CHANGED
@@ -4,6 +4,7 @@ require 'pdfkit'
|
|
4
4
|
require 'trollop'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'nokogiri'
|
7
|
+
require 'css_parser'
|
7
8
|
require 'uri'
|
8
9
|
require 'erb'
|
9
10
|
require 'zlog'
|
@@ -108,7 +109,7 @@ def md2html(file, opts, stylefile)
|
|
108
109
|
].join("\n\n")
|
109
110
|
|
110
111
|
# create the html
|
111
|
-
`pandoc "#{file}" -o "#{htmlfile_raw}"`
|
112
|
+
`pandoc "#{file}" -o "#{htmlfile_raw}" --template #{rel_path}/pandoc-template.html --toc`
|
112
113
|
raw_html = File::read htmlfile_raw
|
113
114
|
FileUtils::rm_rf htmlfile_raw
|
114
115
|
|
@@ -125,10 +126,57 @@ def md2html(file, opts, stylefile)
|
|
125
126
|
htmlfile
|
126
127
|
end
|
127
128
|
|
129
|
+
def get_style_options style_file
|
130
|
+
return {} unless File::file? style_file
|
131
|
+
|
132
|
+
declarations = []
|
133
|
+
|
134
|
+
css = CssParser::Parser.new
|
135
|
+
css.load_file! style_file
|
136
|
+
css.each_rule_set do |rule|
|
137
|
+
if rule.selectors.include? '#pdf'
|
138
|
+
rule.each_declaration do |id, params|
|
139
|
+
declarations.push [id, params]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# check all rules
|
145
|
+
opts = {}
|
146
|
+
declarations.each do |field,value|
|
147
|
+
if field == 'margin'
|
148
|
+
vals = value.split(' ');
|
149
|
+
if vals.length == 4
|
150
|
+
opts[:margin_top] = vals[0]
|
151
|
+
opts[:margin_right] = vals[1]
|
152
|
+
opts[:margin_bottom] = vals[2]
|
153
|
+
opts[:margin_left] = vals[3]
|
154
|
+
end
|
155
|
+
if vals.length == 2
|
156
|
+
opts[:margin_top] = vals[0]
|
157
|
+
opts[:margin_right] = vals[1]
|
158
|
+
opts[:margin_bottom] = vals[0]
|
159
|
+
opts[:margin_left] = vals[1]
|
160
|
+
end
|
161
|
+
if vals.length == 1
|
162
|
+
opts[:margin_top] = vals[0]
|
163
|
+
opts[:margin_right] = vals[0]
|
164
|
+
opts[:margin_bottom] = vals[0]
|
165
|
+
opts[:margin_left] = vals[0]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
opts
|
172
|
+
end
|
173
|
+
|
128
174
|
def pdfkit_html2pdf( file, outfile, opts )
|
129
175
|
styles = []
|
130
176
|
styles << opts.stylesheet
|
131
177
|
|
178
|
+
style_opts = get_style_options opts.stylesheet
|
179
|
+
|
132
180
|
# find css files
|
133
181
|
dom = Nokogiri::parse( File::open(file).read() )
|
134
182
|
dom.css("link").each do |e|
|
@@ -144,10 +192,10 @@ def pdfkit_html2pdf( file, outfile, opts )
|
|
144
192
|
footer_right: "[page]/[topage]",
|
145
193
|
orientation: (( opts[:landscape] ) ? "landscape" : "portrait" ),
|
146
194
|
page_size: 'A4',
|
147
|
-
}
|
195
|
+
}.merge(style_opts)
|
148
196
|
html = dom.to_s
|
149
197
|
kit = PDFKit.new(html, options)
|
150
|
-
|
198
|
+
|
151
199
|
styles.compact.each do |style|
|
152
200
|
kit.stylesheets << style if File::exists?(style)
|
153
201
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$for(include-before)$
|
2
|
+
$include-before$
|
3
|
+
$endfor$
|
4
|
+
|
5
|
+
$if(title)$
|
6
|
+
<header>
|
7
|
+
<h1 class="title">$title$</h1>
|
8
|
+
$if(subtitle)$
|
9
|
+
<h1 class="subtitle">$subtitle$</h1>
|
10
|
+
$endif$
|
11
|
+
$for(author)$
|
12
|
+
<h2 class="author">$author$</h2>
|
13
|
+
$endfor$
|
14
|
+
$if(date)$
|
15
|
+
<h3 class="date">$date$</h3>
|
16
|
+
$endif$
|
17
|
+
</header>
|
18
|
+
$endif$
|
19
|
+
|
20
|
+
$if(toc)$
|
21
|
+
<nav id="$idprefix$TOC">
|
22
|
+
$toc$
|
23
|
+
</nav>
|
24
|
+
$endif$
|
25
|
+
|
26
|
+
$body$
|
27
|
+
|
28
|
+
$for(include-after)$
|
29
|
+
$include-after$
|
30
|
+
$endfor$
|
data/data/telekom.css
CHANGED
data/data/template.html.erb
CHANGED
@@ -12,8 +12,10 @@
|
|
12
12
|
up to level <%= toc_level %>*/
|
13
13
|
for( var lvl=1; lvl <= <%= toc_level %>; lvl++){
|
14
14
|
$("h"+lvl).addClass("in_toc")
|
15
|
+
$("header h"+lvl).removeClass("in_toc")
|
15
16
|
<% if number_headings %>
|
16
17
|
$("h"+lvl).addClass("numbering")
|
18
|
+
$("header h"+lvl).removeClass("numbering")
|
17
19
|
<% end %>
|
18
20
|
}
|
19
21
|
window.gen_toc();
|
@@ -22,7 +24,6 @@
|
|
22
24
|
</script>
|
23
25
|
</head>
|
24
26
|
<body id="home">
|
25
|
-
<div id="toc" ></div>
|
26
27
|
<%= raw_html %>
|
27
28
|
</body>
|
28
29
|
</html>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: any2pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pdfkit
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: css_parser
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: trollop
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,6 +113,7 @@ files:
|
|
99
113
|
- data/boilerplate.css
|
100
114
|
- data/default.css
|
101
115
|
- data/jquery-1.9.0.min.js
|
116
|
+
- data/pandoc-template.html
|
102
117
|
- data/print.css
|
103
118
|
- data/telekom.css
|
104
119
|
- data/template.html.erb
|