Skip to content
This repository was archived by the owner on May 19, 2023. It is now read-only.

Commit f41d022

Browse files
committed
Add InputFile class
1 parent 57d9718 commit f41d022

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

pdf-splitter/editor.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
from dataclasses import dataclass
22
from typing import List, Tuple
3+
from pathlib import Path
4+
import re
35

46
from PyPDF2 import PdfFileReader, PdfFileWriter
57

8+
class InputFile:
9+
def __init__(self, rawpath: str) -> None:
10+
self.path = Path(rawpath)
11+
self.abspath = self.path.as_posix()
12+
self.name = self.path.name
13+
self.id = re.match(r'^\d+', self.name).group()
14+
615
@dataclass
716
class SplitFile:
8-
filename: str
17+
name: str
918
pages: Tuple[int, int]
1019

11-
def get_range(self) -> range:
20+
def get_pages_range(self) -> range:
1221
return range(self.pages[0], self.pages[1] + 1)
1322

14-
def split_pdf(filename: str, splits: List[SplitFile]) -> None:
15-
original = PdfFileReader(filename)
23+
def split_pdf(inputfile: InputFile, splits: List[SplitFile]) -> None:
24+
original = PdfFileReader(inputfile.abspath)
1625
for split in splits:
1726
output = PdfFileWriter()
18-
for page_number in split.get_range():
27+
for page_number in split.get_pages_range():
1928
output.addPage(original.getPage(page_number))
20-
with open(f'{split.filename}.pdf', 'wb') as file:
29+
with open(f'{inputfile.id}-{split.name}', 'wb') as file:
2130
output.write(file)

pdf-splitter/main.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import argparse
22

3-
from editor import SplitFile, split_pdf
3+
from editor import InputFile, SplitFile, split_pdf
44

55
parser = argparse.ArgumentParser()
66
parser.add_argument(
7-
'filename',
7+
'filepath',
88
type=str,
9-
help='name of the input PDF file to split'
9+
help="absolute path of the input PDF file to split, or just its name if it's in the same folder"
1010
)
1111
parser.add_argument(
1212
'-s', '--split-name',
1313
action='append',
14+
required=True,
1415
help="name of a split file, it's not needed to include the extension (.pdf)"
1516
)
1617
parser.add_argument(
1718
'-p', '--page-numbers',
1819
action='append',
20+
required=True,
1921
type=int,
2022
nargs=2,
2123
help='first and last page numbers to split from the input file'
@@ -26,5 +28,6 @@
2628
if len(args.page_numbers) != len(args.split_name):
2729
raise argparse.ArgumentTypeError('specify the same number of page ranges as the number of splits.')
2830

29-
splits = [SplitFile(name, pages) for name, pages in zip(args.split_name, args.page_numbers)]
30-
split_pdf(args.filename, splits)
31+
inputfile = InputFile(args.filepath)
32+
splits = [SplitFile(f'{name}.pdf', pages) for name, pages in zip(args.split_name, args.page_numbers)]
33+
split_pdf(inputfile, splits)

0 commit comments

Comments
 (0)