# some general paper geometry constants
POINTS_PER_CM = 10 * 72 / 25.4
-A4_WIDTH = 21 * POINTS_PER_CM
-A4_HEIGHT = 29.7 * POINTS_PER_CM
+A4_HEIGHT_CM = 29.7
+A4_HEIGHT = A4_HEIGHT_CM * POINTS_PER_CM
+A4_WIDTH_CM = 21
+A4_WIDTH = A4_WIDTH_CM * POINTS_PER_CM
A4 = (A4_WIDTH, A4_HEIGHT)
# constants specifically for --nup4
self,
pypdf_page: PdfPage
) -> None:
- self._pypdf = pypdf_page
+ self.pypdf = pypdf_page
self.set_box()
self.crop = PageCrop()
self
) -> dict[str, float]:
'Return dict of mediabox measures.'
- return {direction: getattr(self._pypdf.mediabox, direction)
+ return {direction: getattr(self.pypdf.mediabox, direction)
for direction in ('left', 'bottom', 'right', 'top')}
def set_box(
) -> None:
'Set mediabox (and cropbox) measures.'
if left is not None:
- self._pypdf.mediabox.left = left
+ self.pypdf.mediabox.left = left
if bottom is not None:
- self._pypdf.mediabox.bottom = bottom
+ self.pypdf.mediabox.bottom = bottom
if right is not None:
- self._pypdf.mediabox.right = right
+ self.pypdf.mediabox.right = right
if top is not None:
- self._pypdf.mediabox.top = top
- self._pypdf.cropbox = self._pypdf.mediabox
+ self.pypdf.mediabox.top = top
+ self.pypdf.cropbox = self.pypdf.mediabox
@classmethod
def new_blank(
writer: PdfWriter
) -> None:
'Add self to writer.'
- writer.add_page(self._pypdf)
+ writer.add_page(self.pypdf)
def merge_page(
self,
page: Self
) -> None:
'Merge page .to self.'
- self._pypdf.merge_page(page._pypdf)
+ self.pypdf.merge_page(page.pypdf)
def rotation(
self
) -> Optional[int]:
'Return PDF /Rotate instruction.'
- return self._pypdf.get(ROTATE_COMMAND, None)
+ return self.pypdf.get(ROTATE_COMMAND, None)
def rotate(self,
degrees: int
) -> None:
'Wrap PdfTransformation.rotate.'
- self._pypdf.add_transformation(PdfTransformation().rotate(degrees))
+ self.pypdf.add_transformation(PdfTransformation().rotate(degrees))
def translate(
self,
ty: float = 0.0
) -> None:
'Wrap PdfTransformation.translate.'
- self._pypdf.add_transformation(PdfTransformation().translate(tx, ty))
+ self.pypdf.add_transformation(PdfTransformation().translate(tx, ty))
def scale(
self,
zoom: float
) -> None:
'Wrap PdfTransformation.scale.'
- self._pypdf.add_transformation(PdfTransformation().scale(zoom, zoom))
+ self.pypdf.add_transformation(PdfTransformation().scale(zoom, zoom))
def draw_lines(
self,
line_width: float = 2.0,
) -> None:
'Draw lines.'
- min_x, min_y, max_x, max_y = self._pypdf.mediabox
+ min_x, min_y, max_x, max_y = self.pypdf.mediabox
packet = BytesIO()
c = Canvas(packet, pagesize=(max_x - min_x, max_y - min_y))
c.setLineWidth(line_width)
for line in lines:
c.line(line[0], line[1], line[2], line[3])
c.save()
- self._pypdf.merge_page(PdfReader(packet).pages[0])
+ self.pypdf.merge_page(PdfReader(packet).pages[0])
def draw_orth_lines(
self,
line_width: float = 2.0,
) -> None:
'Draw horizontal or vertical lines.'
- min_x, min_y, max_x, max_y = self._pypdf.mediabox
+ min_x, min_y, max_x, max_y = self.pypdf.mediabox
full_lines: list[tuple[float, float, float, float]] = []
for is_horizontal, position in lines:
if is_horizontal:
line_width: float = 4.0,
) -> None:
'Draw border lines around mediabox.'
- min_x, min_y, max_x, max_y = self._pypdf.mediabox
+ min_x, min_y, max_x, max_y = self.pypdf.mediabox
self.draw_orth_lines(
((False, min_x), (True, min_y), (False, max_x), (True, max_y)),
rgb_color,
args: ArgsNamespace
) -> None:
'Check command args against general syntax expectations.'
-
+ arg_char = '?'
try:
if args.page_range:
arg_char = 'p'
def finalize(
self,
- output_filename,
+ output_filename: str,
) -> None:
'Close inputs, write output.'
for file in self._opened_files: