try:
reader = PdfReader(file)
except PdfStreamError as e:
- for file in opened_files:
- file.close()
+ for to_close in opened_files:
+ to_close.close()
raise ArgFail('i',
f'cannot interpret {filename} as PDF file') from e
range_string = None
if mod_to_8 > 0:
old_len = len(pages_to_add)
for _ in range(8 - mod_to_8):
- new_page = PdfPage.create_blank_page(
- width=A4_WIDTH, height=A4_HEIGHT)
- pages_to_add += [new_page]
+ pages_to_add += [PdfPage.create_blank_page(width=A4_WIDTH,
+ height=A4_HEIGHT)]
print(f'-n: number of input pages {old_len} not required multiple '
f'of 8, padded to {len(pages_to_add)}')
print(f'{prefix}: to pages {idx_start + 1}:{idx_after} '
f'applying crop: {page_crop.format_in_cm}{suffix}')
for n_page in range(idx_start, idx_after):
- if args_symmetry and n_page % 2:
- page_croppings[n_page] = page_crop.make_mirror()
- else:
- page_croppings[n_page] = page_crop
+ page_croppings[n_page] = (page_crop.make_mirror()
+ if (args_symmetry and n_page % 2)
+ else page_crop)
elif args_keep_mediabox:
for n_page, page in enumerate(pages_to_add):
page_croppings[n_page] = PageCrop(
for i, page in enumerate(pages_to_add):
new_page = new_page or PdfPage.create_blank_page(width=A4_WIDTH,
height=A4_HEIGHT)
- corrected_i = old_indices[i]
nup4_inner_page_transform(
- page, page_croppings[corrected_i], nup4_geometry, nup4_i)
+ page, page_croppings[old_indices[i]], nup4_geometry, nup4_i)
nup4_outer_page_transform(page, nup4_geometry, nup4_i)
new_page.merge_page(page)
page_count += 1
print(f'merged page number {page_count} (of {len(pages_to_add)})')
nup4_i += 1
if nup4_i > 3:
- ornate_nup4(args_analyze,
- is_front_page,
- new_page,
- nup4_geometry)
+ ornate_nup4(args_analyze, is_front_page, new_page, nup4_geometry)
writer.add_page(new_page)
nup4_i = 0
new_page = None
'Apply to page crop instructions adequate to position in nup4 geometry.'
page.add_transformation(PdfTransformation().translate(
ty=A4_HEIGHT / crop.zoom - (A4_HEIGHT - crop.top)))
- if nup4_i in {0, 2}:
- page.add_transformation(PdfTransformation().translate(
- tx=-crop.left))
- elif nup4_i in {1, 3}:
- page.add_transformation(PdfTransformation().translate(
- tx=A4_WIDTH / crop.zoom - (A4_WIDTH - crop.right)))
+ page.add_transformation(PdfTransformation().translate(
+ tx=((-crop.left) if nup4_i in {0, 2}
+ else A4_WIDTH / crop.zoom - (A4_WIDTH - crop.right)))) # in {1, 3}
page.add_transformation(PdfTransformation().scale(
crop.zoom * nup4_geometry.shrink_for_spine,
crop.zoom * nup4_geometry.shrink_for_spine))
x_section = A4_WIDTH
page.mediabox.left = A4_HALF_WIDTH
page.mediabox.right = A4_WIDTH
- page.add_transformation(PdfTransformation().translate(
- tx=x_section, ty=y_section))
+ page.add_transformation(PdfTransformation().translate(tx=x_section,
+ ty=y_section))
page.add_transformation(PdfTransformation().scale(QUARTER_SCALE_FACTOR,
QUARTER_SCALE_FACTOR))
nup4_geometry.shrink_for_margin, nup4_geometry.shrink_for_margin))
new_page.add_transformation(PdfTransformation().translate(
tx=printable_offset_x, ty=printable_offset_y))
+ if not (args_analyze or is_front_page):
+ return
x_left_spine_limit = A4_HALF_WIDTH * nup4_geometry.shrink_for_spine
x_right_spine_limit = A4_WIDTH - x_left_spine_limit
- if args_analyze or is_front_page:
- packet = BytesIO()
- c = Canvas(packet, pagesize=A4)
+ packet = BytesIO()
+ c = Canvas(packet, pagesize=A4)
if args_analyze:
# spine lines
c.setLineWidth(0.1)
c.setLineWidth(0.2)
draw_cut(c, x_left_spine_limit, 1)
draw_cut(c, x_right_spine_limit, -1)
- if args_analyze or is_front_page:
- c.save()
- new_pdf = PdfReader(packet)
- new_page.merge_page(new_pdf.pages[0])
+ c.save()
+ new_pdf = PdfReader(packet)
+ new_page.merge_page(new_pdf.pages[0])
def draw_cut(
direction: int
) -> None:
'Into canvas draw book binding cut guide at x_spine_limit into direction.'
- outer_start_x = x_spine_limit - 0.5 * CUT_WIDTH * direction
- inner_start_x = x_spine_limit + 0.5 * CUT_WIDTH * direction
+ directed_half_width = 0.5 * CUT_WIDTH * direction
+ outer_start_x = x_spine_limit - directed_half_width
+ inner_start_x = x_spine_limit + directed_half_width
middle_point_y = A4_HALF_HEIGHT + MIDDLE_POINT_DEPTH * direction
end_point_y = A4_HALF_HEIGHT + CUT_DEPTH * direction
canvas.line(inner_start_x, A4_HALF_HEIGHT, x_spine_limit, end_point_y)