c.save()
self._pypdf.merge_page(PdfReader(packet).pages[0])
+ def draw_orth_lines(
+ self,
+ lines: tuple[tuple[bool, float], ...],
+ rgb_color: tuple[float, float, float] = (0.0, 0.0, 0.0),
+ line_width: float = 2.0,
+ ) -> None:
+ 'Draw horizontal or vertical lines.'
+ min_x, min_y, max_x, max_y = self._pypdf.mediabox
+ full_lines = []
+ for is_horizontal, position in lines:
+ if is_horizontal:
+ x0, x1 = min_x, max_x
+ y0 = y1 = position
+ else:
+ y0, y1 = min_y, max_y
+ x0 = x1 = position
+ full_lines += [(x0, y0, x1, y1)]
+ self.draw_lines(full_lines, rgb_color, line_width)
+
def draw_borders(
self,
rgb_color: tuple[float, float, float] = (0.0, 0.0, 0.0),
) -> None:
'Draw border lines around mediabox.'
min_x, min_y, max_x, max_y = self._pypdf.mediabox
- self.draw_lines(((min_x, min_y, min_x, max_y), # left
- (min_x, min_y, max_x, min_y), # bottom
- (max_x, min_y, max_x, max_y), # right
- (min_x, max_y, max_x, max_y)), # top
- rgb_color,
- line_width)
+ self.draw_orth_lines(
+ ((False, min_x), (True, min_y), (False, max_x), (True, max_y)),
+ rgb_color,
+ line_width)
class PageCrop:
'Apply nup4 line guides onto new_page.'
if arg_analyze:
new_page.draw_borders((0.5, 1.0, 1.0))
- new_page.draw_lines(
- ((0, new_page.box['top']/2,
- new_page.box['right'], new_page.box['top']/2),
- (new_page.box['right']/2, new_page.box['top'],
- new_page.box['right']/2, new_page.box['bottom'])),
- line_width=0.1)
+ new_page.draw_orth_lines(((True, new_page.box['top']/2),
+ (False, new_page.box['right']/2)),
+ line_width=0.1)
printable_offset_x = nup4_geometry.margin
printable_offset_y = nup4_geometry.margin * A4_HEIGHT / A4_WIDTH
new_page.scale(nup4_geometry.shrink_for_margin)
x_left_spine_limit = A4_WIDTH/2 * nup4_geometry.shrink_for_spine
x_right_spine_limit = A4_WIDTH - x_left_spine_limit
if arg_analyze:
- new_page.draw_lines(
- ((x_left_spine_limit, A4_HEIGHT, x_left_spine_limit, 0),
- (x_right_spine_limit, A4_HEIGHT, x_right_spine_limit, 0)),
- line_width=0.1, rgb_color=(1.0, 0.5, 1.0))
+ new_page.draw_orth_lines(((False, x_left_spine_limit,),
+ (False, x_right_spine_limit)),
+ line_width=0.1, rgb_color=(1.0, 0.5, 1.0))
if is_front_page:
draw_cut(new_page, x_left_spine_limit, 1)
draw_cut(new_page, x_right_spine_limit, -1)