Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12769b96e5 | ||
|
|
ee92ce8717 |
@@ -9,5 +9,6 @@
|
|||||||
*.png binary
|
*.png binary
|
||||||
*.jpg binary
|
*.jpg binary
|
||||||
*.bin binary
|
*.bin binary
|
||||||
|
*.afdesign binary
|
||||||
|
|
||||||
.git_archival.txt export-subst
|
.git_archival.txt export-subst
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ Note that it is licensed under GPLv3, so scripts that ``import ocrmypdf`` and ar
|
|||||||
find: [^`]\#([0-9]{1,3})[^0-9]
|
find: [^`]\#([0-9]{1,3})[^0-9]
|
||||||
replace: `#$1 <https://github.com/jbarlow83/OCRmyPDF/issues/$1>`_
|
replace: `#$1 <https://github.com/jbarlow83/OCRmyPDF/issues/$1>`_
|
||||||
|
|
||||||
|
v8.3.2
|
||||||
|
------
|
||||||
|
|
||||||
|
- Dropped workaround for macOS that allowed it work without pdfminer.six,
|
||||||
|
now a proper sdist release of pdfminer.six is available.
|
||||||
|
|
||||||
|
- pikepdf 1.5.0 is now required.
|
||||||
|
|
||||||
v8.3.1
|
v8.3.1
|
||||||
------
|
------
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ chardet == 3.0.4
|
|||||||
cffi == 1.12.2
|
cffi == 1.12.2
|
||||||
img2pdf == 0.3.3
|
img2pdf == 0.3.3
|
||||||
pdfminer.six == 20181108
|
pdfminer.six == 20181108
|
||||||
pikepdf == 1.3.0
|
pikepdf == 1.5.0.post0
|
||||||
Pillow >= 5.0.0, != 5.1.0 ; sys_platform == "darwin"
|
Pillow >= 5.0.0, != 5.1.0 ; sys_platform == "darwin"
|
||||||
pycparser == 2.19
|
pycparser == 2.19
|
||||||
python-xmp-toolkit == 2.0.1
|
python-xmp-toolkit == 2.0.1
|
||||||
|
|||||||
@@ -98,15 +98,14 @@ setup(
|
|||||||
'chardet >= 3.0.4, < 4', # unlisted requirement of pdfminer.six 20181108
|
'chardet >= 3.0.4, < 4', # unlisted requirement of pdfminer.six 20181108
|
||||||
'cffi >= 1.9.1', # must be a setup and install requirement
|
'cffi >= 1.9.1', # must be a setup and install requirement
|
||||||
'img2pdf >= 0.3.0, < 0.4', # pure Python, so track HEAD closely
|
'img2pdf >= 0.3.0, < 0.4', # pure Python, so track HEAD closely
|
||||||
'pdfminer.six == 20181108 ; sys_platform != "darwin"',
|
'pdfminer.six == 20181108',
|
||||||
'pikepdf >= 1.3.0, < 2',
|
'pikepdf >= 1.5.0, < 2',
|
||||||
'Pillow >= 4.0.0, != 5.1.0 ; sys_platform == "darwin"',
|
'Pillow >= 4.0.0, != 5.1.0 ; sys_platform == "darwin"',
|
||||||
# Pillow < 4 has BytesIO/TIFF bug w/img2pdf 0.2.3
|
# Pillow < 4 has BytesIO/TIFF bug w/img2pdf 0.2.3
|
||||||
# block 5.1.0, broken wheels
|
# block 5.1.0, broken wheels
|
||||||
'reportlab >= 3.3.0', # oldest released version with sane image handling
|
'reportlab >= 3.3.0', # oldest released version with sane image handling
|
||||||
'ruffus >= 2.7.0',
|
'ruffus >= 2.7.0',
|
||||||
],
|
],
|
||||||
extras_require={'pdfminer': ['pdfminer.six == 20181108']},
|
|
||||||
tests_require=tests_require,
|
tests_require=tests_require,
|
||||||
entry_points={'console_scripts': ['ocrmypdf = ocrmypdf.__main__:run_pipeline']},
|
entry_points={'console_scripts': ['ocrmypdf = ocrmypdf.__main__:run_pipeline']},
|
||||||
package_data={'ocrmypdf': ['data/sRGB.icc']},
|
package_data={'ocrmypdf': ['data/sRGB.icc']},
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ from pikepdf import PdfMatrix
|
|||||||
import pikepdf
|
import pikepdf
|
||||||
|
|
||||||
from . import ghosttext
|
from . import ghosttext
|
||||||
|
from .layout import get_page_analysis, get_text_boxes
|
||||||
|
|
||||||
from ..exceptions import EncryptedPdfError, MissingDependencyError
|
from ..exceptions import EncryptedPdfError, MissingDependencyError
|
||||||
|
|
||||||
@@ -564,14 +565,6 @@ def _pdf_get_pageinfo(pdf, pageno: int, infile, xmltext):
|
|||||||
)
|
)
|
||||||
pageinfo['bboxes'] = bboxes
|
pageinfo['bboxes'] = bboxes
|
||||||
else:
|
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')
|
pscript5_mode = str(pdf.docinfo.get('/Creator')).startswith('PScript5')
|
||||||
miner = get_page_analysis(infile, pageno, pscript5_mode)
|
miner = get_page_analysis(infile, pageno, pscript5_mode)
|
||||||
pageinfo['textboxes'] = list(simplify_textboxes(miner, get_text_boxes))
|
pageinfo['textboxes'] = list(simplify_textboxes(miner, get_text_boxes))
|
||||||
|
|||||||
@@ -62,16 +62,6 @@ def running_in_travis():
|
|||||||
return os.environ.get('TRAVIS') == 'true'
|
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
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.helpers.register
|
@pytest.helpers.register
|
||||||
def have_unpaper():
|
def have_unpaper():
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -219,7 +219,6 @@ def test_skip_ocr(spoof_tesseract_cache, resources, outpdf):
|
|||||||
assert pdfinfo[0].has_text
|
assert pdfinfo[0].has_text
|
||||||
|
|
||||||
|
|
||||||
@pytest.helpers.needs_pdfminer
|
|
||||||
def test_redo_ocr(spoof_tesseract_cache, resources, outpdf):
|
def test_redo_ocr(spoof_tesseract_cache, resources, outpdf):
|
||||||
in_ = resources / 'graph_ocred.pdf'
|
in_ = resources / 'graph_ocred.pdf'
|
||||||
before = PdfInfo(in_, detailed_page_analysis=True)
|
before = PdfInfo(in_, detailed_page_analysis=True)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import logging
|
|||||||
import mmap
|
import mmap
|
||||||
from os import fspath
|
from os import fspath
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import copyfile
|
from shutil import copyfile, move
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -308,10 +308,11 @@ def test_metadata_fixup_warning(resources, outdir, caplog):
|
|||||||
assert record.levelname != 'WARNING'
|
assert record.levelname != 'WARNING'
|
||||||
|
|
||||||
# Now add some metadata that will not be copyable
|
# Now add some metadata that will not be copyable
|
||||||
graph = pikepdf.open(outdir / 'graph.repaired.pdf')
|
with pikepdf.open(outdir / 'graph.repaired.pdf') as graph:
|
||||||
with graph.open_metadata() as meta:
|
with graph.open_metadata() as meta:
|
||||||
meta['prism2:publicationName'] = 'OCRmyPDF Test'
|
meta['prism2:publicationName'] = 'OCRmyPDF Test'
|
||||||
graph.save(outdir / 'graph.repaired.pdf')
|
graph.save(outdir / 'graph.repaired.modified.pdf')
|
||||||
|
move(outdir / 'graph.repaired.modified.pdf', outdir / 'graph.repaired.pdf')
|
||||||
|
|
||||||
log = logging.getLogger()
|
log = logging.getLogger()
|
||||||
context = MagicMock()
|
context = MagicMock()
|
||||||
|
|||||||
@@ -183,12 +183,7 @@ def test_ocr_detection(resources):
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'testfile', ('truetype_font_nomapping.pdf', 'type3_font_nomapping.pdf')
|
'testfile', ('truetype_font_nomapping.pdf', 'type3_font_nomapping.pdf')
|
||||||
)
|
)
|
||||||
@pytest.helpers.needs_pdfminer # pylint: disable=e1101
|
|
||||||
def test_corrupt_font_detection(resources, testfile):
|
def test_corrupt_font_detection(resources, testfile):
|
||||||
try:
|
|
||||||
import pdfminer
|
|
||||||
except ImportError:
|
|
||||||
pytest.skip("Needs pdfminer")
|
|
||||||
filename = resources / testfile
|
filename = resources / testfile
|
||||||
with pytest.raises(NotImplementedError):
|
with pytest.raises(NotImplementedError):
|
||||||
pdf = pdfinfo.PdfInfo(filename)
|
pdf = pdfinfo.PdfInfo(filename)
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ def test_no_glyphless_weave(resources, outdir):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.helpers.needs_pdfminer
|
|
||||||
def test_links(resources, outpdf):
|
def test_links(resources, outpdf):
|
||||||
check_ocrmypdf(
|
check_ocrmypdf(
|
||||||
resources / 'link.pdf',
|
resources / 'link.pdf',
|
||||||
|
|||||||
Reference in New Issue
Block a user