diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-05-31 21:36:18 +0100 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-05-31 21:36:18 +0100 |
| commit | fc00df1b871b46d0f744ed61707b31bfcb3e40d5 (patch) | |
| tree | 25222bfe37a08d72b33179be93189ab439e9e5bb | |
| parent | add gitignore (diff) | |
| download | paper2remarkable-fc00df1b871b46d0f744ed61707b31bfcb3e40d5.tar.gz paper2remarkable-fc00df1b871b46d0f744ed61707b31bfcb3e40d5.zip | |
add support for centering pdf
| -rwxr-xr-x | arxiv2remarkable.py | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/arxiv2remarkable.py b/arxiv2remarkable.py index 08beaca..3994b1b 100755 --- a/arxiv2remarkable.py +++ b/arxiv2remarkable.py @@ -37,6 +37,9 @@ HEADERS = { "Safari/537.36" } +RM_WIDTH = 1404 +RM_HEIGHT = 1872 + class Provider(metaclass=abc.ABCMeta): """ ABC for providers of pdf sources """ @@ -46,6 +49,7 @@ class Provider(metaclass=abc.ABCMeta): verbose=False, upload=True, debug=False, + center=False, remarkable_dir="/", rmapi_path="rmapi", pdfcrop_path="pdfcrop", @@ -55,6 +59,7 @@ class Provider(metaclass=abc.ABCMeta): self.verbose = verbose self.upload = upload self.debug = debug + self.center = center self.remarkable_dir = remarkable_dir self.rmapi_path = rmapi_path self.pdfcrop_path = pdfcrop_path @@ -111,6 +116,37 @@ class Provider(metaclass=abc.ABCMeta): self.log("Created filename: %s" % name) return name + def center_pdf(self, filepath): + if not self.center: + return filepath + pdf_file = PyPDF2.PdfFileReader(filepath) + mediaBox = pdf_file.getPage(0).mediaBox + width = mediaBox[2] - mediaBox[0] + height = mediaBox[3] - mediaBox[1] + padding = (height * RM_WIDTH - width * RM_HEIGHT) / RM_HEIGHT + left_margin = padding / 2 + 15 + + self.log("Centering PDF file") + status = subprocess.call( + [ + self.pdfcrop_path, + "--margins", + "%i 40 15 15" % left_margin, + filepath, + ], + stdout=subprocess.DEVNULL, + ) + if not status == 0: + self.warn("Failed to crop the pdf file at: %s" % filepath) + return filepath + centered_file = os.path.splitext(filepath)[0] + "-crop.pdf" + if not os.path.exists(centered_file): + self.warn( + "Can't find centered file '%s' where expected." % centered_file + ) + return filepath + return centered_file + def crop_pdf(self, filepath): self.log("Cropping pdf file") status = subprocess.call( @@ -260,7 +296,12 @@ class Provider(metaclass=abc.ABCMeta): self.retrieve_pdf(src, tmp_filename) self.check_file_is_pdf(tmp_filename) - ops = [self.dearxiv, self.crop_pdf, self.shrink_pdf] + ops = [ + self.dearxiv, + self.crop_pdf, + self.center_pdf, + self.shrink_pdf, + ] intermediate_fname = tmp_filename for op in ops: intermediate_fname = op(intermediate_fname) @@ -522,6 +563,12 @@ def parse_args(): action="store_true", ) parser.add_argument( + "-c", + "--center", + help="Center the PDF on the page, instead of left align", + action="store_true", + ) + parser.add_argument( "--filename", help="Filename to use for the file on reMarkable", default=None, @@ -565,14 +612,15 @@ def main(): exception("Input not valid, no provider can handle this source.") prov = provider( - args.verbose, - not args.no_upload, - args.debug, - args.remarkable_dir, - args.rmapi, - args.pdfcrop, - args.pdftk, - args.gs, + verbose=args.verbose, + upload=not args.no_upload, + debug=args.debug, + center=args.center, + remarkable_dir=args.remarkable_dir, + rmapi_path=args.rmapi, + pdfcrop_path=args.pdfcrop, + pdftk_path=args.pdftk, + gs_path=args.gs, ) prov.run(args.input, filename=args.filename) |
