Skip to content

Instantly share code, notes, and snippets.

@onhernandes
Created September 17, 2024 02:47
Show Gist options
  • Save onhernandes/c910226402aa88e875feccee8ae6c2cb to your computer and use it in GitHub Desktop.
Save onhernandes/c910226402aa88e875feccee8ae6c2cb to your computer and use it in GitHub Desktop.
Merge Manga PDFs as volumes
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