diff --git a/src/ocrmypdf/_pipeline.py b/src/ocrmypdf/_pipeline.py index 8349d9fa..447471cc 100644 --- a/src/ocrmypdf/_pipeline.py +++ b/src/ocrmypdf/_pipeline.py @@ -18,7 +18,7 @@ from typing import Dict, Iterable, Optional import img2pdf import pikepdf from pikepdf.models.metadata import encode_pdf_date -from PIL import Image, ImageColor, ImageDraw +from PIL import Image, ImageDraw from ocrmypdf._concurrent import Executor from ocrmypdf._exec import unpaper @@ -32,7 +32,7 @@ from ocrmypdf.exceptions import ( PriorOcrFoundError, UnsupportedImageFormatError, ) -from ocrmypdf.helpers import Resolution, safe_symlink +from ocrmypdf.helpers import IMG2PDF_KWARGS, Resolution, safe_symlink from ocrmypdf.hocrtransform import HocrTransform from ocrmypdf.optimize import optimize from ocrmypdf.pdfa import generate_pdfa_ps @@ -98,8 +98,8 @@ def triage_image_file(input_file, output_file, options): img2pdf.convert( os.fspath(input_file), layout_fun=layout_fun, - with_pdfrw=False, outputstream=outf, + **IMG2PDF_KWARGS, ) log.info("Successfully converted to PDF, processing...") except img2pdf.ImageOpenError as e: @@ -612,7 +612,7 @@ def create_pdf_page_from_image( layout_fun = img2pdf.get_layout_fun(pagesize) img2pdf.convert( - imfile, with_pdfrw=False, layout_fun=layout_fun, outputstream=pdf + imfile, layout_fun=layout_fun, outputstream=pdf, **IMG2PDF_KWARGS ) log.debug('convert done') diff --git a/src/ocrmypdf/helpers.py b/src/ocrmypdf/helpers.py index fce36a8f..a0a08a52 100644 --- a/src/ocrmypdf/helpers.py +++ b/src/ocrmypdf/helpers.py @@ -19,10 +19,21 @@ from math import isclose, isfinite from pathlib import Path from typing import Any, Sequence +import img2pdf import pikepdf +from packaging.version import Version log = logging.getLogger(__name__) +if Version(img2pdf.__version__) < Version('0.4.0'): + IMG2PDF_KWARGS = dict(without_pdfw=True) +elif Version(img2pdf.__version__) < Version('0.4.3'): + IMG2PDF_KWARGS = dict(engine=img2pdf.Engine.pikepdf) +else: + IMG2PDF_KWARGS = dict( + engine=img2pdf.Engine.pikepdf, rotation=img2pdf.Rotation.ifvalid + ) + class Resolution(namedtuple('Resolution', ('x', 'y'))): """The number of pixels per inch in each 2D direction. diff --git a/src/ocrmypdf/optimize.py b/src/ocrmypdf/optimize.py index a8099d0a..49faf414 100644 --- a/src/ocrmypdf/optimize.py +++ b/src/ocrmypdf/optimize.py @@ -41,7 +41,7 @@ from ocrmypdf._concurrent import Executor, SerialExecutor from ocrmypdf._exec import jbig2enc, pngquant from ocrmypdf._jobcontext import PdfContext from ocrmypdf.exceptions import OutputFileAccessError -from ocrmypdf.helpers import safe_symlink +from ocrmypdf.helpers import IMG2PDF_KWARGS, safe_symlink log = logging.getLogger(__name__) @@ -453,7 +453,7 @@ def transcode_jpegs( def _transcode_png(pike: Pdf, filename: Path, xref: Xref) -> bool: output = filename.with_suffix('.png.pdf') with output.open('wb') as f: - img2pdf.convert(fspath(filename), outputstream=f) + img2pdf.convert(fspath(filename), outputstream=f, **IMG2PDF_KWARGS) with Pdf.open(output) as pdf_image: foreign_image = next(iter(pdf_image.pages[0].images.values())) diff --git a/tests/test_optimize.py b/tests/test_optimize.py index 76b45eb9..de3b5ada 100644 --- a/tests/test_optimize.py +++ b/tests/test_optimize.py @@ -17,7 +17,7 @@ from PIL import Image, ImageDraw from ocrmypdf import optimize as opt from ocrmypdf._exec import jbig2enc, pngquant from ocrmypdf._exec.ghostscript import rasterize_pdf -from ocrmypdf.helpers import Resolution +from ocrmypdf.helpers import IMG2PDF_KWARGS, Resolution from .conftest import check_ocrmypdf @@ -139,8 +139,8 @@ def test_multiple_pngs(resources, outdir): img2pdf.convert( fspath(resources / 'baiona_colormapped.png'), fspath(resources / 'baiona_gray.png'), - with_pdfrw=False, outputstream=inpdf, + **IMG2PDF_KWARGS, ) def mockquant(input_file, output_file, *_args): diff --git a/tests/test_pdfinfo.py b/tests/test_pdfinfo.py index c65428af..1a21e0e0 100644 --- a/tests/test_pdfinfo.py +++ b/tests/test_pdfinfo.py @@ -17,7 +17,7 @@ from reportlab.pdfgen.canvas import Canvas from ocrmypdf import pdfinfo from ocrmypdf.exceptions import InputFileError -from ocrmypdf.helpers import Resolution +from ocrmypdf.helpers import IMG2PDF_KWARGS, Resolution from ocrmypdf.pdfinfo import Colorspace, Encoding from ocrmypdf.pdfinfo.layout import PDFPage @@ -67,9 +67,9 @@ def test_single_page_image(eight_by_eight, outpdf): img2pdf.convert( bio, producer="img2pdf", - with_pdfrw=False, layout_fun=layout_fun, outputstream=f, + **IMG2PDF_KWARGS, ) info = pdfinfo.PdfInfo(outpdf) diff --git a/tests/test_rotation.py b/tests/test_rotation.py index d43ce1b9..75dcb6f8 100644 --- a/tests/test_rotation.py +++ b/tests/test_rotation.py @@ -18,7 +18,7 @@ from reportlab.pdfgen.canvas import Canvas from ocrmypdf._exec import ghostscript from ocrmypdf._plugin_manager import get_plugin_manager -from ocrmypdf.helpers import Resolution +from ocrmypdf.helpers import IMG2PDF_KWARGS, Resolution from ocrmypdf.pdfinfo import PdfInfo from .conftest import check_ocrmypdf, run_ocrmypdf @@ -230,6 +230,7 @@ def test_rotate_page_level(image_angle, page_angle, resources, outdir): memimg.read(), layout_fun=img2pdf.get_fixed_dpi_layout_fun((200, 200)), outputstream=mempdf, + **IMG2PDF_KWARGS, ) mempdf.seek(0) pike = pikepdf.open(mempdf)