Remove last vestiges of command line usage of qpdf - change to check_pdf

This commit is contained in:
James R. Barlow
2020-04-26 05:33:26 -07:00
parent 168fc60774
commit 8f5c95f0f4
13 changed files with 63 additions and 95 deletions
+2 -3
View File
@@ -64,8 +64,7 @@ from ._validation import (
report_output_file_size,
)
from .exceptions import ExitCode, ExitCodeException
from .exec import qpdf
from .helpers import available_cpu_count
from .helpers import available_cpu_count, check_pdf
from .pdfa import file_claims_pdfa
log = logging.getLogger(__name__)
@@ -357,7 +356,7 @@ def run_pipeline(options, api=False):
pdfa_info['conformance'],
)
return ExitCode.pdfa_conversion_failed
if not qpdf.check(options.output_file):
if not check_pdf(options.output_file):
log.warning('Output file: The generated PDF is INVALID')
return ExitCode.invalid_output_pdf
report_output_file_size(options, start_input_file, options.output_file)
-7
View File
@@ -38,7 +38,6 @@ from .exec import (
ghostscript,
jbig2enc,
pngquant,
qpdf,
tesseract,
unpaper,
)
@@ -473,9 +472,3 @@ def check_dependency_versions(options):
"supported. Please upgrade to a newer version, or downgrade to the "
"previous version."
)
check_external_program(
program='qpdf',
package='qpdf',
version_checker=qpdf.version,
need_version='8.0.2',
)
-63
View File
@@ -1,63 +0,0 @@
# © 2017 James R. Barlow: github.com/jbarlow83
#
# This file is part of OCRmyPDF.
#
# OCRmyPDF is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OCRmyPDF is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OCRmyPDF. If not, see <http://www.gnu.org/licenses/>.
"""Interface to qpdf executable"""
import logging
from io import StringIO
import pikepdf
log = logging.getLogger(__name__)
def version():
return pikepdf.__libqpdf_version__
def check(input_file):
pdf = None
try:
pdf = pikepdf.open(input_file)
except pikepdf.PdfError as e:
log.error(e)
return False
else:
messages = pdf.check()
for msg in messages:
if 'error' in msg.lower():
log.error(msg)
else:
log.warning(msg)
sio = StringIO()
linearize = None
try:
pdf.check_linearization(sio)
except RuntimeError:
pass
else:
linearize = sio.getvalue()
if linearize:
log.warning(linearize)
if not messages and not linearize:
return True
return False
finally:
if pdf:
pdf.close()
+37
View File
@@ -24,9 +24,12 @@ from collections import namedtuple
from collections.abc import Iterable
from contextlib import suppress
from functools import wraps
from io import StringIO
from math import inf, isclose
from pathlib import Path
import pikepdf
log = logging.getLogger(__name__)
@@ -165,6 +168,40 @@ def is_file_writable(test_file: os.PathLike):
return False
def check_pdf(input_file):
pdf = None
try:
pdf = pikepdf.open(input_file)
except pikepdf.PdfError as e:
log.error(e)
return False
else:
messages = pdf.check()
for msg in messages:
if 'error' in msg.lower():
log.error(msg)
else:
log.warning(msg)
sio = StringIO()
linearize = None
try:
pdf.check_linearization(sio)
except RuntimeError:
pass
else:
linearize = sio.getvalue()
if linearize:
log.warning(linearize)
if not messages and not linearize:
return True
return False
finally:
if pdf:
pdf.close()
def deprecated(func):
"""Warn that function is deprecated"""