Compare commits

...
6 Commits
Author SHA1 Message Date
James R. Barlow cc9ceaeb74 v4.3.4: release notes 2016-12-08 16:34:09 -08:00
James R. Barlow ad2fa8d1d7 Fix MANIFEST for .png 2016-12-08 16:25:04 -08:00
James R. Barlow adc1580742 Help py.test collect output in more cases 2016-12-08 16:21:07 -08:00
James R. Barlow 4d3b44d6df ghostscript: cleanup harmless error message printed for overprint
Redirect stderr->stdout to hopefully make GS output easier to work with
overall, since the previous code didn’t seem to account for mixed used
properly.
2016-12-08 16:19:15 -08:00
James R. Barlow e57aa0eee2 pageinfo: fix “decimal.InvalidOperation: quantize result has too many digits”
And add new test case for this.
2016-12-08 16:06:53 -08:00
James R. Barlow 1ae1d116c7 Make setup.py license internally consistent 2016-12-08 16:06:31 -08:00
9 changed files with 45 additions and 32 deletions
+1
View File
@@ -14,6 +14,7 @@ include .dockerignore
# tests # tests
include pytest.ini include pytest.ini
recursive-include tests *.jpg recursive-include tests *.jpg
recursive-include tests *.png
recursive-include tests *.pdf recursive-include tests *.pdf
recursive-include tests *.py recursive-include tests *.py
recursive-include tests *.rst recursive-include tests *.rst
+6
View File
@@ -3,6 +3,12 @@ RELEASE NOTES
OCRmyPDF uses `semantic versioning <http://semver.org/>`_. OCRmyPDF uses `semantic versioning <http://semver.org/>`_.
v4.3.4:
=======
- Fixed "decimal.InvalidOperation: quantize result has too many digits" for high DPI images
v4.3.3: v4.3.3:
======= =======
+22 -27
View File
@@ -2,7 +2,7 @@
# © 2015 James R. Barlow: github.com/jbarlow83 # © 2015 James R. Barlow: github.com/jbarlow83
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from subprocess import Popen, PIPE, check_call from subprocess import Popen, PIPE, STDOUT, check_call
from shutil import copy from shutil import copy
from . import get_program from . import get_program
from .pdfa import SRGB_ICC_PROFILE from .pdfa import SRGB_ICC_PROFILE
@@ -25,16 +25,13 @@ def rasterize_pdf(input_file, output_file, xres, yres, raster_device, log,
input_file input_file
] ]
p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=PIPE, p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=STDOUT,
universal_newlines=True) universal_newlines=True)
stdout, stderr = p.communicate() stdout, _ = p.communicate()
if stdout: if 'error' in stdout:
if 'error' in stdout: log.error(stdout) # Ghostscript puts errors in stdout
log.error(stdout) # Ghostscript puts errors in stdout else:
else: log.debug(stdout)
log.debug(stdout)
if stderr:
log.error(stderr)
if p.returncode == 0: if p.returncode == 0:
copy(tmp.name, output_file) copy(tmp.name, output_file)
@@ -60,24 +57,22 @@ def generate_pdfa(pdf_pages, output_file, log, threads=1):
"-sOutputFile=" + gs_pdf.name, "-sOutputFile=" + gs_pdf.name,
] ]
args_gs.extend(pdf_pages) args_gs.extend(pdf_pages)
p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=PIPE, p = Popen(args_gs, close_fds=True, stdout=PIPE, stderr=STDOUT,
universal_newlines=True) universal_newlines=True)
stdout, stderr = p.communicate() stdout, _ = p.communicate()
if stdout:
if 'error' in stdout: if 'error' in stdout:
log.error(stdout) log.error(stdout)
elif 'overprint mode not set' in stdout: elif 'overprint mode not set' in stdout:
# Unless someone is going to print PDF/A documents on a # Unless someone is going to print PDF/A documents on a
# magical sRGB printer I can't see the removal of overprinting # magical sRGB printer I can't see the removal of overprinting
# being a problem.... # being a problem....
log.debug( log.debug(
"Ghostscript had to remove PDF 'overprinting' from the " "Ghostscript had to remove PDF 'overprinting' from the "
"input file to complete PDF/A conversion. " "input file to complete PDF/A conversion. "
) )
else: else:
log.debug(stdout) log.debug(stdout)
if stderr:
log.error(stderr)
if p.returncode == 0: if p.returncode == 0:
# Ghostscript does not change return code when it fails to create # Ghostscript does not change return code when it fails to create
+2 -3
View File
@@ -2,7 +2,7 @@
# © 2015 James R. Barlow: github.com/jbarlow83 # © 2015 James R. Barlow: github.com/jbarlow83
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from decimal import Decimal, getcontext from decimal import Decimal
from math import hypot from math import hypot
import re import re
import sys import sys
@@ -330,9 +330,9 @@ def _find_page_regular_images(page, pageinfo, contentsinfo):
image['dpi_h'] = max(dpi_h, image.get('dpi_h', 0)) image['dpi_h'] = max(dpi_h, image.get('dpi_h', 0))
DPI_PREC = Decimal('1.000') DPI_PREC = Decimal('1.000')
dpi = Decimal(image['dpi_w'] * image['dpi_h']).sqrt()
image['dpi_w'] = Decimal(image['dpi_w']).quantize(DPI_PREC) image['dpi_w'] = Decimal(image['dpi_w']).quantize(DPI_PREC)
image['dpi_h'] = Decimal(image['dpi_h']).quantize(DPI_PREC) image['dpi_h'] = Decimal(image['dpi_h']).quantize(DPI_PREC)
dpi = Decimal(image['dpi_w'] * image['dpi_h']).sqrt()
image['dpi'] = dpi.quantize(DPI_PREC) image['dpi'] = dpi.quantize(DPI_PREC)
yield image yield image
@@ -407,7 +407,6 @@ def _pdf_get_pageinfo(infile, pageno: int):
def pdf_get_all_pageinfo(infile): def pdf_get_all_pageinfo(infile):
pdf = pypdf.PdfFileReader(infile) pdf = pypdf.PdfFileReader(infile)
getcontext().prec = 6
return [_pdf_get_pageinfo(infile, n) for n in range(pdf.numPages)] return [_pdf_get_pageinfo(infile, n) for n in range(pdf.numPages)]
+1 -1
View File
@@ -191,7 +191,7 @@ setup(
url='https://github.com/jbarlow83/OCRmyPDF', url='https://github.com/jbarlow83/OCRmyPDF',
author='James R. Barlow', author='James R. Barlow',
author_email='jim@purplerock.ca', author_email='jim@purplerock.ca',
license='Public Domain', license='MIT',
packages=['ocrmypdf'], packages=['ocrmypdf'],
keywords=['PDF', 'OCR', 'optical character recognition', 'PDF/A', 'scanning'], keywords=['PDF', 'OCR', 'optical character recognition', 'PDF/A', 'scanning'],
classifiers=[ classifiers=[
Binary file not shown.
+5
View File
@@ -31,6 +31,9 @@ In some cases they were converted from one image format to another without other
* - LinnSequencer.jpg, linn.pdf, linn.txt * - LinnSequencer.jpg, linn.pdf, linn.txt
- `Wikimedia: LinnSequencer`_ - `Wikimedia: LinnSequencer`_
- Creative Commons BY-SA 3.0 - Creative Commons BY-SA 3.0
* - typewriter.png, 2400dpi.pdf
- `Wikimedia: Triumph typewrtier text Linzensoep`_
* Creative Commons BY-SA 2.5
Files generated for this project Files generated for this project
@@ -105,3 +108,5 @@ These test resources are assemblies from other previously mentioned files, relea
.. _`Wikimedia: JPEG2000 Lichtenstein`: https://en.wikipedia.org/wiki/JPEG_2000#/media/File:Jpeg2000_2-level_wavelet_transform-lichtenstein.png .. _`Wikimedia: JPEG2000 Lichtenstein`: https://en.wikipedia.org/wiki/JPEG_2000#/media/File:Jpeg2000_2-level_wavelet_transform-lichtenstein.png
.. _`Linux (Wikipedia Article)`: https://de.wikipedia.org/wiki/Linux .. _`Linux (Wikipedia Article)`: https://de.wikipedia.org/wiki/Linux
.. _`Wikimedia: Triumph typewrtier text Linzensoep`: https://commons.wikimedia.org/wiki/File:Triumph.typewriter_text_Linzensoep.gif
Binary file not shown.
+7
View File
@@ -60,6 +60,7 @@ def check_ocrmypdf(input_basename, output_basename, *args, env=None):
output_file = _outfile(output_basename) output_file = _outfile(output_basename)
p, out, err = run_ocrmypdf(input_basename, output_basename, *args, env=env) p, out, err = run_ocrmypdf(input_basename, output_basename, *args, env=env)
print(err) # ensure py.test collects the output, use -s to view
if p.returncode != 0: if p.returncode != 0:
print('stdout\n======') print('stdout\n======')
print(out) print(out)
@@ -748,3 +749,9 @@ def test_ghostscript_pdfa_failure(spoof_no_tess_no_pdfa):
def test_ghostscript_feature_elision(spoof_no_tess_pdfa_warning): def test_ghostscript_feature_elision(spoof_no_tess_pdfa_warning):
check_ocrmypdf('ccitt.pdf', 'test_feature_elision.pdf', check_ocrmypdf('ccitt.pdf', 'test_feature_elision.pdf',
env=spoof_no_tess_pdfa_warning) env=spoof_no_tess_pdfa_warning)
def test_very_high_dpi(spoof_tesseract_cache):
"Checks for a Decimal quantize error with high DPI, etc"
check_ocrmypdf('2400dpi.pdf', 'test_2400dpi.pdf',
env=spoof_tesseract_cache)