Add test to sanity check our pdf renderers

This commit is contained in:
James R. Barlow
2020-06-22 16:18:38 -07:00
parent 1ce8edbdfe
commit 30404f53f0
2 changed files with 58 additions and 1 deletions
+1
View File
@@ -219,6 +219,7 @@ class HocrTransform:
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,
):
+57 -1
View File
@@ -15,20 +15,46 @@
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
import re
from io import StringIO
from pathlib import Path
import pytest
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from PIL import Image
from ocrmypdf import hocrtransform
from ocrmypdf._exec.tesseract import HOCR_TEMPLATE
from ocrmypdf.helpers import check_pdf
def text_from_pdf(filename):
output_string = StringIO()
with open(filename, 'rb') as in_file:
parser = PDFParser(in_file)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
return output_string.getvalue()
# pylint: disable=redefined-outer-name
check_ocrmypdf = pytest.helpers.check_ocrmypdf # pylint: disable=no-member
@pytest.fixture
def blank_hocr(tmp_path):
filename = tmp_path / "blank.hocr"
filename.write_text(HOCR_TEMPLATE) # pylint: disable=E1101
filename.write_text(HOCR_TEMPLATE)
return filename
@@ -42,3 +68,33 @@ def test_mono_image(blank_hocr, outdir):
hocr.to_pdf(str(outdir / 'mono.pdf'), image_filename=str(outdir / 'mono.tif'))
check_pdf(str(outdir / 'mono.pdf'))
def test_hocrtransform_matches_sandwich(resources, outdir):
check_ocrmypdf(
resources / 'ccitt.pdf',
outdir / 'hocr.pdf',
'--pdf-renderer=hocr',
# '--plugin',
# 'tests/plugins/tesseract_cache.py',
)
check_ocrmypdf(
resources / 'ccitt.pdf',
outdir / 'tess.pdf',
'--pdf-renderer=sandwich',
# '--plugin',
# 'tests/plugins/tesseract_cache.py',
)
def clean(s):
s = re.sub(r'[ ]+', ' ', s)
s = re.sub(r'[ ]?[\n]+', r'\n', s)
return s
hocr_txt = clean(text_from_pdf(outdir / 'hocr.pdf'))
tess_txt = clean(text_from_pdf(outdir / 'tess.pdf'))
# Path('hocr.txt').write_text(hocr_txt)
# Path('tess.txt').write_text(tess_txt)
assert hocr_txt == tess_txt