From 8c0009c5c89b7759147fd342cfeb5453bc5bc068 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Mon, 31 Dec 2018 01:08:43 -0800 Subject: [PATCH] Make pdfminer.six optional Mainly since the current release of pdfminer.six lacks a sdist, blocking homebrew packaging. Also in case other distros don't accept pdfminer.six. --- .travis.yml | 20 ++ setup.py | 4 +- src/ocrmypdf/lib/_leptonica.py | 330 +------------------------------ src/ocrmypdf/pdfinfo/__init__.py | 17 +- tests/conftest.py | 10 + tests/test_main.py | 1 + tests/test_pdfinfo.py | 6 + 7 files changed, 58 insertions(+), 330 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f8f67e4..d1ca5593 100644 --- a/.travis.yml +++ b/.travis.yml @@ -74,6 +74,25 @@ matrix: - qpdf - tesseract - unpaper + - os: osx + osx_image: xcode9.2 + language: generic + env: + - ADD_PDFMINER=1 + addons: + homebrew: + update: true + packages: + - exempi + - ghostscript + - jbig2enc + - leptonica + - openjpeg + - pngquant + - python + - qpdf + - tesseract + - unpaper before_cache: - rm -f $HOME/.cache/pip/log/debug.log @@ -98,6 +117,7 @@ install: - pip3 install pycparser # py3.7 workaround for https://github.com/eliben/pycparser/issues/251 - pip3 install -r requirements/main.txt - pip3 install --no-deps . +- '[[ "$ADD_PDFMINER" == "1" ]] && pip3 install .[pdfminer]' - pip3 install -r requirements/test.txt script: diff --git a/setup.py b/setup.py index d10bb9ba..2a7d72a0 100644 --- a/setup.py +++ b/setup.py @@ -250,7 +250,7 @@ setup( 'chardet >= 3.0.4, < 4', # unlisted requirement of pdfminer.six 20181108 'cffi >= 1.9.1', # must be a setup and install requirement 'img2pdf >= 0.3.0, < 0.4', # pure Python, so track HEAD closely - 'pdfminer.six == 20181108', + 'pdfminer.six == 20181108 ; sys_platform != "darwin"', 'pikepdf >= 0.10.0, < 0.11.0', 'Pillow >= 4.0.0, != 5.1.0 ; sys_platform == "darwin"', # Pillow < 4 has BytesIO/TIFF bug w/img2pdf 0.2.3 @@ -259,7 +259,7 @@ setup( 'ruffus >= 2.7.0', ], extras_require={ - 'fitz': [], # Backward compatibility + 'pdfminer': ['pdfminer.six == 20181108'], }, tests_require=tests_require, entry_points={ diff --git a/src/ocrmypdf/lib/_leptonica.py b/src/ocrmypdf/lib/_leptonica.py index d152a7d4..17a2f757 100644 --- a/src/ocrmypdf/lib/_leptonica.py +++ b/src/ocrmypdf/lib/_leptonica.py @@ -1,327 +1,11 @@ # auto-generated file import _cffi_backend -ffi = _cffi_backend.FFI( - 'ocrmypdf.lib._leptonica', - _version=0x2601, - _types=b'\x00\x00\x01\x0D\x00\x01\x33\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x34\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x37\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x3F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x38\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x09\x03\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x01\x11\x00\x00\x01\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x01\x3C\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x05\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x4E\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x50\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x13\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3A\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x3A\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3A\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9C\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x45\x0D\x00\x00\x10\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x45\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3E\x0D\x00\x00\x45\x11\x00\x00\x00\x0F\x00\x01\x3E\x0D\x00\x00\x00\x0F\x00\x00\x60\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x32\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x60\x11\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x35\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x1A\x11\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x01\x4F\x03\x00\x00\x8E\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\xEC\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x4D\x03\x00\x01\x04\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x23\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x04\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\xEC\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x13\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x9C\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x45\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x01\x53\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x01\x36\x03\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x05\x09\x00\x00\x04\x09\x00\x01\x3B\x03\x00\x00\x06\x09\x00\x00\x07\x09\x00\x01\x3E\x03\x00\x01\x3F\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x03\x0B\x00\x00\x04\x0B\x00\x00\x05\x0B\x00\x00\x06\x0B\x00\x00\x60\x03\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x01\x39\x03\x00\x01\x4E\x03\x00\x00\x04\x01\x00\x01\x50\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', - _globals=( - b'\xFF\xFF\xFF\x0BL_BF_ANY', - 1, - b'\xFF\xFF\xFF\x0BL_BF_CODABAR', - 9, - b'\xFF\xFF\xFF\x0BL_BF_CODE128', - 2, - b'\xFF\xFF\xFF\x0BL_BF_CODE2OF5', - 5, - b'\xFF\xFF\xFF\x0BL_BF_CODE39', - 7, - b'\xFF\xFF\xFF\x0BL_BF_CODE93', - 8, - b'\xFF\xFF\xFF\x0BL_BF_CODEI2OF5', - 6, - b'\xFF\xFF\xFF\x0BL_BF_EAN13', - 4, - b'\xFF\xFF\xFF\x0BL_BF_EAN8', - 3, - b'\xFF\xFF\xFF\x0BL_BF_UNKNOWN', - 0, - b'\xFF\xFF\xFF\x0BL_BF_UPCA', - 10, - b'\xFF\xFF\xFF\x0BL_CLONE', - 2, - b'\xFF\xFF\xFF\x0BL_COPY', - 1, - b'\xFF\xFF\xFF\x0BL_COPY_CLONE', - 3, - b'\xFF\xFF\xFF\x0BL_DEFAULT_ENCODE', - 0, - b'\xFF\xFF\xFF\x0BL_FLATE_ENCODE', - 3, - b'\xFF\xFF\xFF\x0BL_G4_ENCODE', - 2, - b'\xFF\xFF\xFF\x0BL_INSERT', - 0, - b'\xFF\xFF\xFF\x0BL_JP2K_ENCODE', - 4, - b'\xFF\xFF\xFF\x0BL_JPEG_ENCODE', - 1, - b'\xFF\xFF\xFF\x0BL_NOCOPY', - 0, - b'\xFF\xFF\xFF\x0BL_SEVERITY_ALL', - 1, - b'\xFF\xFF\xFF\x0BL_SEVERITY_DEBUG', - 2, - b'\xFF\xFF\xFF\x0BL_SEVERITY_ERROR', - 5, - b'\xFF\xFF\xFF\x0BL_SEVERITY_EXTERNAL', - 0, - b'\xFF\xFF\xFF\x0BL_SEVERITY_INFO', - 3, - b'\xFF\xFF\xFF\x0BL_SEVERITY_NONE', - 6, - b'\xFF\xFF\xFF\x0BL_SEVERITY_WARNING', - 4, - b'\xFF\xFF\xFF\x0BL_USE_WIDTHS', - 1, - b'\xFF\xFF\xFF\x0BL_USE_WINDOWS', - 2, - b'\xFF\xFF\xFF\x0BREMOVE_CMAP_BASED_ON_SRC', - 4, - b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_BINARY', - 0, - b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_FULL_COLOR', - 2, - b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_GRAYSCALE', - 1, - b'\xFF\xFF\xFF\x0BREMOVE_CMAP_WITH_ALPHA', - 3, - b'\xFF\xFF\xFF\x0BSEL_DONT_CARE', - 0, - b'\xFF\xFF\xFF\x0BSEL_HIT', - 1, - b'\xFF\xFF\xFF\x0BSEL_MISS', - 2, - b'\x00\x00\x00\x23boxClone', - 0, - b'\x00\x01\x1B\x23boxDestroy', - 0, - b'\x00\x01\x1E\x23boxaDestroy', - 0, - b'\x00\x00\x03\x23boxaGetBox', - 0, - b'\x00\x00\xB6\x23getLeptonicaVersion', - 0, - b'\x00\x01\x21\x23l_CIDataDestroy', - 0, - b'\x00\x01\x06\x23l_generateCIDataForPdf', - 0, - b'\x00\x01\x30\x23lept_free', - 0, - b'\x00\x00\xB8\x23makePixelSumTab8', - 0, - b'\x00\x00\x29\x23pixAnd', - 0, - b'\x00\x00\x36\x23pixBackgroundNorm', - 0, - b'\x00\x00\x2E\x23pixCleanBackgroundToWhite', - 0, - b'\x00\x00\x20\x23pixClipRectangle', - 0, - b'\x00\x00\xEE\x23pixColorFraction', - 0, - b'\x00\x00\x7D\x23pixColorMagnitude', - 0, - b'\x00\x00\x1D\x23pixConvertRGBToLuminance', - 0, - b'\x00\x00\x74\x23pixConvertTo8', - 0, - b'\x00\x00\xC0\x23pixCorrelationBinary', - 0, - b'\x00\x00\xDA\x23pixCountPixels', - 0, - b'\x00\x00\x90\x23pixDeserializeFromMemory', - 0, - b'\x00\x00\x74\x23pixDeskew', - 0, - b'\x00\x01\x24\x23pixDestroy', - 0, - b'\x00\x00\x42\x23pixDilate', - 0, - b'\x00\x00\x1D\x23pixEndianByteSwapNew', - 0, - b'\x00\x00\xC5\x23pixEqual', - 0, - b'\x00\x00\x42\x23pixErode', - 0, - b'\x00\x00\x94\x23pixExtractBarcodes', - 0, - b'\x00\x00\x08\x23pixFindPageForeground', - 0, - b'\x00\x00\xD5\x23pixFindSkew', - 0, - b'\x00\x00\x47\x23pixGammaTRC', - 0, - b'\x00\x00\xE7\x23pixGenerateCIData', - 0, - b'\x00\x00\xCA\x23pixGetAverageMaskedRGB', - 0, - b'\x00\x00\x4E\x23pixGlobalNormRGB', - 0, - b'\x00\x00\x42\x23pixHMT', - 0, - b'\x00\x00\x25\x23pixInvert', - 0, - b'\x00\x00\x17\x23pixLocateBarcodes', - 0, - b'\x00\x00\x78\x23pixMaskOverColorPixels', - 0, - b'\x00\x00\x56\x23pixMaskedThreshOnBackgroundNorm', - 0, - b'\x00\x00\xDF\x23pixNumSignificantGrayColors', - 0, - b'\x00\x00\xF7\x23pixOtsuAdaptiveThreshold', - 0, - b'\x00\x00\x62\x23pixOtsuThreshOnBackgroundNorm', - 0, - b'\x00\x00\x98\x23pixProcessBarcodes', - 0, - b'\x00\x00\x89\x23pixRead', - 0, - b'\x00\x00\x9F\x23pixReadBarcodes', - 0, - b'\x00\x00\x8C\x23pixReadMem', - 0, - b'\x00\x00\x74\x23pixRemoveColormap', - 0, - b'\x00\x00\x78\x23pixRemoveColormapGeneral', - 0, - b'\x00\x00\xBA\x23pixRenderBoxa', - 0, - b'\x00\x00\x25\x23pixRotate180', - 0, - b'\x00\x00\x74\x23pixRotateOrth', - 0, - b'\x00\x00\x6F\x23pixScale', - 0, - b'\x00\x01\x01\x23pixSerializeToMemory', - 0, - b'\x00\x00\x29\x23pixSubtract', - 0, - b'\x00\x01\x0C\x23pixWriteImpliedFormat', - 0, - b'\x00\x01\x15\x23pixWriteMemPng', - 0, - b'\x00\x01\x27\x23pixaDestroy', - 0, - b'\x00\x00\x12\x23pixaGetBox', - 0, - b'\x00\x00\x84\x23pixaGetPix', - 0, - b'\x00\x01\x2A\x23sarrayDestroy', - 0, - b'\x00\x00\xAC\x23selCreateBrick', - 0, - b'\x00\x00\xA6\x23selCreateFromString', - 0, - b'\x00\x01\x2D\x23selDestroy', - 0, - b'\x00\x00\xB3\x23selPrintToString', - 0, - b'\x00\x01\x12\x23setMsgSeverity', - 0, - ), - _struct_unions=( - ( - b'\x00\x00\x01\x33\x00\x00\x00\x02Box', - b'\x00\x00\x05\x11x', - b'\x00\x00\x05\x11y', - b'\x00\x00\x05\x11w', - b'\x00\x00\x05\x11h', - b'\x00\x01\x50\x11refcount', - ), - ( - b'\x00\x00\x01\x34\x00\x00\x00\x02Boxa', - b'\x00\x00\x05\x11n', - b'\x00\x00\x05\x11nalloc', - b'\x00\x01\x50\x11refcount', - b'\x00\x00\x23\x11box', - ), - ( - b'\x00\x00\x01\x36\x00\x00\x00\x02L_Compressed_Data', - b'\x00\x00\x05\x11type', - b'\x00\x01\x4D\x11datacomp', - b'\x00\x00\x8E\x11nbytescomp', - b'\x00\x01\x3E\x11data85', - b'\x00\x00\x8E\x11nbytes85', - b'\x00\x01\x3E\x11cmapdata85', - b'\x00\x01\x3E\x11cmapdatahex', - b'\x00\x00\x05\x11ncolors', - b'\x00\x00\x05\x11w', - b'\x00\x00\x05\x11h', - b'\x00\x00\x05\x11bps', - b'\x00\x00\x05\x11spp', - b'\x00\x00\x05\x11minisblack', - b'\x00\x00\x05\x11predictor', - b'\x00\x00\x8E\x11nbytes', - b'\x00\x00\x05\x11res', - ), - ( - b'\x00\x00\x01\x37\x00\x00\x00\x02Pix', - b'\x00\x01\x50\x11w', - b'\x00\x01\x50\x11h', - b'\x00\x01\x50\x11d', - b'\x00\x01\x50\x11spp', - b'\x00\x01\x50\x11wpl', - b'\x00\x01\x50\x11refcount', - b'\x00\x00\x05\x11xres', - b'\x00\x00\x05\x11yres', - b'\x00\x00\x05\x11informat', - b'\x00\x00\x05\x11special', - b'\x00\x01\x3E\x11text', - b'\x00\x01\x4C\x11colormap', - b'\x00\x01\x4F\x11data', - ), - ( - b'\x00\x00\x01\x39\x00\x00\x00\x02PixColormap', - b'\x00\x01\x31\x11array', - b'\x00\x00\x05\x11depth', - b'\x00\x00\x05\x11nalloc', - b'\x00\x00\x05\x11n', - ), - ( - b'\x00\x00\x01\x38\x00\x00\x00\x02Pixa', - b'\x00\x00\x05\x11n', - b'\x00\x00\x05\x11nalloc', - b'\x00\x01\x50\x11refcount', - b'\x00\x00\x1A\x11pix', - b'\x00\x00\x04\x11boxa', - ), - ( - b'\x00\x00\x01\x3B\x00\x00\x00\x02Sarray', - b'\x00\x00\x05\x11nalloc', - b'\x00\x00\x05\x11n', - b'\x00\x00\x05\x11refcount', - b'\x00\x01\x3D\x11array', - ), - ( - b'\x00\x00\x01\x3C\x00\x00\x00\x02Sel', - b'\x00\x00\x05\x11sy', - b'\x00\x00\x05\x11sx', - b'\x00\x00\x05\x11cy', - b'\x00\x00\x05\x11cx', - b'\x00\x01\x48\x11data', - b'\x00\x01\x3E\x11name', - ), - ), - _enums=( - b'\x00\x00\x01\x41\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE', - b'\x00\x00\x01\x42\x00\x00\x00\x16$2\x00REMOVE_CMAP_TO_BINARY,REMOVE_CMAP_TO_GRAYSCALE,REMOVE_CMAP_TO_FULL_COLOR,REMOVE_CMAP_WITH_ALPHA,REMOVE_CMAP_BASED_ON_SRC', - b'\x00\x00\x01\x43\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE', - b'\x00\x00\x01\x44\x00\x00\x00\x16$4\x00L_USE_WIDTHS,L_USE_WINDOWS', - b'\x00\x00\x01\x45\x00\x00\x00\x16$5\x00L_BF_UNKNOWN,L_BF_ANY,L_BF_CODE128,L_BF_EAN8,L_BF_EAN13,L_BF_CODE2OF5,L_BF_CODEI2OF5,L_BF_CODE39,L_BF_CODE93,L_BF_CODABAR,L_BF_UPCA', - b'\x00\x00\x01\x46\x00\x00\x00\x16$6\x00L_SEVERITY_EXTERNAL,L_SEVERITY_ALL,L_SEVERITY_DEBUG,L_SEVERITY_INFO,L_SEVERITY_WARNING,L_SEVERITY_ERROR,L_SEVERITY_NONE', - b'\x00\x00\x01\x47\x00\x00\x00\x16$7\x00SEL_DONT_CARE,SEL_HIT,SEL_MISS', - ), - _typenames=( - b'\x00\x00\x01\x33BOX', - b'\x00\x00\x01\x34BOXA', - b'\x00\x00\x01\x36L_COMP_DATA', - b'\x00\x00\x01\x37PIX', - b'\x00\x00\x01\x38PIXA', - b'\x00\x00\x01\x39PIXCMAP', - b'\x00\x00\x01\x3BSARRAY', - b'\x00\x00\x01\x3CSEL', - b'\x00\x00\x00\x32l_float32', - b'\x00\x00\x01\x40l_float64', - b'\x00\x00\x01\x4Al_int16', - b'\x00\x00\x00\x05l_int32', - b'\x00\x00\x01\x49l_int64', - b'\x00\x00\x01\x4Bl_int8', - b'\x00\x00\x00\x05l_ok', - b'\x00\x00\x01\x52l_uint16', - b'\x00\x00\x01\x50l_uint32', - b'\x00\x00\x01\x51l_uint64', - b'\x00\x00\x01\x4El_uint8', - ), +ffi = _cffi_backend.FFI('ocrmypdf.lib._leptonica', + _version = 0x2601, + _types = b'\x00\x00\x01\x0D\x00\x01\x33\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x34\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x37\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x3F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x38\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x09\x03\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x01\x11\x00\x00\x01\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x01\x3C\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x05\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x4E\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x50\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x13\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3A\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x3A\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3A\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9C\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x45\x0D\x00\x00\x10\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x45\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x3E\x0D\x00\x00\x45\x11\x00\x00\x00\x0F\x00\x01\x3E\x0D\x00\x00\x00\x0F\x00\x00\x60\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x32\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x60\x11\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x60\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x35\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xC3\x11\x00\x00\xC3\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x1A\x11\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x01\x4F\x03\x00\x00\x8E\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\xEC\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x4D\x03\x00\x01\x04\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x23\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x04\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\xEC\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x13\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x9C\x11\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x00\x45\x03\x00\x00\x00\x0F\x00\x01\x53\x0D\x00\x01\x53\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x01\x36\x03\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x05\x09\x00\x00\x04\x09\x00\x01\x3B\x03\x00\x00\x06\x09\x00\x00\x07\x09\x00\x01\x3E\x03\x00\x01\x3F\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x03\x0B\x00\x00\x04\x0B\x00\x00\x05\x0B\x00\x00\x06\x0B\x00\x00\x60\x03\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x01\x39\x03\x00\x01\x4E\x03\x00\x00\x04\x01\x00\x01\x50\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', + _globals = (b'\xFF\xFF\xFF\x0BL_BF_ANY',1,b'\xFF\xFF\xFF\x0BL_BF_CODABAR',9,b'\xFF\xFF\xFF\x0BL_BF_CODE128',2,b'\xFF\xFF\xFF\x0BL_BF_CODE2OF5',5,b'\xFF\xFF\xFF\x0BL_BF_CODE39',7,b'\xFF\xFF\xFF\x0BL_BF_CODE93',8,b'\xFF\xFF\xFF\x0BL_BF_CODEI2OF5',6,b'\xFF\xFF\xFF\x0BL_BF_EAN13',4,b'\xFF\xFF\xFF\x0BL_BF_EAN8',3,b'\xFF\xFF\xFF\x0BL_BF_UNKNOWN',0,b'\xFF\xFF\xFF\x0BL_BF_UPCA',10,b'\xFF\xFF\xFF\x0BL_CLONE',2,b'\xFF\xFF\xFF\x0BL_COPY',1,b'\xFF\xFF\xFF\x0BL_COPY_CLONE',3,b'\xFF\xFF\xFF\x0BL_DEFAULT_ENCODE',0,b'\xFF\xFF\xFF\x0BL_FLATE_ENCODE',3,b'\xFF\xFF\xFF\x0BL_G4_ENCODE',2,b'\xFF\xFF\xFF\x0BL_INSERT',0,b'\xFF\xFF\xFF\x0BL_JP2K_ENCODE',4,b'\xFF\xFF\xFF\x0BL_JPEG_ENCODE',1,b'\xFF\xFF\xFF\x0BL_NOCOPY',0,b'\xFF\xFF\xFF\x0BL_SEVERITY_ALL',1,b'\xFF\xFF\xFF\x0BL_SEVERITY_DEBUG',2,b'\xFF\xFF\xFF\x0BL_SEVERITY_ERROR',5,b'\xFF\xFF\xFF\x0BL_SEVERITY_EXTERNAL',0,b'\xFF\xFF\xFF\x0BL_SEVERITY_INFO',3,b'\xFF\xFF\xFF\x0BL_SEVERITY_NONE',6,b'\xFF\xFF\xFF\x0BL_SEVERITY_WARNING',4,b'\xFF\xFF\xFF\x0BL_USE_WIDTHS',1,b'\xFF\xFF\xFF\x0BL_USE_WINDOWS',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_BASED_ON_SRC',4,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_BINARY',0,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_FULL_COLOR',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_GRAYSCALE',1,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_WITH_ALPHA',3,b'\xFF\xFF\xFF\x0BSEL_DONT_CARE',0,b'\xFF\xFF\xFF\x0BSEL_HIT',1,b'\xFF\xFF\xFF\x0BSEL_MISS',2,b'\x00\x00\x00\x23boxClone',0,b'\x00\x01\x1B\x23boxDestroy',0,b'\x00\x01\x1E\x23boxaDestroy',0,b'\x00\x00\x03\x23boxaGetBox',0,b'\x00\x00\xB6\x23getLeptonicaVersion',0,b'\x00\x01\x21\x23l_CIDataDestroy',0,b'\x00\x01\x06\x23l_generateCIDataForPdf',0,b'\x00\x01\x30\x23lept_free',0,b'\x00\x00\xB8\x23makePixelSumTab8',0,b'\x00\x00\x29\x23pixAnd',0,b'\x00\x00\x36\x23pixBackgroundNorm',0,b'\x00\x00\x2E\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x20\x23pixClipRectangle',0,b'\x00\x00\xEE\x23pixColorFraction',0,b'\x00\x00\x7D\x23pixColorMagnitude',0,b'\x00\x00\x1D\x23pixConvertRGBToLuminance',0,b'\x00\x00\x74\x23pixConvertTo8',0,b'\x00\x00\xC0\x23pixCorrelationBinary',0,b'\x00\x00\xDA\x23pixCountPixels',0,b'\x00\x00\x90\x23pixDeserializeFromMemory',0,b'\x00\x00\x74\x23pixDeskew',0,b'\x00\x01\x24\x23pixDestroy',0,b'\x00\x00\x42\x23pixDilate',0,b'\x00\x00\x1D\x23pixEndianByteSwapNew',0,b'\x00\x00\xC5\x23pixEqual',0,b'\x00\x00\x42\x23pixErode',0,b'\x00\x00\x94\x23pixExtractBarcodes',0,b'\x00\x00\x08\x23pixFindPageForeground',0,b'\x00\x00\xD5\x23pixFindSkew',0,b'\x00\x00\x47\x23pixGammaTRC',0,b'\x00\x00\xE7\x23pixGenerateCIData',0,b'\x00\x00\xCA\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x4E\x23pixGlobalNormRGB',0,b'\x00\x00\x42\x23pixHMT',0,b'\x00\x00\x25\x23pixInvert',0,b'\x00\x00\x17\x23pixLocateBarcodes',0,b'\x00\x00\x78\x23pixMaskOverColorPixels',0,b'\x00\x00\x56\x23pixMaskedThreshOnBackgroundNorm',0,b'\x00\x00\xDF\x23pixNumSignificantGrayColors',0,b'\x00\x00\xF7\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x62\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x98\x23pixProcessBarcodes',0,b'\x00\x00\x89\x23pixRead',0,b'\x00\x00\x9F\x23pixReadBarcodes',0,b'\x00\x00\x8C\x23pixReadMem',0,b'\x00\x00\x74\x23pixRemoveColormap',0,b'\x00\x00\x78\x23pixRemoveColormapGeneral',0,b'\x00\x00\xBA\x23pixRenderBoxa',0,b'\x00\x00\x25\x23pixRotate180',0,b'\x00\x00\x74\x23pixRotateOrth',0,b'\x00\x00\x6F\x23pixScale',0,b'\x00\x01\x01\x23pixSerializeToMemory',0,b'\x00\x00\x29\x23pixSubtract',0,b'\x00\x01\x0C\x23pixWriteImpliedFormat',0,b'\x00\x01\x15\x23pixWriteMemPng',0,b'\x00\x01\x27\x23pixaDestroy',0,b'\x00\x00\x12\x23pixaGetBox',0,b'\x00\x00\x84\x23pixaGetPix',0,b'\x00\x01\x2A\x23sarrayDestroy',0,b'\x00\x00\xAC\x23selCreateBrick',0,b'\x00\x00\xA6\x23selCreateFromString',0,b'\x00\x01\x2D\x23selDestroy',0,b'\x00\x00\xB3\x23selPrintToString',0,b'\x00\x01\x12\x23setMsgSeverity',0), + _struct_unions = ((b'\x00\x00\x01\x33\x00\x00\x00\x02Box',b'\x00\x00\x05\x11x',b'\x00\x00\x05\x11y',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x01\x50\x11refcount'),(b'\x00\x00\x01\x34\x00\x00\x00\x02Boxa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x50\x11refcount',b'\x00\x00\x23\x11box'),(b'\x00\x00\x01\x36\x00\x00\x00\x02L_Compressed_Data',b'\x00\x00\x05\x11type',b'\x00\x01\x4D\x11datacomp',b'\x00\x00\x8E\x11nbytescomp',b'\x00\x01\x3E\x11data85',b'\x00\x00\x8E\x11nbytes85',b'\x00\x01\x3E\x11cmapdata85',b'\x00\x01\x3E\x11cmapdatahex',b'\x00\x00\x05\x11ncolors',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x00\x05\x11bps',b'\x00\x00\x05\x11spp',b'\x00\x00\x05\x11minisblack',b'\x00\x00\x05\x11predictor',b'\x00\x00\x8E\x11nbytes',b'\x00\x00\x05\x11res'),(b'\x00\x00\x01\x37\x00\x00\x00\x02Pix',b'\x00\x01\x50\x11w',b'\x00\x01\x50\x11h',b'\x00\x01\x50\x11d',b'\x00\x01\x50\x11spp',b'\x00\x01\x50\x11wpl',b'\x00\x01\x50\x11refcount',b'\x00\x00\x05\x11xres',b'\x00\x00\x05\x11yres',b'\x00\x00\x05\x11informat',b'\x00\x00\x05\x11special',b'\x00\x01\x3E\x11text',b'\x00\x01\x4C\x11colormap',b'\x00\x01\x4F\x11data'),(b'\x00\x00\x01\x39\x00\x00\x00\x02PixColormap',b'\x00\x01\x31\x11array',b'\x00\x00\x05\x11depth',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n'),(b'\x00\x00\x01\x38\x00\x00\x00\x02Pixa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x50\x11refcount',b'\x00\x00\x1A\x11pix',b'\x00\x00\x04\x11boxa'),(b'\x00\x00\x01\x3B\x00\x00\x00\x02Sarray',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11refcount',b'\x00\x01\x3D\x11array'),(b'\x00\x00\x01\x3C\x00\x00\x00\x02Sel',b'\x00\x00\x05\x11sy',b'\x00\x00\x05\x11sx',b'\x00\x00\x05\x11cy',b'\x00\x00\x05\x11cx',b'\x00\x01\x48\x11data',b'\x00\x01\x3E\x11name')), + _enums = (b'\x00\x00\x01\x41\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE',b'\x00\x00\x01\x42\x00\x00\x00\x16$2\x00REMOVE_CMAP_TO_BINARY,REMOVE_CMAP_TO_GRAYSCALE,REMOVE_CMAP_TO_FULL_COLOR,REMOVE_CMAP_WITH_ALPHA,REMOVE_CMAP_BASED_ON_SRC',b'\x00\x00\x01\x43\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE',b'\x00\x00\x01\x44\x00\x00\x00\x16$4\x00L_USE_WIDTHS,L_USE_WINDOWS',b'\x00\x00\x01\x45\x00\x00\x00\x16$5\x00L_BF_UNKNOWN,L_BF_ANY,L_BF_CODE128,L_BF_EAN8,L_BF_EAN13,L_BF_CODE2OF5,L_BF_CODEI2OF5,L_BF_CODE39,L_BF_CODE93,L_BF_CODABAR,L_BF_UPCA',b'\x00\x00\x01\x46\x00\x00\x00\x16$6\x00L_SEVERITY_EXTERNAL,L_SEVERITY_ALL,L_SEVERITY_DEBUG,L_SEVERITY_INFO,L_SEVERITY_WARNING,L_SEVERITY_ERROR,L_SEVERITY_NONE',b'\x00\x00\x01\x47\x00\x00\x00\x16$7\x00SEL_DONT_CARE,SEL_HIT,SEL_MISS'), + _typenames = (b'\x00\x00\x01\x33BOX',b'\x00\x00\x01\x34BOXA',b'\x00\x00\x01\x36L_COMP_DATA',b'\x00\x00\x01\x37PIX',b'\x00\x00\x01\x38PIXA',b'\x00\x00\x01\x39PIXCMAP',b'\x00\x00\x01\x3BSARRAY',b'\x00\x00\x01\x3CSEL',b'\x00\x00\x00\x32l_float32',b'\x00\x00\x01\x40l_float64',b'\x00\x00\x01\x4Al_int16',b'\x00\x00\x00\x05l_int32',b'\x00\x00\x01\x49l_int64',b'\x00\x00\x01\x4Bl_int8',b'\x00\x00\x00\x05l_ok',b'\x00\x00\x01\x52l_uint16',b'\x00\x00\x01\x50l_uint32',b'\x00\x00\x01\x51l_uint64',b'\x00\x00\x01\x4El_uint8'), ) diff --git a/src/ocrmypdf/pdfinfo/__init__.py b/src/ocrmypdf/pdfinfo/__init__.py index 377e93c9..b0ebe512 100644 --- a/src/ocrmypdf/pdfinfo/__init__.py +++ b/src/ocrmypdf/pdfinfo/__init__.py @@ -30,9 +30,8 @@ from pikepdf import PdfMatrix import pikepdf from . import ghosttext -from .layout import get_page_analysis, get_text_boxes -from ..exceptions import EncryptedPdfError +from ..exceptions import EncryptedPdfError, MissingDependencyError Colorspace = Enum('Colorspace', 'gray rgb cmyk lab icc index sep devn pattern jpeg2000') @@ -533,12 +532,12 @@ def _page_has_text(text_blocks, page_width, page_height): return has_text -def simplify_textboxes(miner): +def simplify_textboxes(miner, textbox_getter): """Extract only limited content from text boxes We do this to save memory and ensure that our objects are pickleable. """ - for box in get_text_boxes(miner): + for box in textbox_getter(miner): first_line = box._objs[0] first_char = first_line._objs[0] @@ -563,9 +562,17 @@ def _pdf_get_pageinfo(pdf, pageno: int, infile, xmltext): ) pageinfo['bboxes'] = bboxes else: + # pdfminer required for this section + try: + from .layout import get_page_analysis, get_text_boxes + except ImportError: + raise MissingDependencyError( + "pdfminer is required for this feature. Your distribution " + "may not have installed it." + ) pscript5_mode = str(pdf.docinfo.get('/Creator')).startswith('PScript5') miner = get_page_analysis(infile, pageno, pscript5_mode) - pageinfo['textboxes'] = list(simplify_textboxes(miner)) + pageinfo['textboxes'] = list(simplify_textboxes(miner, get_text_boxes)) bboxes = (box.bbox for box in pageinfo['textboxes']) pageinfo['has_text'] = _page_has_text(bboxes, width_pt, height_pt) diff --git a/tests/conftest.py b/tests/conftest.py index b9976f50..61a0f922 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -62,6 +62,16 @@ def running_in_travis(): return os.environ.get('TRAVIS') == 'true' +@pytest.helpers.register +def needs_pdfminer(fn): + try: + import pdfminer + except ImportError: + skip = pytest.mark.skipif(True, reason="pdfminer not available") + return skip(fn) + return fn + + TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) SPOOF_PATH = os.path.join(TESTS_ROOT, 'spoof') PROJECT_ROOT = os.path.dirname(TESTS_ROOT) diff --git a/tests/test_main.py b/tests/test_main.py index 59249367..3280c3f8 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -219,6 +219,7 @@ def test_skip_ocr(spoof_tesseract_cache, resources, outpdf): assert pdfinfo[0].has_text +@pytest.helpers.needs_pdfminer def test_redo_ocr(spoof_tesseract_cache, resources, outpdf): in_ = resources / 'graph_ocred.pdf' before = PdfInfo(in_, detailed_page_analysis=True) diff --git a/tests/test_pdfinfo.py b/tests/test_pdfinfo.py index 1e931904..7955341a 100644 --- a/tests/test_pdfinfo.py +++ b/tests/test_pdfinfo.py @@ -182,10 +182,16 @@ def test_ocr_detection(resources): assert pdf[0].has_text + @pytest.mark.parametrize( 'testfile', ('truetype_font_nomapping.pdf', 'type3_font_nomapping.pdf') ) +@pytest.helpers.needs_pdfminer def test_corrupt_font_detection(resources, testfile): + try: + import pdfminer + except ImportError: + pytest.skip("Needs pdfminer") filename = resources / testfile with pytest.raises(NotImplementedError): pdf = pdfinfo.PdfInfo(filename)