private List<GlyphRun> findClosestRowVertically(List<List<GlyphRun>> rows, float y) {
        List<GlyphRun> best = null;
        float bestDistance = Float.POSITIVE_INFINITY;
        // Loop backwards since normally XPS files are in order so we will match the last element
        // TODO: This could be optimised using a binary search since we know rows is sorted
        for (int i = rows.size() - 1; i >= 0; i--) {
            List<GlyphRun> row = rows.get(i);
            if (row.size() == 0) {
                continue;
            }
            float distance = Math.abs(row.get(row.size() - 1).originY - y);
            // There is nothing better than 0
            if (distance == 0f) {
                return row;
            }
            if (distance < bestDistance) {
                best = row;
                bestDistance = distance;
            }
        }
        return best;
    }
Handles an individual page.  For now, this marks up
canvas entities in a &lt;div&gt; tag.  Based on the spec,
it currently relies on order within the xml for order of output
of text to xhtml.  We could do more complex processing of coordinates
for bidi-languages, but the spec implies that we should be able
to rely on storage order.
<p/>
As with our PDFParser, this currently dumps urls at the bottom of the page
and does not attempt to calculate the correct anchor text.
<p/>
TODO: integrate table markup
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSPageContentHandler.java