docverter-server 1.0.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.buildpacks +2 -0
- data/.gitignore +6 -0
- data/.vendor_urls +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +55 -0
- data/LICENSE +67 -0
- data/Procfile +1 -0
- data/README.md +32 -0
- data/Rakefile +23 -0
- data/config.ru +3 -0
- data/doc/api.md +1664 -0
- data/doc/examples/html_to_encrypted_pdf/convert.sh +16 -0
- data/doc/examples/html_to_encrypted_pdf/imfeldoublepica.ttf +0 -0
- data/doc/examples/html_to_encrypted_pdf/input.html +27 -0
- data/doc/examples/html_to_encrypted_pdf/marcellus.ttf +0 -0
- data/doc/examples/html_to_encrypted_pdf/stylesheet.css +22 -0
- data/doc/examples/html_to_pdf/convert.sh +16 -0
- data/doc/examples/html_to_pdf/imfeldoublepica.ttf +0 -0
- data/doc/examples/html_to_pdf/input.html +27 -0
- data/doc/examples/html_to_pdf/marcellus.ttf +0 -0
- data/doc/examples/html_to_pdf/stylesheet.css +22 -0
- data/doc/examples/markdown_to_epub/chapter1.md +11 -0
- data/doc/examples/markdown_to_epub/chapter2.md +10 -0
- data/doc/examples/markdown_to_epub/convert.sh +20 -0
- data/doc/examples/markdown_to_epub/document-open.png +0 -0
- data/doc/examples/markdown_to_epub/markdown_to_epub.epub +241 -0
- data/doc/examples/markdown_to_epub/markdown_to_epub.epub.html +251 -0
- data/doc/examples/markdown_to_epub/metadata.xml +2 -0
- data/doc/examples/markdown_to_epub/stylesheet.css +216 -0
- data/doc/examples/markdown_to_epub/title.txt +2 -0
- data/doc/examples/markdown_to_mobi/chapter1.md +11 -0
- data/doc/examples/markdown_to_mobi/chapter2.md +10 -0
- data/doc/examples/markdown_to_mobi/convert.sh +20 -0
- data/doc/examples/markdown_to_mobi/document-open.png +0 -0
- data/doc/examples/markdown_to_mobi/metadata.xml +2 -0
- data/doc/examples/markdown_to_mobi/stylesheet.css +216 -0
- data/doc/examples/markdown_to_mobi/title.txt +2 -0
- data/doc/examples/markdown_to_pdf/chapter1.md +11 -0
- data/doc/examples/markdown_to_pdf/chapter2.md +10 -0
- data/doc/examples/markdown_to_pdf/convert.sh +18 -0
- data/doc/examples/markdown_to_pdf/imfeldoublepica.ttf +0 -0
- data/doc/examples/markdown_to_pdf/manifest.yml +8 -0
- data/doc/examples/markdown_to_pdf/marcellus.ttf +0 -0
- data/doc/examples/markdown_to_pdf/stylesheet.css +22 -0
- data/docverter.gemspec +28 -0
- data/lib/docverter-server/app.rb +50 -0
- data/lib/docverter-server/conversion.rb +38 -0
- data/lib/docverter-server/conversion_types.rb +59 -0
- data/lib/docverter-server/jars/bcprov-ext-jdk15-1.43.jar +0 -0
- data/lib/docverter-server/jars/htmlcleaner-2.2.jar +0 -0
- data/lib/docverter-server/manifest.rb +107 -0
- data/lib/docverter-server/runner/base.rb +36 -0
- data/lib/docverter-server/runner/calibre.rb +10 -0
- data/lib/docverter-server/runner/pandoc.rb +18 -0
- data/lib/docverter-server/runner/pdf.rb +91 -0
- data/lib/docverter-server/version.rb +3 -0
- data/lib/docverter-server.rb +11 -0
- metadata +230 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
require 'flying_saucer'
|
4
|
+
require File.expand_path('../../jars/htmlcleaner-2.2.jar', __FILE__)
|
5
|
+
require File.expand_path('../../jars/bcprov-ext-jdk15-1.43.jar', __FILE__)
|
6
|
+
|
7
|
+
java_import org.xhtmlrenderer.pdf.ITextRenderer
|
8
|
+
java_import org.xhtmlrenderer.pdf.ITextUserAgent
|
9
|
+
java_import org.htmlcleaner.HtmlCleaner
|
10
|
+
java_import org.htmlcleaner.DomSerializer
|
11
|
+
java_import com.lowagie.text.pdf.PdfReader
|
12
|
+
java_import com.lowagie.text.pdf.PdfStamper
|
13
|
+
java_import com.lowagie.text.pdf.PdfEncryption
|
14
|
+
|
15
|
+
class DocverterServer::Runner::PDF < DocverterServer::Runner::Base
|
16
|
+
|
17
|
+
def create_java_dom(html)
|
18
|
+
cleaner = HtmlCleaner.new
|
19
|
+
props = cleaner.get_properties
|
20
|
+
props.setTranslateSpecialEntities(true)
|
21
|
+
props.setAdvancedXmlEscape(true)
|
22
|
+
props.setRecognizeUnicodeChars(true)
|
23
|
+
node = cleaner.clean(html)
|
24
|
+
DomSerializer.new(props, true).createDOM(node)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_renderer(dom)
|
28
|
+
renderer = ITextRenderer.new
|
29
|
+
agent = UserAgent.new(renderer.output_device)
|
30
|
+
agent.shared_context = renderer.shared_context
|
31
|
+
renderer.shared_context.user_agent_callback = agent
|
32
|
+
renderer.set_document(dom, path_to_url(directory))
|
33
|
+
renderer.layout
|
34
|
+
renderer
|
35
|
+
end
|
36
|
+
|
37
|
+
def path_to_url(path)
|
38
|
+
java.io.File.new(path).to_uri.to_url.to_string
|
39
|
+
end
|
40
|
+
|
41
|
+
def run
|
42
|
+
with_manifest do |manifest|
|
43
|
+
|
44
|
+
io = StringIO.new
|
45
|
+
dom = create_java_dom(File.open(input_filename).read)
|
46
|
+
|
47
|
+
renderer = build_renderer(dom)
|
48
|
+
renderer.create_pdf(io.to_outputstream)
|
49
|
+
|
50
|
+
if manifest['pdf_username'] && manifest['pdf_password']
|
51
|
+
io = encrypt_pdf(io, manifest)
|
52
|
+
end
|
53
|
+
|
54
|
+
@output = generate_output_filename('pdf')
|
55
|
+
File.open(@output, "w+") do |f|
|
56
|
+
f.write(io.string)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
@output
|
60
|
+
end
|
61
|
+
|
62
|
+
def encrypt_pdf(io, manifest)
|
63
|
+
temp = Tempfile.new('temp')
|
64
|
+
temp.write io.string
|
65
|
+
temp.flush
|
66
|
+
temp.rewind
|
67
|
+
out = StringIO.new
|
68
|
+
reader = PdfReader.new(temp.to_inputstream)
|
69
|
+
stamper = PdfStamper.new(reader, out.to_outputstream)
|
70
|
+
stamper.setEncryption(PdfEncryption::STANDARD_ENCRYPTION_40, manifest['pdf_username'], manifest['pdf_password'], 1)
|
71
|
+
stamper.close
|
72
|
+
out
|
73
|
+
end
|
74
|
+
|
75
|
+
class UserAgent < org.xhtmlrenderer.pdf.ITextUserAgent
|
76
|
+
|
77
|
+
def initialize(output_device)
|
78
|
+
super
|
79
|
+
end
|
80
|
+
|
81
|
+
def resolveURI(uri)
|
82
|
+
if uri =~ /^\//
|
83
|
+
super(uri[1..uri.length])
|
84
|
+
else
|
85
|
+
super(uri)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
alias :resolve_uri :resolveURI
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module DocverterServer; end
|
2
|
+
|
3
|
+
require 'docverter-server/version'
|
4
|
+
require 'docverter-server/conversion_types'
|
5
|
+
require 'docverter-server/manifest'
|
6
|
+
require 'docverter-server/runner/base'
|
7
|
+
require 'docverter-server/runner/pandoc'
|
8
|
+
require 'docverter-server/runner/calibre'
|
9
|
+
require 'docverter-server/runner/pdf'
|
10
|
+
require 'docverter-server/conversion'
|
11
|
+
require 'docverter-server/app'
|
metadata
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: docverter-server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.1
|
6
|
+
platform: java
|
7
|
+
authors:
|
8
|
+
- Pete Keen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mime-types
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: !binary |-
|
21
|
+
MA==
|
22
|
+
none: false
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ! '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: !binary |-
|
28
|
+
MA==
|
29
|
+
none: false
|
30
|
+
prerelease: false
|
31
|
+
type: :runtime
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: sinatra
|
34
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: !binary |-
|
39
|
+
MA==
|
40
|
+
none: false
|
41
|
+
requirement: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: !binary |-
|
46
|
+
MA==
|
47
|
+
none: false
|
48
|
+
prerelease: false
|
49
|
+
type: :runtime
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: rake
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: !binary |-
|
57
|
+
MA==
|
58
|
+
none: false
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: !binary |-
|
64
|
+
MA==
|
65
|
+
none: false
|
66
|
+
prerelease: false
|
67
|
+
type: :runtime
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: mizuno
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: !binary |-
|
75
|
+
MA==
|
76
|
+
none: false
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: !binary |-
|
82
|
+
MA==
|
83
|
+
none: false
|
84
|
+
prerelease: false
|
85
|
+
type: :runtime
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: flying_saucer
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: !binary |-
|
93
|
+
MA==
|
94
|
+
none: false
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: !binary |-
|
100
|
+
MA==
|
101
|
+
none: false
|
102
|
+
prerelease: false
|
103
|
+
type: :runtime
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: mocha
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: !binary |-
|
111
|
+
MA==
|
112
|
+
none: false
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: !binary |-
|
118
|
+
MA==
|
119
|
+
none: false
|
120
|
+
prerelease: false
|
121
|
+
type: :development
|
122
|
+
- !ruby/object:Gem::Dependency
|
123
|
+
name: shoulda
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: !binary |-
|
129
|
+
MA==
|
130
|
+
none: false
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: !binary |-
|
136
|
+
MA==
|
137
|
+
none: false
|
138
|
+
prerelease: false
|
139
|
+
type: :development
|
140
|
+
description: Document conversion service with a REST API
|
141
|
+
email:
|
142
|
+
- pete@docverter.com
|
143
|
+
executables: []
|
144
|
+
extensions: []
|
145
|
+
extra_rdoc_files: []
|
146
|
+
files:
|
147
|
+
- .buildpacks
|
148
|
+
- .gitignore
|
149
|
+
- .vendor_urls
|
150
|
+
- Gemfile
|
151
|
+
- Gemfile.lock
|
152
|
+
- LICENSE
|
153
|
+
- Procfile
|
154
|
+
- README.md
|
155
|
+
- Rakefile
|
156
|
+
- config.ru
|
157
|
+
- doc/api.md
|
158
|
+
- doc/examples/html_to_encrypted_pdf/convert.sh
|
159
|
+
- doc/examples/html_to_encrypted_pdf/imfeldoublepica.ttf
|
160
|
+
- doc/examples/html_to_encrypted_pdf/input.html
|
161
|
+
- doc/examples/html_to_encrypted_pdf/marcellus.ttf
|
162
|
+
- doc/examples/html_to_encrypted_pdf/stylesheet.css
|
163
|
+
- doc/examples/html_to_pdf/convert.sh
|
164
|
+
- doc/examples/html_to_pdf/imfeldoublepica.ttf
|
165
|
+
- doc/examples/html_to_pdf/input.html
|
166
|
+
- doc/examples/html_to_pdf/marcellus.ttf
|
167
|
+
- doc/examples/html_to_pdf/stylesheet.css
|
168
|
+
- doc/examples/markdown_to_epub/chapter1.md
|
169
|
+
- doc/examples/markdown_to_epub/chapter2.md
|
170
|
+
- doc/examples/markdown_to_epub/convert.sh
|
171
|
+
- doc/examples/markdown_to_epub/document-open.png
|
172
|
+
- doc/examples/markdown_to_epub/markdown_to_epub.epub
|
173
|
+
- doc/examples/markdown_to_epub/markdown_to_epub.epub.html
|
174
|
+
- doc/examples/markdown_to_epub/metadata.xml
|
175
|
+
- doc/examples/markdown_to_epub/stylesheet.css
|
176
|
+
- doc/examples/markdown_to_epub/title.txt
|
177
|
+
- doc/examples/markdown_to_mobi/chapter1.md
|
178
|
+
- doc/examples/markdown_to_mobi/chapter2.md
|
179
|
+
- doc/examples/markdown_to_mobi/convert.sh
|
180
|
+
- doc/examples/markdown_to_mobi/document-open.png
|
181
|
+
- doc/examples/markdown_to_mobi/metadata.xml
|
182
|
+
- doc/examples/markdown_to_mobi/stylesheet.css
|
183
|
+
- doc/examples/markdown_to_mobi/title.txt
|
184
|
+
- doc/examples/markdown_to_pdf/chapter1.md
|
185
|
+
- doc/examples/markdown_to_pdf/chapter2.md
|
186
|
+
- doc/examples/markdown_to_pdf/convert.sh
|
187
|
+
- doc/examples/markdown_to_pdf/imfeldoublepica.ttf
|
188
|
+
- doc/examples/markdown_to_pdf/manifest.yml
|
189
|
+
- doc/examples/markdown_to_pdf/marcellus.ttf
|
190
|
+
- doc/examples/markdown_to_pdf/stylesheet.css
|
191
|
+
- docverter.gemspec
|
192
|
+
- lib/docverter-server.rb
|
193
|
+
- lib/docverter-server/app.rb
|
194
|
+
- lib/docverter-server/conversion.rb
|
195
|
+
- lib/docverter-server/conversion_types.rb
|
196
|
+
- lib/docverter-server/jars/bcprov-ext-jdk15-1.43.jar
|
197
|
+
- lib/docverter-server/jars/htmlcleaner-2.2.jar
|
198
|
+
- lib/docverter-server/manifest.rb
|
199
|
+
- lib/docverter-server/runner/base.rb
|
200
|
+
- lib/docverter-server/runner/calibre.rb
|
201
|
+
- lib/docverter-server/runner/pandoc.rb
|
202
|
+
- lib/docverter-server/runner/pdf.rb
|
203
|
+
- lib/docverter-server/version.rb
|
204
|
+
homepage: http://www.docverter.com
|
205
|
+
licenses: []
|
206
|
+
post_install_message:
|
207
|
+
rdoc_options: []
|
208
|
+
require_paths:
|
209
|
+
- lib
|
210
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - ! '>='
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: !binary |-
|
215
|
+
MA==
|
216
|
+
none: false
|
217
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: !binary |-
|
222
|
+
MA==
|
223
|
+
none: false
|
224
|
+
requirements: []
|
225
|
+
rubyforge_project:
|
226
|
+
rubygems_version: 1.8.24
|
227
|
+
signing_key:
|
228
|
+
specification_version: 3
|
229
|
+
summary: Document conversion service with a REST API
|
230
|
+
test_files: []
|