diff --git a/lib/docx/document.rb b/lib/docx/document.rb index cd4d6d0..39fe5ed 100755 --- a/lib/docx/document.rb +++ b/lib/docx/document.rb @@ -22,7 +22,7 @@ module Docx class Document include Docx::SimpleInspect - attr_reader :xml, :doc, :zip, :styles, :headers + attr_reader :xml, :doc, :zip, :styles, :headers, :footers def initialize(path_or_io, options = {}) @replace = {} @@ -41,6 +41,7 @@ def initialize(path_or_io, options = {}) @doc = Nokogiri::XML(@document_xml) load_styles load_headers + load_footers yield(self) if block_given? ensure @zip.close unless @zip.nil? @@ -210,6 +211,15 @@ def load_headers @headers = Hash[filename_and_contents_pairs] end + def load_footers + footer_files = @zip.glob("word/footer*.xml").map{|h| h.name} + filename_and_contents_pairs = footer_files.map do |file| + simple_file_name = file.sub(/^word\//, "").sub(/\.xml$/, "") + [simple_file_name, Nokogiri::XML(@zip.read(file))] + end + @footers = Hash[filename_and_contents_pairs] + end + def load_styles @styles_xml = @zip.read('word/styles.xml') @styles = Nokogiri::XML(@styles_xml) diff --git a/spec/docx/document_spec.rb b/spec/docx/document_spec.rb index 32f8a7a..2825eb5 100755 --- a/spec/docx/document_spec.rb +++ b/spec/docx/document_spec.rb @@ -72,6 +72,18 @@ end end + describe 'read footers' do + before do + @doc = Docx::Document.open(@fixtures_path + '/multi_doc.docx') + end + + it 'can extract footers' do + expect(@doc.footers).to_not be_nil + expect(@doc.footers.keys).to eq ["footer1"] + expect(@doc.footers["footer1"].text).to eq "Hello from the footer." + end + end + describe 'read tables' do before do @doc = Docx::Document.open(@fixtures_path + '/tables.docx')