Uploaded image for project: 'Tika'
  1. Tika
  2. TIKA-1178

Improve docx multiple section handling - headers and footers

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • parser

    Description

      Currently docx to plain text is only accurate for single page files. First off, the sectPr tag right above the closing body tag is not the overall document property; it is the section property of the last section(if there is only one, then yes it is the overall document property per say). right now if I had a large docx file (let's say a book which i broke each chapter into it's own section) then i would get the last chapter's header as the beginning document's header.

      Addressing sectPr tags inside paragraphs:
      why are we wrapping the paragraph with the header and footer?
      we should be buffering up pages as we read the docx file, until we hit a section property where we decide how to wrap what we just consumed. I realize that it is difficult to determine page breaks when it is caused by overflow (not explicit page breaks).

      The time for completion is really dependent on how much improvement we want to add in this area.

      Just for reference, my assumptions on open office xml structure interpretation come from the documentation on this site: http://www.ecma-international.org/publications/standards/Ecma-376.htm

      UPDATE:

      sample code, test files, and output.

      InputStream in = new FileInputStream(test);

      ContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();

      OOXMLExtractorFactory.parse(in, handler, metadata, new ParseContext());

      String text = handler.toString();

      System.out.println(text);

      given a file with 3 pages, a section on each page, and a default header and footer (odd) for each section. for reading convenience, the text listed below describes itself. ie. "Header1" means the first page header text, ect.

      Here is a sample file(3pages_3sections_defaultHeaderFooter_mod.docx):

      Header 1

      First paragraph on page 1
      Second paragraph on page 1

      Footer 1

      Header 2

      First paragraph on page 2
      Second paragraph on page 2

      Footer 2

      Header 3

      First paragraph on page 3
      Second paragraph on page 3

      Footer 3

      the output I get is:

      Header 3
      First paragraph on page 1
      Header 1
      Second paragraph on page 1
      Footer 1
      First paragraph on page 2
      Header 2
      Second paragraph on page 2
      Footer 2
      First paragraph on page 3
      Second paragraph on page 3
      Footer 3

      Here is another file with only 1 section with first, odd, and even headers used (3pages_1section_FirstEvenOddHeaderFooter_mod.docx):

      First page header

      First paragraph on page 1
      Second paragraph on page 1

      First page footer

      Second page header (even)

      First paragraph on page 2
      Second paragraph on page 2

      Second page footer (even)

      Third page header (odd)

      First paragraph on page 3
      Second paragraph on page 3

      Third page footer (odd)

      actual output:

      First page header
      Second page header (even)
      Third page header (odd)
      First paragraph on page 1
      Second paragraph on page 1

      First paragraph on page 2
      Second paragraph on page 2

      First paragraph on page 3
      Second paragraph on page 3
      First page footer
      Second page footer (even)
      Third page footer (odd)

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              testaccount118 David Cole
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - 4h
                  4h
                  Remaining:
                  Remaining Estimate - 4h
                  4h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified