From caf4b54bc7bf828ba170fcc329aa82a0c45da382 Mon Sep 17 00:00:00 2001 From: Trenton H Date: Tue, 4 Oct 2022 12:55:50 -0700 Subject: [PATCH 1/2] In case pikepdf fails to convert an image to a PIL image, fall back to converting pages to PIL images --- Pipfile | 1 + Pipfile.lock | 8 ++++ src/documents/barcodes.py | 43 ++++++++++++++++---- src/documents/tests/test_barcodes.py | 61 ++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 9 deletions(-) diff --git a/Pipfile b/Pipfile index d95af784e..e44ace17e 100644 --- a/Pipfile +++ b/Pipfile @@ -57,6 +57,7 @@ celery = {extras = ["redis"], version = "*"} django-celery-results = "*" setproctitle = "*" nltk = "*" +pdf2image = "*" [dev-packages] coveralls = "*" diff --git a/Pipfile.lock b/Pipfile.lock index a78cc5ff0..7852a1ced 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -939,6 +939,14 @@ "index": "pypi", "version": "==2.5.2" }, + "pdf2image": { + "hashes": [ + "sha256:84f79f2b8fad943e36323ea4e937fcb05f26ded0caa0a01181df66049e42fb65", + "sha256:d58ed94d978a70c73c2bb7fdf8acbaf2a7089c29ff8141be5f45433c0c4293bb" + ], + "index": "pypi", + "version": "==1.16.0" + }, "pdfminer.six": { "hashes": [ "sha256:5a64c924410ac48501d6060b21638bf401db69f5b1bd57207df7fbc070ac8ae2", diff --git a/src/documents/barcodes.py b/src/documents/barcodes.py index a30a55bbb..54db83c19 100644 --- a/src/documents/barcodes.py +++ b/src/documents/barcodes.py @@ -9,6 +9,7 @@ from typing import Tuple import magic from django.conf import settings +from pdf2image import convert_from_path from pikepdf import Page from pikepdf import Pdf from pikepdf import PdfImage @@ -108,6 +109,30 @@ def scan_file_for_separating_barcodes(filepath: str) -> Tuple[Optional[str], Lis which separate the file into new files """ + def _pikepdf_barcode_scan(pdf_filepath: str): + with Pdf.open(pdf_filepath) as pdf: + for page_num, page in enumerate(pdf.pages): + for image_key in page.images: + pdfimage = PdfImage(page.images[image_key]) + + # Not all images can be transcoded to a PIL image, which + # is what pyzbar expects to receive + pillow_img = pdfimage.as_pil_image() + + detected_barcodes = barcode_reader(pillow_img) + + if settings.CONSUMER_BARCODE_STRING in detected_barcodes: + separator_page_numbers.append(page_num) + + def _pdf2image_barcode_scan(pdf_filepath: str): + # use a temporary directory in case the file os too big to handle in memory + with tempfile.TemporaryDirectory() as path: + pages_from_path = convert_from_path(pdf_filepath, output_folder=path) + for current_page_number, page in enumerate(pages_from_path): + current_barcodes = barcode_reader(page) + if settings.CONSUMER_BARCODE_STRING in current_barcodes: + separator_page_numbers.append(current_page_number) + separator_page_numbers = [] pdf_filepath = None @@ -118,17 +143,17 @@ def scan_file_for_separating_barcodes(filepath: str) -> Tuple[Optional[str], Lis if mime_type == "image/tiff": pdf_filepath = convert_from_tiff_to_pdf(filepath) - pdf = Pdf.open(pdf_filepath) + try: + _pikepdf_barcode_scan(pdf_filepath) + except Exception as e: - for page_num, page in enumerate(pdf.pages): - for image_key in page.images: - pdfimage = PdfImage(page.images[image_key]) - pillow_img = pdfimage.as_pil_image() + logger.warning( + f"Exception using pikepdf for barcodes, falling back to pdf2image: {e}", + ) + # Reset this incase pikepdf got part way through + separator_page_numbers = [] + _pdf2image_barcode_scan(pdf_filepath) - detected_barcodes = barcode_reader(pillow_img) - - if settings.CONSUMER_BARCODE_STRING in detected_barcodes: - separator_page_numbers.append(page_num) else: logger.warning( f"Unsupported file format for barcode reader: {str(mime_type)}", diff --git a/src/documents/tests/test_barcodes.py b/src/documents/tests/test_barcodes.py index 5de475578..0f16845d2 100644 --- a/src/documents/tests/test_barcodes.py +++ b/src/documents/tests/test_barcodes.py @@ -3,6 +3,7 @@ import shutil import tempfile from unittest import mock +import pikepdf from django.conf import settings from django.test import override_settings from django.test import TestCase @@ -218,6 +219,66 @@ class TestBarcode(DirectoriesMixin, TestCase): self.assertEqual(pdf_file, test_file) self.assertListEqual(separator_page_numbers, [1]) + def test_scan_file_for_separating_barcodes_pillow_transcode_error(self): + """ + GIVEN: + - A PDF containing an image which cannot be transcoded to a PIL image + WHEN: + - The image tries to be transcoded to a PIL image, but fails + THEN: + - The barcode reader is still called, as + """ + + def _build_device_n_pdf(self, save_path: str): + # Based on the pikepdf tests + # https://github.com/pikepdf/pikepdf/blob/abb35ebe17d579d76abe08265e00cf8890a12a95/tests/test_image_access.py + pdf = pikepdf.new() + pdf.add_blank_page(page_size=(72, 72)) + imobj = pikepdf.Stream( + pdf, + bytes(range(0, 256)), + BitsPerComponent=8, + ColorSpace=pikepdf.Array( + [ + pikepdf.Name.DeviceN, + pikepdf.Array([pikepdf.Name.Black]), + pikepdf.Name.DeviceCMYK, + pikepdf.Stream( + pdf, + b"{0 0 0 4 -1 roll}", # Colorspace conversion function + FunctionType=4, + Domain=[0.0, 1.0], + Range=[0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0], + ), + ], + ), + Width=16, + Height=16, + Type=pikepdf.Name.XObject, + Subtype=pikepdf.Name.Image, + ) + pim = pikepdf.PdfImage(imobj) + self.assertEqual(pim.mode, "DeviceN") + self.assertTrue(pim.is_device_n) + + pdf.pages[0].Contents = pikepdf.Stream(pdf, b"72 0 0 72 0 0 cm /Im0 Do") + pdf.pages[0].Resources = pikepdf.Dictionary( + XObject=pikepdf.Dictionary(Im0=imobj), + ) + pdf.save(save_path) + + with tempfile.NamedTemporaryFile(suffix="pdf") as device_n_pdf: + # Build an offending file + _build_device_n_pdf(self, str(device_n_pdf.name)) + with mock.patch("documents.barcodes.barcode_reader") as reader: + reader.return_value = list() + + _, _ = barcodes.scan_file_for_separating_barcodes( + str(device_n_pdf.name), + ) + + reader.assert_called() + def test_scan_file_for_separating_qr_barcodes(self): test_file = os.path.join( self.BARCODE_SAMPLE_DIR, From 4cc2976614b3a350ef5483456bc028534075e194 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 5 Oct 2022 19:58:40 -0700 Subject: [PATCH 2/2] Adds specific handling for CCITT Group 4, which pikepdf decodes, but not correctly --- src/documents/barcodes.py | 7 ++++++ .../samples/barcodes/barcode-fax-image.pdf | Bin 0 -> 158668 bytes src/documents/tests/test_barcodes.py | 22 +++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/documents/tests/samples/barcodes/barcode-fax-image.pdf diff --git a/src/documents/barcodes.py b/src/documents/barcodes.py index 54db83c19..a4be126a5 100644 --- a/src/documents/barcodes.py +++ b/src/documents/barcodes.py @@ -20,6 +20,10 @@ from pyzbar import pyzbar logger = logging.getLogger("paperless.barcodes") +class BarcodeImageFormatError(Exception): + pass + + @lru_cache(maxsize=8) def supported_file_type(mime_type) -> bool: """ @@ -115,6 +119,9 @@ def scan_file_for_separating_barcodes(filepath: str) -> Tuple[Optional[str], Lis for image_key in page.images: pdfimage = PdfImage(page.images[image_key]) + if "/CCITTFaxDecode" in pdfimage.filters: + raise BarcodeImageFormatError() + # Not all images can be transcoded to a PIL image, which # is what pyzbar expects to receive pillow_img = pdfimage.as_pil_image() diff --git a/src/documents/tests/samples/barcodes/barcode-fax-image.pdf b/src/documents/tests/samples/barcodes/barcode-fax-image.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e248c82b26006fce7a3699936508fc2a1d26558 GIT binary patch literal 158668 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 P4*}!4>#lnqy!ZbDT-GHT literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_barcodes.py b/src/documents/tests/test_barcodes.py index 0f16845d2..ee8df9f34 100644 --- a/src/documents/tests/test_barcodes.py +++ b/src/documents/tests/test_barcodes.py @@ -226,7 +226,7 @@ class TestBarcode(DirectoriesMixin, TestCase): WHEN: - The image tries to be transcoded to a PIL image, but fails THEN: - - The barcode reader is still called, as + - The barcode reader is still called """ def _build_device_n_pdf(self, save_path: str): @@ -279,6 +279,26 @@ class TestBarcode(DirectoriesMixin, TestCase): reader.assert_called() + def test_scan_file_for_separating_barcodes_fax_decode(self): + """ + GIVEN: + - A PDF containing an image encoded as CCITT Group 4 encoding + WHEN: + - Barcode processing happens with the file + THEN: + - The barcode is still detected + """ + test_file = os.path.join( + self.BARCODE_SAMPLE_DIR, + "barcode-fax-image.pdf", + ) + pdf_file, separator_page_numbers = barcodes.scan_file_for_separating_barcodes( + test_file, + ) + + self.assertEqual(pdf_file, test_file) + self.assertListEqual(separator_page_numbers, [1]) + def test_scan_file_for_separating_qr_barcodes(self): test_file = os.path.join( self.BARCODE_SAMPLE_DIR,