Skip to content
Snippets Groups Projects
Commit 76a7de19 authored by Martin Mareš's avatar Martin Mareš
Browse files

Zpracování skenů: Nejdřív se pokusíme soubor otevřít pomocí PikePdf

PikePdf kontroluje syntaxi souboru striktněji než Poppler, tak snad
odchytá většinu problémů, na nichž by Poppler spadl.

Closes #284.
parent 454bded0
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ from PIL import Image, ImageFilter ...@@ -4,6 +4,7 @@ from PIL import Image, ImageFilter
from dataclasses import dataclass, field from dataclasses import dataclass, field
import multiprocessing import multiprocessing
import os import os
import pikepdf
import poppler import poppler
import pyzbar.pyzbar as pyzbar import pyzbar.pyzbar as pyzbar
from sqlalchemy import delete from sqlalchemy import delete
...@@ -166,7 +167,7 @@ def handle_create_protocols(the_job: TheJob): ...@@ -166,7 +167,7 @@ def handle_create_protocols(the_job: TheJob):
# Výstupní JSON: # Výstupní JSON:
# null # null
# #
# Výstupn soubory: # Výstupní soubory:
# p-{file_nr:02d}-{page_nr:04d}-(full|small).png # p-{file_nr:02d}-{page_nr:04d}-(full|small).png
# #
...@@ -357,6 +358,19 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult: ...@@ -357,6 +358,19 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult:
res = ScanJobResult() res = ScanJobResult()
logger.debug(f'Scan: Analyzuji soubor {args.in_path}') 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: try:
pdf = poppler.load_from_file(args.in_path) pdf = poppler.load_from_file(args.in_path)
except ValueError: except ValueError:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment