from io import BufferedReader, BytesIO
from os.path import isfile
from sys import exit as sys_exit
-from typing import Any, Optional
+from typing import Optional
def handled_error_exit(
import pypdf
except ImportError:
handled_error_exit('Can\'t run at all without pypdf installed.')
+try:
+ from reportlab.pdfgen.canvas import Canvas
+ GOT_CANVAS = True
+except ImportError:
+ GOT_CANVAS = False
# some general paper geometry constants
POINTS_PER_CM = 10 * 72 / 25.4
page_croppings: list[PageCrop],
args_print_margin: int,
args_analyze: str,
- canvas_class: Any
) -> None:
'Build nup4 pages from inputs.'
print('-n: building 4-input-pages-per-output-page book')
ornate_nup4(args_analyze,
is_front_page,
new_page,
- nup4_geometry,
- canvas_class)
+ nup4_geometry)
writer.add_page(new_page)
nup4_i = 0
is_front_page = not is_front_page
is_front_page: bool,
new_page: pypdf.PageObject,
nup4_geometry: Nup4Geometry,
- canvas_class
) -> None:
'Apply nup4 line guides onto new_page.'
if args_analyze:
# borders
packet = BytesIO()
- c = canvas_class(packet, pagesize=A4)
+ c = Canvas(packet, pagesize=A4)
c.setLineWidth(0.1)
c.line(0, A4_HEIGHT, A4_WIDTH, A4_HEIGHT)
c.line(0, A4_HALF_HEIGHT, A4_WIDTH, A4_HALF_HEIGHT)
x_right_spine_limit = A4_WIDTH - x_left_spine_limit
if args_analyze or is_front_page:
packet = BytesIO()
- c = canvas_class(packet, pagesize=A4)
+ c = Canvas(packet, pagesize=A4)
if args_analyze:
# spine lines
c.setLineWidth(0.1)
def draw_cut(
- canvas: Any,
+ canvas: 'Canvas',
x_spine_limit: float,
direction: int
) -> None:
'Full program run to be wrapped into ArgFail catcher.'
args = parse_args()
validate_args_syntax(args)
- if args.nup4:
- try:
- from reportlab.pdfgen.canvas import Canvas
- except ImportError:
- raise ArgFail('n',
- 'need reportlab.pdfgen.canvas installed for --nup4')
+ if args.nup4 and not GOT_CANVAS:
+ raise ArgFail('n', 'need reportlab.pdfgen.canvas installed for --nup4')
pages_to_add, opened_files = args_to_pagelist(args.input_file,
args.page_range)
validate_ranges(args, pages_to_add)
pages_to_add,
page_croppings,
args.print_margin,
- args.analyze,
- Canvas)
+ args.analyze)
else:
build_single_pages_output(writer, pages_to_add, page_croppings)
for file in opened_files: