Class: DocverterServer::Runner::PDF
- Inherits:
-
Base
- Object
- Base
- DocverterServer::Runner::PDF
show all
- Defined in:
- lib/docverter-server/runner/pdf.rb
Defined Under Namespace
Classes: UserAgent
Instance Attribute Summary
Attributes inherited from Base
#directory, #input_filename, #options
Instance Method Summary
collapse
Methods inherited from Base
#generate_output_filename, #initialize, #run_command, #with_manifest
Instance Method Details
#build_renderer(dom) ⇒ Object
28
29
30
31
32
33
34
35
36
|
# File 'lib/docverter-server/runner/pdf.rb', line 28
def build_renderer(dom)
renderer = ITextRenderer.new
agent = UserAgent.new(renderer.output_device)
agent.shared_context = renderer.shared_context
renderer.shared_context.user_agent_callback = agent
renderer.set_document(dom, path_to_url(directory))
renderer.layout
renderer
end
|
#create_java_dom(html) ⇒ Object
18
19
20
21
22
23
24
25
26
|
# File 'lib/docverter-server/runner/pdf.rb', line 18
def create_java_dom(html)
cleaner = HtmlCleaner.new(ConfigFileTagProvider.new(java.io.File.new(File.expand_path('../../jars/tag_config.xml', __FILE__))))
props = cleaner.get_properties
props.setTranslateSpecialEntities(true)
props.setAdvancedXmlEscape(true)
props.setRecognizeUnicodeChars(true)
node = cleaner.clean(html)
DomSerializer.new(props, true).createDOM(node)
end
|
#encrypt_pdf(io, manifest) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/docverter-server/runner/pdf.rb', line 63
def encrypt_pdf(io, manifest)
temp = Tempfile.new('temp')
temp.write io.string
temp.flush
temp.rewind
out = StringIO.new
reader = PdfReader.new(temp.to_inputstream)
stamper = PdfStamper.new(reader, out.to_outputstream)
stamper.setEncryption(PdfEncryption::STANDARD_ENCRYPTION_40, manifest['pdf_username'], manifest['pdf_password'], 1)
stamper.close
out
end
|
#path_to_url(path) ⇒ Object
38
39
40
|
# File 'lib/docverter-server/runner/pdf.rb', line 38
def path_to_url(path)
java.io.File.new(path).to_uri.to_url.to_string
end
|
#run ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/docverter-server/runner/pdf.rb', line 42
def run
with_manifest do |manifest|
io = StringIO.new
dom = create_java_dom(File.open(input_filename).read)
renderer = build_renderer(dom)
renderer.create_pdf(io.to_outputstream)
if manifest['pdf_username'] && manifest['pdf_password']
io = encrypt_pdf(io, manifest)
end
@output = generate_output_filename('pdf')
File.open(@output, "w+") do |f|
f.write(io.string)
end
end
@output
end
|