diff --git a/mo/jobs/protocols.py b/mo/jobs/protocols.py index cff9c948e56806af83364f56ba7ac90bf2354fc0..bdc652d32bf287b688898f2c33e8aefd58b142c4 100644 --- a/mo/jobs/protocols.py +++ b/mo/jobs/protocols.py @@ -4,6 +4,7 @@ from PIL import Image, ImageFilter from dataclasses import dataclass, field import multiprocessing import os +import pikepdf import poppler import pyzbar.pyzbar as pyzbar from sqlalchemy import delete @@ -166,7 +167,7 @@ def handle_create_protocols(the_job: TheJob): # Výstupní JSON: # null # -# Výstupn soubory: +# Výstupní soubory: # p-{file_nr:02d}-{page_nr:04d}-(full|small).png # @@ -357,6 +358,19 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult: res = ScanJobResult() logger.debug(f'Scan: Analyzuji soubor {args.in_path}') + + # Nejdřív PDF otevřeme v PikePDF, který je striktnější a umí lépe hlásit chyby. + try: + with pikepdf.open(args.in_path, attempt_recovery=False): + pass + except pikepdf.PdfError as e: + logger.warning(f'Scan: {e}') + res.error = 'Soubor není ve formátu PDF nebo je poškozený' + return res + except pikepdf.PasswordError: + res.error = 'Soubor je chráněný heslem' + return res + try: pdf = poppler.load_from_file(args.in_path) except ValueError: