diff --git a/src/ocrmypdf/pdfinfo/__init__.py b/src/ocrmypdf/pdfinfo/__init__.py index a084aa66..74d2f3a1 100644 --- a/src/ocrmypdf/pdfinfo/__init__.py +++ b/src/ocrmypdf/pdfinfo/__init__.py @@ -588,12 +588,12 @@ def _pdf_get_pageinfo(pdf, pageno: int, infile, xmltext): return pageinfo -def _pdf_get_all_pageinfo(infile, detailed_page_analysis, log=None): +def _pdf_get_all_pageinfo(infile, detailed_analysis=False, log=None): if not log: log = Mock() pdf = pikepdf.open(infile) - if detailed_page_analysis: + if detailed_analysis: pages_xml = None else: pages_xml = ghosttext.extract_text_xml(infile, pdf, pageno=None, log=log) @@ -601,17 +601,18 @@ def _pdf_get_all_pageinfo(infile, detailed_page_analysis, log=None): pages = [] for n in range(len(pdf.pages)): page_xml = pages_xml[n] if pages_xml else None - page = PageInfo(pdf, n, infile, page_xml) + page = PageInfo(pdf, n, infile, page_xml, detailed_analysis) pages.append(page) return pages, pdf class PageInfo: - def __init__(self, pdf, pageno, infile, xmltext): + def __init__(self, pdf, pageno, infile, xmltext, detailed_analysis=False): self._pageno = pageno self._infile = infile self._pageinfo = _pdf_get_pageinfo(pdf, pageno, infile, xmltext) + self._detailed_analysis = detailed_analysis @property def pageno(self): @@ -623,6 +624,8 @@ class PageInfo: @property def has_corrupt_text(self): + if not self._detailed_analysis: + raise NotImplementedError('Did not do detailed analysis') return any(tbox.is_corrupt for tbox in self._pageinfo['textboxes']) @property diff --git a/tests/resources/README.rst b/tests/resources/README.rst index dc64622d..0f95e881 100644 --- a/tests/resources/README.rst +++ b/tests/resources/README.rst @@ -139,6 +139,11 @@ licensed under the specified license. - @jbarlow83 - @jbarlow83 - CC-BY-SA 4.0 + * - truetype_font_nomapping.pdf + - example of a PDF with an embedded subsetted TrueType font with no Unicode mapping + - @jbarlow83 + - @jbarlow83 + - CC-BY-SA 4.0 * - trivial.pdf - smallest possible valid PDF-1.3 with all required fields - @jbarlow83 diff --git a/tests/resources/truetype_font_nomapping.pdf b/tests/resources/truetype_font_nomapping.pdf new file mode 100644 index 00000000..506e653c Binary files /dev/null and b/tests/resources/truetype_font_nomapping.pdf differ diff --git a/tests/test_pdfinfo.py b/tests/test_pdfinfo.py index 85f51311..a41de7d5 100644 --- a/tests/test_pdfinfo.py +++ b/tests/test_pdfinfo.py @@ -183,3 +183,13 @@ def test_ocr_detection(resources): pdf = pdfinfo.PdfInfo(filename) assert not pdf[0].has_vector assert pdf[0].has_text + + +def test_corrupt_font_detection(resources): + filename = resources / 'truetype_font_nomapping.pdf' + with pytest.raises(NotImplementedError): + pdf = pdfinfo.PdfInfo(filename) + pdf[0].has_corrupt_text + + pdf = pdfinfo.PdfInfo(filename, detailed_page_analysis=True) + assert pdf[0].has_corrupt_text