From 68bb38d0addb26e18986407a5ec0a6ecf6274682 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Thu, 12 Oct 2023 16:30:16 -0700 Subject: [PATCH] pdf_to_hocr: improve plugin handling --- src/ocrmypdf/api.py | 8 +++-- .../hocr.bin | 30 +++++++++++++++++++ .../stderr.bin | 0 .../stdout.bin | 0 .../txt.bin | 2 ++ tests/test_api.py | 8 +++-- 6 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/hocr.bin create mode 100644 tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stderr.bin create mode 100644 tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stdout.bin create mode 100644 tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/txt.bin diff --git a/src/ocrmypdf/api.py b/src/ocrmypdf/api.py index f96cf35a..d2a71b08 100644 --- a/src/ocrmypdf/api.py +++ b/src/ocrmypdf/api.py @@ -414,6 +414,7 @@ def pdf_to_hocr( continue_on_soft_render_error: bool | None = None, invalidate_digital_signatures: bool | None = None, plugin_manager=None, + plugins: Iterable[StrPath] | None = None, keep_temporary_files: bool | None = None, **kwargs, ): @@ -434,17 +435,18 @@ def pdf_to_hocr( # of code that use global state. if not plugin_manager: - plugin_manager = get_plugin_manager() + plugin_manager = get_plugin_manager(plugins) plugin_manager.hook.add_options(parser=parser) # pylint: disable=no-member cmdline, deferred = _kwargs_to_cmdline( - defer_kwargs={'input_pdf', 'output_folder'}, **create_options_kwargs + defer_kwargs={'input_pdf', 'output_folder', 'plugins'}, + **create_options_kwargs, ) cmdline.append(str(input_pdf)) cmdline.append(str(output_folder)) parser.enable_api_mode() options = parser.parse_args(cmdline) - for keyword, val in deferred: + for keyword, val in deferred.items(): setattr(options, keyword, val) delattr(options, 'output_file') setattr(options, 'output_folder', output_folder) diff --git a/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/hocr.bin b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/hocr.bin new file mode 100644 index 00000000..0e8a52c5 --- /dev/null +++ b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/hocr.bin @@ -0,0 +1,30 @@ + + + + + + + + + + +
+
+

+ + 9OO0Ox9000 + pixels + at + GOO + DPI + + + S|] + megapixels + +

+
+
+ + diff --git a/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stderr.bin b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stderr.bin new file mode 100644 index 00000000..e69de29b diff --git a/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stdout.bin b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/stdout.bin new file mode 100644 index 00000000..e69de29b diff --git a/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/txt.bin b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/txt.bin new file mode 100644 index 00000000..4b9f106b --- /dev/null +++ b/tests/cache/multipage/__-l__eng__000002_ocr.png__000002_ocr_hocr__hocr__txt/txt.bin @@ -0,0 +1,2 @@ +9OO0Ox9000 pixels at GOO DPI +S|] megapixels diff --git a/tests/test_api.py b/tests/test_api.py index a51729b6..613c49f5 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -27,9 +27,13 @@ def test_stream_api(resources: Path): assert b'%PDF' in out.read(1024) -def test_hocr_api(outdir): +def test_hocr_api(resources: Path, outdir: Path): ocrmypdf.pdf_to_hocr( - 'tests/resources/multipage.pdf', outdir, language='eng', skip_text=True + resources / 'multipage.pdf', + outdir, + language='eng', + skip_text=True, + plugins=['tests/plugins/tesseract_cache.py'], ) assert (outdir / '000001_ocr_hocr.hocr').exists() assert (outdir / '000006_ocr_hocr.hocr').exists()