omnidocx 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/lib/omnidocx.rb +113 -148
- data/lib/omnidocx/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a89c615f613daca6054a2f6273a69ed1a4a2dd1d
|
4
|
+
data.tar.gz: c174498247a47e8d5e0e9e5b371da29bcb1a2067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8a12f714b55740e555271575a6683fc02fc4c29450c281fc1915f99b68485fd84d11c222a906bdc9db4c919f8ab5ff4021e5ebe97065132efa782b055bb7f30
|
7
|
+
data.tar.gz: 24be637cf6510ce7da8d4b3648f4b3cc6dd7ef7c9a38b24aaac2f5a6089c2d2f0a300e76acd6ccff21b2adec89980d07d6c26bdccaef9cb3b59b65c23c4a967e
|
data/.DS_Store
CHANGED
Binary file
|
data/lib/omnidocx.rb
CHANGED
@@ -36,7 +36,7 @@ module Omnidocx
|
|
36
36
|
|
37
37
|
|
38
38
|
def self.write_images_to_doc(images_to_write=[], doc_path, final_path)
|
39
|
-
|
39
|
+
|
40
40
|
temp_file = Tempfile.new('docxedit-')
|
41
41
|
|
42
42
|
#every docx file is ultimately a zip file with the extension as docx
|
@@ -53,11 +53,11 @@ module Omnidocx
|
|
53
53
|
|
54
54
|
cnt = 20
|
55
55
|
media_hash = {}
|
56
|
-
|
56
|
+
|
57
57
|
#to maintain a list of all the content type info to be added upon adding media with different extensions
|
58
58
|
media_content_type_hash = {}
|
59
59
|
|
60
|
-
|
60
|
+
|
61
61
|
@document_zip.entries.each do |e|
|
62
62
|
if e.name == RELATIONSHIP_FILE_PATH
|
63
63
|
in_stream = e.get_input_stream.read
|
@@ -66,7 +66,7 @@ module Omnidocx
|
|
66
66
|
if e.name == CONTENT_TYPES_FILE
|
67
67
|
in_stream = e.get_input_stream.read
|
68
68
|
@cont_type_doc = Nokogiri::XML in_stream #Content types XML to be updated later on with the additional media type info
|
69
|
-
end
|
69
|
+
end
|
70
70
|
end
|
71
71
|
|
72
72
|
Zip::OutputStream.open(temp_file.path) do |zos|
|
@@ -74,14 +74,14 @@ module Omnidocx
|
|
74
74
|
@document_zip.entries.each do |e|
|
75
75
|
unless [DOCUMENT_FILE_PATH, RELATIONSHIP_FILE_PATH, CONTENT_TYPES_FILE].include?(e.name)
|
76
76
|
#writing the files not needed to be edited back to the new zip
|
77
|
-
zos.put_next_entry(e.name)
|
77
|
+
zos.put_next_entry(e.name)
|
78
78
|
zos.print e.get_input_stream.read
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
images_to_write.each_with_index do |img, index|
|
83
83
|
data = ''
|
84
|
-
|
84
|
+
|
85
85
|
#checking if image path is a url or a local path
|
86
86
|
uri = URI.parse(img[:path])
|
87
87
|
if %w( http https ).include?(uri.scheme)
|
@@ -101,16 +101,16 @@ module Omnidocx
|
|
101
101
|
#making an entry for a new media type
|
102
102
|
media_content_type_hash["#{extension}"] = MIME::Types.type_for(img_url_no_params)[0].to_s
|
103
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
zos.put_next_entry("word/media/image#{cnt}.#{extension}")
|
106
106
|
zos.print data #storing the image in the new zip
|
107
|
-
|
107
|
+
|
108
108
|
new_rel_node = Nokogiri::XML::Node.new("Relationship", @rel_doc)
|
109
109
|
new_rel_node["Id"] = "rid#{cnt}"
|
110
110
|
new_rel_node["Type"] = MEDIA_TYPE
|
111
111
|
new_rel_node["Target"] = "media/image#{cnt}.#{extension}"
|
112
112
|
@rel_doc.at('Relationships').add_child(new_rel_node) #adding a new relationship node to the relationships xml
|
113
|
-
|
113
|
+
|
114
114
|
hdpi = img[:hdpi] || HORIZONTAL_DPI
|
115
115
|
vdpi = img[:vdpi] || VERTICAL_DPI
|
116
116
|
|
@@ -136,7 +136,7 @@ module Omnidocx
|
|
136
136
|
pic_cNvPr = dr_node.xpath(".//pic:cNvPr", NAMESPACES).last
|
137
137
|
pic_cNvPr["name"] = "image#{cnt}.#{extension}"
|
138
138
|
pic_cNvPr["id"] = "#{cnt}"
|
139
|
-
|
139
|
+
|
140
140
|
blip = dr_node.xpath(".//a:blip", NAMESPACES).last
|
141
141
|
blip.attributes["embed"].value = "rid#{cnt}"
|
142
142
|
end
|
@@ -147,7 +147,7 @@ module Omnidocx
|
|
147
147
|
media_hash[cnt] = index
|
148
148
|
end
|
149
149
|
cnt+=1
|
150
|
-
end
|
150
|
+
end
|
151
151
|
|
152
152
|
#updating the content type info
|
153
153
|
media_content_type_hash.each do |ext, cont_type|
|
@@ -174,19 +174,18 @@ module Omnidocx
|
|
174
174
|
FileUtils.mv(temp_file.path, final_path)
|
175
175
|
end
|
176
176
|
|
177
|
-
def self.merge_documents(documents_to_merge=[], final_path, page_break)
|
177
|
+
def self.merge_documents(documents_to_merge = [], final_path, page_break)
|
178
178
|
temp_file = Tempfile.new('docxedit-')
|
179
|
+
documents_to_merge_count = documents_to_merge.count
|
179
180
|
|
180
|
-
if
|
181
|
+
if documents_to_merge_count < 2
|
181
182
|
return "Pass atleast two documents to be merged" #minimum two documents required to merge
|
182
183
|
end
|
183
184
|
|
184
185
|
#first document to which the others will be appended (header/footer will be picked from this document)
|
185
186
|
@main_document_zip = Zip::File.new(documents_to_merge.first)
|
186
|
-
@
|
187
|
-
@main_document_xml = Nokogiri::XML @main_document_content
|
187
|
+
@main_document_xml = Nokogiri::XML(@main_document_zip.read(DOCUMENT_FILE_PATH))
|
188
188
|
@main_body = @main_document_xml.xpath("//w:body")
|
189
|
-
@rel_nodes = ""
|
190
189
|
@rel_doc = ""
|
191
190
|
@cont_type_doc = ""
|
192
191
|
@style_doc = ""
|
@@ -213,32 +212,26 @@ module Omnidocx
|
|
213
212
|
#array to store information about additional content types other than the ones present in the first(main) document
|
214
213
|
additional_cont_type_entries = []
|
215
214
|
|
215
|
+
# prepare initial set of data from first document
|
216
|
+
@main_document_zip.entries.each do |zip_entrie|
|
217
|
+
in_stream = zip_entrie.get_input_stream.read
|
216
218
|
|
217
|
-
|
218
|
-
if
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
@cont_type_doc = Nokogiri::XML in_stream
|
219
|
+
#Relationship XML
|
220
|
+
@rel_doc = Nokogiri::XML(in_stream) if zip_entrie.name == RELATIONSHIP_FILE_PATH
|
221
|
+
|
222
|
+
#Styles XML to be updated later on with the additional tables info
|
223
|
+
@style_doc = Nokogiri::XML(in_stream) if zip_entrie.name == STYLES_FILE_PATH
|
224
|
+
|
225
|
+
#Content types XML to be updated later on with the additional media type info
|
226
|
+
if zip_entrie.name == CONTENT_TYPES_FILE
|
227
|
+
@cont_type_doc = Nokogiri::XML in_stream
|
226
228
|
default_nodes = @cont_type_doc.css "Default"
|
227
229
|
override_nodes = @cont_type_doc.css "Override"
|
228
|
-
default_nodes.each
|
229
|
-
|
230
|
-
end
|
231
|
-
override_nodes.each do |node|
|
232
|
-
override_partnames << node["PartName"]
|
233
|
-
end
|
230
|
+
default_nodes.each { |node| default_extensions << node["Extension"] }
|
231
|
+
override_nodes.each { |node| override_partnames << node["PartName"] }
|
234
232
|
end
|
235
|
-
if e.name == STYLES_FILE_PATH
|
236
|
-
in_stream = e.get_input_stream.read
|
237
|
-
@style_doc = Nokogiri::XML in_stream #Styles XML to be updated later on with the additional tables info
|
238
|
-
end
|
239
233
|
end
|
240
234
|
|
241
|
-
|
242
235
|
#opening a new zip for the final document
|
243
236
|
Zip::OutputStream.open(temp_file.path) do |zos|
|
244
237
|
documents_to_merge.each do |doc_path|
|
@@ -247,32 +240,30 @@ module Omnidocx
|
|
247
240
|
head_foot_media["doc#{doc_cnt}"] = []
|
248
241
|
table_hash["doc#{doc_cnt}"] = {}
|
249
242
|
zip_file = Zip::File.new(doc_path)
|
250
|
-
|
243
|
+
|
251
244
|
zip_file.entries.each do |e|
|
252
245
|
if [HEADER_RELS_FILE_PATH, FOOTER_RELS_FILE_PATH].include?(e.name)
|
253
|
-
|
254
|
-
hf_xml = Nokogiri::XML hf_content
|
246
|
+
hf_xml = Nokogiri::XML(e.get_input_stream.read)
|
255
247
|
hf_xml.css("Relationship").each do |rel_node|
|
256
248
|
#media file names in header & footer need not be changed as they will be picked from the first document only and not the subsequent documents, so no chance of duplication
|
257
|
-
head_foot_media["doc#{doc_cnt}"] << rel_node["Target"].gsub("media/","")
|
249
|
+
head_foot_media["doc#{doc_cnt}"] << rel_node["Target"].gsub("media/", "")
|
258
250
|
end
|
259
251
|
end
|
260
252
|
if e.name == CONTENT_TYPES_FILE
|
261
|
-
|
262
|
-
cont_type_xml = Nokogiri::XML cont_types
|
253
|
+
cont_type_xml = Nokogiri::XML(e.get_input_stream.read)
|
263
254
|
default_nodes = cont_type_xml.css "Default"
|
264
255
|
override_nodes = cont_type_xml.css "Override"
|
265
256
|
|
266
257
|
default_nodes.each do |node|
|
267
258
|
#checking if extension type already present in the content types xml extracted from the first document
|
268
|
-
if !default_extensions.include?(node["Extension"]) && !node.to_xml.empty?
|
259
|
+
if !default_extensions.include?(node["Extension"]) && !node.to_xml.empty?
|
269
260
|
additional_cont_type_entries << node
|
270
261
|
default_extensions << node["Extension"] #extra extension type to be added to the content types XML
|
271
262
|
end
|
272
263
|
end
|
273
264
|
|
274
265
|
override_nodes.each do |node|
|
275
|
-
#checking if override content
|
266
|
+
#checking if override content type info already present in the content types xml extracted from the first document
|
276
267
|
if !override_partnames.include?(node["PartName"]) && !node.to_xml.empty?
|
277
268
|
additional_cont_type_entries << node
|
278
269
|
override_partnames << node["Partname"] #extra content type info to be added to the content types XML
|
@@ -281,26 +272,22 @@ module Omnidocx
|
|
281
272
|
end
|
282
273
|
end
|
283
274
|
|
284
|
-
|
285
275
|
zip_file.entries.each do |e|
|
286
276
|
unless e.name == DOCUMENT_FILE_PATH || [RELATIONSHIP_FILE_PATH, CONTENT_TYPES_FILE, STYLES_FILE_PATH].include?(e.name)
|
287
277
|
if e.name.include?("word/media/image")
|
288
|
-
|
289
|
-
|
290
|
-
e_name = e.name
|
291
|
-
#writing the media file back to the new zip with the new name
|
292
|
-
zos.put_next_entry(e_name)
|
293
|
-
zos.print e.get_input_stream.read
|
294
|
-
#storing the old media file name to new media file name to mapping in the media hash
|
295
|
-
media_hash["doc#{doc_cnt}"][e.name.gsub("word/media/","")] = cnt
|
296
|
-
cnt+=1
|
278
|
+
# media files from header & footer from first document shouldn't be changed
|
279
|
+
if head_foot_media["doc#{doc_cnt}"].include?(e.name.gsub("word/media/", ""))
|
280
|
+
e_name = e.name
|
297
281
|
else
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
282
|
+
e_name = e.name.gsub(/image[0-9]*./, "image#{cnt}.")
|
283
|
+
#storing the old media file name to new media file name to mapping in the media hash
|
284
|
+
media_hash["doc#{doc_cnt}"][e.name.gsub("word/media/", "")] = cnt
|
285
|
+
cnt += 1
|
286
|
+
end
|
287
|
+
zos.put_next_entry(e_name)
|
288
|
+
zos.print e.get_input_stream.read
|
302
289
|
else
|
303
|
-
#writing the files not needed to be edited back to the new zip (only from the first document, so as to avoid duplication)
|
290
|
+
#writing the files not needed to be edited back to the new zip (only from the first document, so as to avoid duplication)
|
304
291
|
if doc_cnt == 0
|
305
292
|
zos.put_next_entry(e.name)
|
306
293
|
zos.print e.get_input_stream.read
|
@@ -309,112 +296,90 @@ module Omnidocx
|
|
309
296
|
end
|
310
297
|
end
|
311
298
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
299
|
+
#updating the stlye ids in the table elements present in the document content XML
|
300
|
+
doc_content = doc_cnt == 0 ? @main_body : Nokogiri::XML(zip_file.read(DOCUMENT_FILE_PATH))
|
301
|
+
doc_content.xpath("//w:tbl").each do |tbl_node|
|
302
|
+
val_attr = tbl_node.xpath('.//w:tblStyle').last.attributes['val']
|
303
|
+
table_hash["doc#{doc_cnt}"][val_attr.value.to_s] = tbl_cnt
|
304
|
+
val_attr.value = val_attr.value.gsub(/[0-9]+/, tbl_cnt.to_s)
|
305
|
+
tbl_cnt += 1
|
317
306
|
end
|
318
307
|
|
319
|
-
|
320
|
-
|
321
|
-
|
308
|
+
zip_file.entries.each do |e|
|
309
|
+
#updating the relationship ids with the new media file names in the relationships XML
|
310
|
+
if e.name == RELATIONSHIP_FILE_PATH
|
311
|
+
rel_xml = doc_cnt == 0 ? @rel_doc : Nokogiri::XML(e.get_input_stream.read)
|
322
312
|
|
323
|
-
|
324
|
-
|
325
|
-
tbl_cnt+=1
|
326
|
-
end
|
313
|
+
rel_xml.css("Relationship").each do |node|
|
314
|
+
next unless node.values.to_s.include?("image")
|
327
315
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
end
|
342
|
-
#adding the table style information to the styles xml, if any tables present in the document being merged
|
343
|
-
if e.name == STYLES_FILE_PATH
|
344
|
-
table_nodes = @style_doc.xpath('//w:style').select{|n| n.attributes["type"].value == "table"}
|
345
|
-
table_nodes.each do |table_node|
|
346
|
-
tab_val = table_hash["doc#{doc_cnt}"]["#{table_node.attributes['styleId'].value}"]
|
347
|
-
table_node.attributes['styleId'].value = table_node.attributes['styleId'].value.gsub(/[0-9]+/,"#{tab_val}")
|
316
|
+
i = media_hash["doc#{doc_cnt}"][node['Target'].to_s.gsub("media/", "")]
|
317
|
+
target_val = node["Target"].gsub(/image[0-9]*./, "image#{i}.")
|
318
|
+
rid_hash["doc#{doc_cnt}"][node['Id'].to_s] = i.to_s
|
319
|
+
|
320
|
+
id_attr = node.attributes["Id"]
|
321
|
+
new_id = id_attr.value.gsub(/[0-9]+/, i.to_s)
|
322
|
+
if doc_cnt == 0
|
323
|
+
node["Target"] = target_val
|
324
|
+
id_attr.value = new_id
|
325
|
+
else
|
326
|
+
# adding the extra relationship nodes for the media files to the relationship XML
|
327
|
+
new_rel_node = "<Relationship Id=#{new_id} Type=#{node["Type"]} Target=#{target_val} />"
|
328
|
+
@rel_doc.at('Relationships').add_child(new_rel_node)
|
348
329
|
end
|
349
330
|
end
|
350
331
|
end
|
351
|
-
else
|
352
|
-
zip_file.entries.each do |e|
|
353
|
-
if e.name == RELATIONSHIP_FILE_PATH
|
354
|
-
input_stream = e.get_input_stream.read
|
355
|
-
rel_xml = Nokogiri::XML input_stream
|
356
|
-
rel_xml_nodes = rel_xml.css "Relationship"
|
357
|
-
rel_xml_nodes.each do |node|
|
358
|
-
if node.values.to_s.include?("image")
|
359
|
-
i = media_hash["doc#{doc_cnt}"]["#{node['Target']}".gsub("media/","")]
|
360
|
-
target_val = node["Target"].gsub(/image[0-9]*./,"image#{i}.")
|
361
|
-
rid_hash["doc#{doc_cnt}"]["#{node['Id']}"] = "#{i}"
|
362
|
-
|
363
|
-
new_rel_node = Nokogiri::XML::Node.new("Relationship", @rel_doc)
|
364
|
-
new_rel_node["Id"] = node.attributes["Id"].value.gsub(/[0-9]+/,"#{i}")
|
365
|
-
new_rel_node["Type"] = node["Type"]
|
366
|
-
new_rel_node["Target"] = target_val
|
367
|
-
|
368
|
-
#adding the extra relationship nodes for the media files from the subsequent documents (apart from first) to the relationship XML
|
369
|
-
@rel_doc.at('Relationships').add_child(new_rel_node)
|
370
|
-
end
|
371
|
-
end
|
372
|
-
end
|
373
332
|
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
333
|
+
#adding the table style information to the styles xml, if any tables present in the document being merged
|
334
|
+
if e.name == STYLES_FILE_PATH
|
335
|
+
style_xml = doc_cnt == 0 ? @style_doc : Nokogiri::XML(e.get_input_stream.read)
|
336
|
+
table_nodes = style_xml.xpath('//w:style').select{ |n| n.attributes["type"].value == "table" }
|
337
|
+
table_nodes = table_nodes.select{ |n| n.attributes["styleId"].value != "TableNormal" } if doc_cnt != 0
|
338
|
+
|
339
|
+
table_nodes.each do |table_node|
|
340
|
+
style_id_attr = table_node.attributes['styleId']
|
341
|
+
tab_val = table_hash["doc#{doc_cnt}"][style_id_attr.value.to_s]
|
342
|
+
style_id_attr.value = style_id_attr.value.gsub(/[0-9]+/, tab_val.to_s)
|
343
|
+
|
344
|
+
#adding extra table style nodes to the styles xml, if any tables present in the document being merged
|
345
|
+
@style_doc.xpath("//w:styles").children.last.add_next_sibling(table_node.to_xml) if doc_cnt != 0
|
384
346
|
end
|
385
347
|
end
|
386
348
|
end
|
387
349
|
|
388
350
|
#updting the id and rid values for every drawing element in the document XML with the new counters
|
389
351
|
doc_content.xpath("//w:drawing").each do |dr_node|
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
352
|
+
docPr_node = dr_node.xpath(".//wp:docPr").last
|
353
|
+
docPr_node['id'] = docPr_id.to_s
|
354
|
+
docPr_id += 1
|
355
|
+
|
356
|
+
blip_node = dr_node.xpath(".//a:blip", NAMESPACES).last
|
357
|
+
# not all <w:drawing> are images and only image has <a:blip>
|
358
|
+
next if blip_node.nil?
|
359
|
+
embed_attr = blip_node.attributes["embed"]
|
360
|
+
i = rid_hash["doc#{doc_cnt}"][embed_attr.value]
|
361
|
+
embed_attr.value = embed_attr.value.gsub(/[0-9]+/, i)
|
396
362
|
end
|
397
363
|
|
398
|
-
|
399
364
|
if doc_cnt > 0
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
#adding a page break between documents being merged
|
405
|
-
if doc_cnt > 1 && page_break
|
406
|
-
@main_body.children.last.add_previous_sibling('<w:p><w:r><w:br w:type="page"/></w:r></w:p>')
|
407
|
-
end
|
365
|
+
#pulling out the <w:sectPr> element from the document body to be appended to the main document's body
|
366
|
+
body_nodes = doc_content.xpath('//w:body').children[0..-2]
|
367
|
+
|
408
368
|
#appending the body_nodes to main document's body
|
409
369
|
@main_body.children.last.add_previous_sibling(body_nodes.to_xml)
|
410
370
|
end
|
411
371
|
|
412
|
-
|
372
|
+
#adding a page break after each documents being merged
|
373
|
+
if page_break && doc_cnt < documents_to_merge_count - 1
|
374
|
+
@main_body.children.last.add_previous_sibling('<w:p><w:r><w:br w:type="page"/></w:r></w:p>')
|
375
|
+
end
|
376
|
+
|
377
|
+
doc_cnt += 1
|
413
378
|
end
|
414
379
|
|
415
380
|
#writing the updated styles XML to the new zip
|
416
381
|
zos.put_next_entry(STYLES_FILE_PATH)
|
417
|
-
zos.print @style_doc.to_xml
|
382
|
+
zos.print @style_doc.to_xml
|
418
383
|
|
419
384
|
#writing the updated relationships XML to the new zip
|
420
385
|
zos.put_next_entry(RELATIONSHIP_FILE_PATH)
|
@@ -426,7 +391,7 @@ module Omnidocx
|
|
426
391
|
@cont_type_doc.at("Types").add_child(node)
|
427
392
|
end
|
428
393
|
#writing the updated content types XML to the new zip
|
429
|
-
zos.print @cont_type_doc.to_xml
|
394
|
+
zos.print @cont_type_doc.to_xml
|
430
395
|
|
431
396
|
#writing the updated document content XML to the new zip
|
432
397
|
zos.put_next_entry(DOCUMENT_FILE_PATH)
|
@@ -434,7 +399,7 @@ module Omnidocx
|
|
434
399
|
end
|
435
400
|
|
436
401
|
#moving the temporary docx file to the final_path specified by the user
|
437
|
-
FileUtils.mv(temp_file.path, final_path)
|
402
|
+
FileUtils.mv(temp_file.path, final_path)
|
438
403
|
end
|
439
404
|
|
440
405
|
def self.replace_doc_content(replacement_hash={}, template_path, final_path)
|
@@ -453,7 +418,7 @@ module Omnidocx
|
|
453
418
|
@template_zip.entries.each do |e|
|
454
419
|
unless e.name == DOCUMENT_FILE_PATH
|
455
420
|
#writing the files not needed to be edited back to the new zip
|
456
|
-
zos.put_next_entry(e.name)
|
421
|
+
zos.put_next_entry(e.name)
|
457
422
|
zos.print e.get_input_stream.read
|
458
423
|
end
|
459
424
|
end
|
@@ -464,7 +429,7 @@ module Omnidocx
|
|
464
429
|
end
|
465
430
|
|
466
431
|
#moving the temporary docx file to the final_path specified by the user
|
467
|
-
FileUtils.mv(temp_file.path, final_path)
|
432
|
+
FileUtils.mv(temp_file.path, final_path)
|
468
433
|
end
|
469
434
|
|
470
435
|
def self.replace_header_content(replacement_hash={}, template_path, final_path)
|
@@ -488,7 +453,7 @@ module Omnidocx
|
|
488
453
|
@template_zip.entries.each do |e|
|
489
454
|
unless e.name == HEADER_FILE_PATH
|
490
455
|
#writing the files not needed to be edited back to the new zip
|
491
|
-
zos.put_next_entry(e.name)
|
456
|
+
zos.put_next_entry(e.name)
|
492
457
|
zos.print e.get_input_stream.read
|
493
458
|
end
|
494
459
|
end
|
@@ -499,7 +464,7 @@ module Omnidocx
|
|
499
464
|
end
|
500
465
|
|
501
466
|
#moving the temporary docx file to the final_path specified by the user
|
502
|
-
FileUtils.mv(temp_file.path, final_path)
|
467
|
+
FileUtils.mv(temp_file.path, final_path)
|
503
468
|
end
|
504
469
|
|
505
470
|
def self.replace_footer_content(replacement_hash={}, template_path, final_path)
|
@@ -523,7 +488,7 @@ module Omnidocx
|
|
523
488
|
@template_zip.entries.each do |e|
|
524
489
|
unless e.name == FOOTER_FILE_PATH
|
525
490
|
#writing the files not needed to be edited back to the new zip
|
526
|
-
zos.put_next_entry(e.name)
|
491
|
+
zos.put_next_entry(e.name)
|
527
492
|
zos.print e.get_input_stream.read
|
528
493
|
end
|
529
494
|
end
|
@@ -534,7 +499,7 @@ module Omnidocx
|
|
534
499
|
end
|
535
500
|
|
536
501
|
#moving the temporary docx file to the final_path specified by the user
|
537
|
-
FileUtils.mv(temp_file.path, final_path)
|
502
|
+
FileUtils.mv(temp_file.path, final_path)
|
538
503
|
end
|
539
504
|
|
540
505
|
end
|
data/lib/omnidocx/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omnidocx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Parth Nagori
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
requirements: []
|
131
131
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.6.13
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: A gem to merge docx files, write images to docx and other utilities.
|