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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

P|G(eSbeA{82>} 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 XB(bOjlHv?aEewo|dAU?oUH#nvT-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,