@@ -22,7 +22,7 @@ module Docx
2222 class Document
2323 include Docx ::SimpleInspect
2424
25- attr_reader :xml , :doc , :zip , :styles
25+ attr_reader :xml , :doc , :zip , :styles , :headers
2626
2727 def initialize ( path_or_io , options = { } )
2828 @replace = { }
@@ -40,6 +40,7 @@ def initialize(path_or_io, options = {})
4040 @document_xml = document . get_input_stream . read
4141 @doc = Nokogiri ::XML ( @document_xml )
4242 load_styles
43+ load_headers
4344 yield ( self ) if block_given?
4445 ensure
4546 @zip . close unless @zip . nil?
@@ -200,6 +201,15 @@ def with_zip64_disabled
200201 Zip . write_zip64_support = previous
201202 end
202203
204+ def load_headers
205+ header_files = @zip . glob ( "word/header*.xml" ) . map { |h | h . name }
206+ filename_and_contents_pairs = header_files . map do |file |
207+ simple_file_name = file . sub ( /^word\/ / , "" ) . sub ( /\. xml$/ , "" )
208+ [ simple_file_name , Nokogiri ::XML ( @zip . read ( file ) ) ]
209+ end
210+ @headers = Hash [ filename_and_contents_pairs ]
211+ end
212+
203213 def load_styles
204214 @styles_xml = @zip . read ( 'word/styles.xml' )
205215 @styles = Nokogiri ::XML ( @styles_xml )
0 commit comments