Class: Htmltoword::Document
Class Method Summary
collapse
Instance Method Summary
collapse
template_file
Methods included from XSLTHelper
#document_xslt, #xslt, #xslt_path
Constructor Details
#initialize(template_path) ⇒ Document
Returns a new instance of Document.
44
45
46
47
|
# File 'lib/htmltoword/document.rb', line 44
def initialize(template_path)
@replaceable_files = {}
@template_path = template_path
end
|
Class Method Details
.create(content, template_name = nil, extras = false) ⇒ Object
7
8
9
10
11
12
|
# File 'lib/htmltoword/document.rb', line 7
def create(content, template_name = nil, = false)
template_name += extension if template_name && !template_name.end_with?(extension)
document = new(template_file(template_name))
document.replace_files(content, )
document.generate
end
|
.create_and_save(content, file_path, template_name = nil, extras = false) ⇒ Object
14
15
16
17
18
|
# File 'lib/htmltoword/document.rb', line 14
def create_and_save(content, file_path, template_name = nil, = false)
File.open(file_path, 'wb') do |out|
out << create(content, template_name, )
end
end
|
.create_with_content(template, content, extras = false) ⇒ Object
20
21
22
23
24
25
|
# File 'lib/htmltoword/document.rb', line 20
def create_with_content(template, content, = false)
template += extension unless template.end_with?(extension)
document = new(template_file(template))
document.replace_files(content, )
document.generate
end
|
.doc_xml_file ⇒ Object
31
32
33
|
# File 'lib/htmltoword/document.rb', line 31
def doc_xml_file
'word/document.xml'
end
|
.extension ⇒ Object
27
28
29
|
# File 'lib/htmltoword/document.rb', line 27
def extension
'.docx'
end
|
.numbering_xml_file ⇒ Object
35
36
37
|
# File 'lib/htmltoword/document.rb', line 35
def numbering_xml_file
'word/numbering.xml'
end
|
.relations_xml_file ⇒ Object
39
40
41
|
# File 'lib/htmltoword/document.rb', line 39
def relations_xml_file
'word/_rels/document.xml.rels'
end
|
Instance Method Details
#generate ⇒ Object
Generate a string representing the contents of a docx file.
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/htmltoword/document.rb', line 52
def generate
Zip::File.open(@template_path) do |template_zip|
buffer = Zip::OutputStream.write_buffer do |out|
template_zip.each do |entry|
out.put_next_entry entry.name
if @replaceable_files[entry.name] && entry.name == Document.doc_xml_file
source = entry.get_input_stream.read
source = source.sub(/(<w:body>)((.|\n)*?)(<w:sectPr)/, "\\1#{@replaceable_files[entry.name]}\\4")
out.write(source)
elsif @replaceable_files[entry.name]
out.write(@replaceable_files[entry.name])
else
out.write(template_zip.read(entry.name))
end
end
end
buffer.string
end
end
|
#replace_files(html, extras = false) ⇒ Object
73
74
75
76
77
78
79
|
# File 'lib/htmltoword/document.rb', line 73
def replace_files(html, = false)
html = '<body></body>' if html.nil? || html.empty?
source = Nokogiri::HTML(html.gsub(/>\s+</, '><'))
transform_and_replace(source, xslt_path('numbering'), Document.numbering_xml_file)
transform_and_replace(source, xslt_path('relations'), Document.relations_xml_file)
transform_doc_xml(source, )
end
|
81
82
83
84
85
|
# File 'lib/htmltoword/document.rb', line 81
def transform_doc_xml(source, = false)
transformed_source = xslt(stylesheet_name: 'cleanup').transform(source)
transformed_source = xslt(stylesheet_name: 'inline_elements').transform(transformed_source)
transform_and_replace(transformed_source, document_xslt(), Document.doc_xml_file, )
end
|