diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2020-03-03 11:02:45 +0000 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2020-03-03 11:02:45 +0000 |
| commit | 0a72c6b0dcb047ca6bfc11ae876a33f26325a2ef (patch) | |
| tree | b69b3f5be29bbb32177e42f637869c3cf9e5ffad | |
| parent | Add ghostscript to install instructions homebrew (diff) | |
| download | paper2remarkable-0a72c6b0dcb047ca6bfc11ae876a33f26325a2ef.tar.gz paper2remarkable-0a72c6b0dcb047ca6bfc11ae876a33f26325a2ef.zip | |
Be more robust against missing pdftoppm
| -rw-r--r-- | paper2remarkable/crop.py | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/paper2remarkable/crop.py b/paper2remarkable/crop.py index 02c6757..dc4b31c 100644 --- a/paper2remarkable/crop.py +++ b/paper2remarkable/crop.py @@ -45,6 +45,17 @@ def find_offset_byte_line(line): return off +def check_pdftoppm(pth): + """Check that we can run the provided pdftoppm executable + """ + try: + subprocess.check_output([pth, "-v"], stderr=subprocess.DEVNULL) + except (subprocess.CalledProcessError, FileNotFoundError, PermissionError): + logger.info("pdftoppm not found, using pdfplumber instead (slower)") + return False + return True + + class Cropper(object): def __init__( self, input_file=None, output_file=None, pdftoppm_path="pdftoppm", @@ -55,6 +66,9 @@ class Cropper(object): if not output_file is None: self.output_file = os.path.abspath(output_file) + if pdftoppm_path and not check_pdftoppm(pdftoppm_path): + pdftoppm_path = None + self.pdftoppm_path = pdftoppm_path self.writer = PyPDF2.PdfFileWriter() @@ -116,15 +130,11 @@ class Cropper(object): def get_raw_bbox(self, filename, resolution=72): """Get the basic bounding box of a pdf file""" - # We try to use pdftoppm, but if it's not available or fails, we - # default to pdfplumber. - try: - bbox = self.get_raw_bbox_pdftoppm(filename, resolution=resolution) - except subprocess.CalledProcessError: - bbox = self.get_raw_bbox_pdfplumber( - filename, resolution=resolution - ) - return bbox + if self.pdftoppm_path is None: + box = self.get_raw_bbox_pdfplumber(filename, resolution=resolution) + else: + box = self.get_raw_bbox_pdftoppm(filename, resolution=resolution) + return box def get_raw_bbox_pdfplumber(self, filename, resolution=72): """Get the basic bounding box with pdfplumber""" |
