From f99fd686deea2761042866dcf59a34a71338ce4d Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sun, 1 Aug 2021 00:49:57 -0700 Subject: [PATCH] hocrtransform: ensure text is rendered in document order Previously we rendered text objects based on their vertical position, but this confuses some PDF viewers. Closes #813. --- src/ocrmypdf/hocrtransform.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/ocrmypdf/hocrtransform.py b/src/ocrmypdf/hocrtransform.py index 799c0099..ea91b673 100755 --- a/src/ocrmypdf/hocrtransform.py +++ b/src/ocrmypdf/hocrtransform.py @@ -31,7 +31,6 @@ import argparse import os import re -from itertools import chain from math import atan, cos, sin from pathlib import Path from typing import Any, NamedTuple, Optional, Tuple, Union @@ -297,13 +296,11 @@ class HocrTransform: ) found_lines = False - for line in sorted( - chain( - self.hocr.iterfind(self._child_xpath('span', 'ocr_header')), - self.hocr.iterfind(self._child_xpath('span', 'ocr_line')), - self.hocr.iterfind(self._child_xpath('span', 'ocr_textfloat')), - ), - key=self.topdown_position, + for line in ( + element + for element in self.hocr.iterfind(self._child_xpath('span')) + if 'class' in element.attrib + and element.attrib['class'] in {'ocr_header', 'ocr_line', 'ocr_textfloat'} ): found_lines = True self._do_line(