Created
September 17, 2024 02:47
-
-
Save onhernandes/c910226402aa88e875feccee8ae6c2cb to your computer and use it in GitHub Desktop.
Merge Manga PDFs as volumes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from pypdf import PdfReader, PdfWriter | |
BASE_PATH = "" | |
def get_volumes(manga): | |
mangapath = f"{BASE_PATH}/{manga}" | |
# Get list of PDF files in the folder | |
pdf_files = [file for file in os.listdir(mangapath) if file.endswith(".pdf")] | |
# Sort the files based on chapter number | |
pdf_files.sort(key=lambda x: int(x.split(" ")[1].split(".")[0])) | |
# Split the list of PDF files into groups of 10 | |
grouped_pdf_files = [pdf_files[i : i + 10] for i in range(0, len(pdf_files), 10)] | |
return list(map(lambda chapters: Volume(manga, chapters), grouped_pdf_files)) | |
class Volume: | |
def __init__(self, manga, chapters): | |
self.manga = manga | |
self.chapters = chapters | |
self.first_chapter_filename = chapters[0] | |
self.last_chapter_filename = chapters[-1] | |
self.merged_filename = self._generate_merged_filename() | |
def _generate_merged_filename(self): | |
first_chapter_number = int( | |
self.first_chapter_filename.split(" ")[1].split(".")[0] | |
) | |
last_chapter_number = int( | |
self.last_chapter_filename.split(" ")[1].split(".")[0] | |
) | |
return ( | |
f"[{self.manga}] Chapter {first_chapter_number}-{last_chapter_number}.pdf" | |
) | |
def merge_volume(self): | |
print(f"Manga: {self.manga}") | |
print( | |
f"Starting volume with chapters from {self.first_chapter_filename} to {self.last_chapter_filename}..." | |
) | |
merged_pdf = PdfWriter() | |
merged_pdf.add_metadata({"/Author": self.manga, "/Title": self.merged_filename}) | |
for chapter_filename in self.chapters: | |
chapter = open(f"{BASE_PATH}/{self.manga}/{chapter_filename}", "rb") | |
merged_pdf.append(chapter) | |
output = open( | |
f"{BASE_PATH}/MangaVolumes/{self.manga}/{self.merged_filename}", "wb" | |
) | |
merged_pdf.write(output) | |
# Close file descriptors | |
merged_pdf.close() | |
output.close() | |
print("Done.") | |
return True | |
def main(): | |
print("teste") | |
mangas = ["Zatch Bell! 2"] | |
for manga in mangas: | |
for vol in get_volumes(manga): | |
vol.merge_volume() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment