class Html2Docx::DocumentObjects::Image
Public Class Methods
new(document, relation, tmp_path)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 4 def initialize(document, relation, tmp_path) @document = document @relation = relation @tmp_path = tmp_path @media_path = nil @image = nil check_and_create_media_directory end
Public Instance Methods
add_image(image_object)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 15 def add_image(image_object) image = get_image_information(image_object) drawing_tag = create_drawing_tag inline_tag = create_inline_tag doc_pr_tag = create_doc_pr_tag(image) graphic_tag = create_graphic_tag(image) extent_tag = create_extent_tag(image) c_nv_graphic_frame_pr = create_c_nv_graphic_frame_pr(image) inline_tag.add_child(extent_tag) inline_tag.add_child(doc_pr_tag) inline_tag.add_child(c_nv_graphic_frame_pr) inline_tag.add_child(graphic_tag) drawing_tag.add_child(inline_tag) drawing_tag end
Private Instance Methods
check_and_create_media_directory()
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 65 def check_and_create_media_directory @media_path = File.join(@tmp_path, 'media') Dir.mkdir @media_path unless Dir.exist? @media_path end
create_av_lst_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 214 def create_av_lst_tag(image) Nokogiri::XML::Node.new('a:avLst', @document) end
create_blip_fill_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 132 def create_blip_fill_tag(image) blip_fill_tag = Nokogiri::XML::Node.new('pic:blipFill', @document) blip_tag = create_blip_tag(image) blip_fill_tag.add_child(blip_tag) stretch_tag = create_stretch_tag blip_fill_tag.add_child(stretch_tag) blip_fill_tag end
create_blip_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 144 def create_blip_tag(image) blip_tag = Nokogiri::XML::Node.new('a:blip', @document) blip_tag['r:embed'] = @relation.add_image(image, @media_path) blip_tag end
create_c_nv_graphic_frame_pr(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 226 def create_c_nv_graphic_frame_pr(image) c_nv_graphic_frame_pr_tag = Nokogiri::XML::Node.new('wp:cNvGraphicFramePr', @document) graphic_frame_locks_tag = create_graphic_frame_locks_tag(image) c_nv_graphic_frame_pr_tag.add_child(graphic_frame_locks_tag) c_nv_graphic_frame_pr_tag end
create_c_nv_pic_pr(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 126 def create_c_nv_pic_pr(image) c_nv_pic_pr_tag = Nokogiri::XML::Node.new('pic:cNvPicPr', @document) c_nv_pic_pr_tag end
create_c_nv_pr_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 117 def create_c_nv_pr_tag(image) c_nv_pr_tag = Nokogiri::XML::Node.new('pic:cNvPr', @document) c_nv_pr_tag['id'] = @relation.get_uniq_image_id c_nv_pr_tag['name'] = image[:name] c_nv_pr_tag['title'] = image[:title] c_nv_pr_tag end
create_doc_pr_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 56 def create_doc_pr_tag(image) doc_pr_tag = Nokogiri::XML::Node.new('wp:docPr', @document) doc_pr_tag['id'] = @relation.get_uniq_image_id doc_pr_tag['name'] = image[:name] doc_pr_tag['title'] = image[:title] doc_pr_tag end
create_drawing_tag()
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 46 def create_drawing_tag Nokogiri::XML::Node.new('w:drawing', @document) end
create_ext_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 196 def create_ext_tag(image) ext_tag = Nokogiri::XML::Node.new('a:ext', @document) ext_tag['cx'] = image[:width] * 9525 ext_tag['cy'] = image[:height] * 9525 ext_tag end
create_extent_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 218 def create_extent_tag(image) ext_tag = Nokogiri::XML::Node.new('wp:extent', @document) ext_tag['cx'] = image[:width] * 9525 ext_tag['cy'] = image[:height] * 9525 ext_tag end
create_fill_rect_tag()
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 160 def create_fill_rect_tag Nokogiri::XML::Node.new('a:fillRect', @document) end
create_graphic_data_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 80 def create_graphic_data_tag(image) graphic_data_tag = Nokogiri::XML::Node.new('a:graphicData', @document) graphic_data_tag['uri'] = 'http://schemas.openxmlformats.org/drawingml/2006/picture' pic_tag = create_pic_tag(image) graphic_data_tag.add_child(pic_tag) graphic_data_tag end
create_graphic_frame_locks_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 235 def create_graphic_frame_locks_tag(image) graphic_frame_locks_tag = Nokogiri::XML::Node.new('a:graphicFrameLocks', @document) graphic_frame_locks_tag['noChangeAspect'] = 1 graphic_frame_locks_tag end
create_graphic_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 71 def create_graphic_tag(image) graphic_tag = Nokogiri::XML::Node.new('a:graphic', @document) graphic_data_tag = create_graphic_data_tag(image) graphic_tag.add_child(graphic_data_tag) graphic_tag end
create_inline_tag()
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 50 def create_inline_tag anchor_tag = Nokogiri::XML::Node.new('wp:inline', @document) anchor_tag end
create_nv_pic_pr_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 105 def create_nv_pic_pr_tag(image) nv_pic_pr_tag = Nokogiri::XML::Node.new('pic:nvPicPr', @document) c_nv_pr_tag = create_c_nv_pr_tag(image) nv_pic_pr_tag.add_child(c_nv_pr_tag) c_nv_pic_pr = create_c_nv_pic_pr(image) nv_pic_pr_tag.add_child(c_nv_pic_pr) nv_pic_pr_tag end
create_off_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 188 def create_off_tag(image) off_tag = Nokogiri::XML::Node.new('a:off', @document) off_tag['x'] = '0' off_tag['y'] = '0' off_tag end
create_pic_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 90 def create_pic_tag(image) pic_tag = Nokogiri::XML::Node.new('pic:pic', @document) nv_pic_pr_tag = create_nv_pic_pr_tag(image) pic_tag.add_child(nv_pic_pr_tag) blip_fill_tag = create_blip_fill_tag(image) pic_tag.add_child(blip_fill_tag) sp_pr_tag = create_sp_pr_tag(image) pic_tag.add_child(sp_pr_tag) pic_tag end
create_prst_geom_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 204 def create_prst_geom_tag(image) prst_geom_tag = Nokogiri::XML::Node.new('a:prstGeom', @document) prst_geom_tag['prst'] = 'rect' av_lst_tag = create_av_lst_tag(image) prst_geom_tag.add_child(av_lst_tag) prst_geom_tag end
create_sp_pr_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 164 def create_sp_pr_tag(image) sp_pr_tag = Nokogiri::XML::Node.new('pic:spPr', @document) xfrm_tag = create_xfrm_tag(image) sp_pr_tag.add_child(xfrm_tag) prst_geom_tag = create_prst_geom_tag(image) sp_pr_tag.add_child(prst_geom_tag) sp_pr_tag end
create_stretch_tag()
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 151 def create_stretch_tag stretch_tag = Nokogiri::XML::Node.new('a:stretch', @document) fill_rect_tag = create_fill_rect_tag stretch_tag.add_child(fill_rect_tag) stretch_tag end
create_xfrm_tag(image)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 176 def create_xfrm_tag(image) xfrm_tag = Nokogiri::XML::Node.new('a:xfrm', @document) off_tag = create_off_tag(image) xfrm_tag.add_child(off_tag) ext_tag = create_ext_tag(image) xfrm_tag.add_child(ext_tag) xfrm_tag end
get_image_information(image_object)
click to toggle source
# File lib/Html2Docx/document_objects/image.rb, line 35 def get_image_information(image_object) id = @relation.get_latest_image_id + 1 path = image_object.attr('src') name = path.split('/').last title = image_object.attr('alt') || "Picture-#{id}" height = image_object.attr('height').to_i width = image_object.attr('width').to_i { name: name, title: title, path: path, height: height, width: width } end