Advertisement
RedstoneHair

CBZ to PDF converter

Jun 8th, 2025 (edited)
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.12 KB | None | 0 0
  1. import os
  2. import sys
  3. import zipfile
  4. import shutil
  5. from PIL import Image
  6. from PyPDF2 import PdfMerger
  7. from slashr import SlashR
  8.  
  9. sr = None
  10.  
  11. DIR = "" or (
  12.     sys.argv[1]
  13.     if len(sys.argv) > 1 and os.path.isdir(sys.argv[1])
  14.     else input("Directory: ")
  15. )
  16.  
  17. def progress(done: int, total: int):
  18.     sr.print(f"{done} / {total}")
  19.  
  20. def handle_file(path):
  21.     if not path.lower().endswith(".cbz"):
  22.         return
  23.     print(f"PROCESS {os.path.basename(path)}")
  24.     temp_dir = os.path.join(DIR, "temp")
  25.     pdf_dir = os.path.join(DIR, "temp_pdfs")
  26.     if os.path.exists(temp_dir):
  27.         shutil.rmtree(temp_dir)
  28.     if os.path.exists(pdf_dir):
  29.         shutil.rmtree(pdf_dir)
  30.     os.makedirs(temp_dir)
  31.     os.makedirs(pdf_dir)
  32.     with zipfile.ZipFile(path, 'r') as zip_ref:
  33.         file_list = zip_ref.namelist()
  34.         total_steps = len(file_list) * 2 + 1
  35.         for i, file in enumerate(file_list):
  36.             zip_ref.extract(file, temp_dir)
  37.             progress(i + 1, total_steps)
  38.     images = sorted([
  39.         os.path.join(temp_dir, f)
  40.         for f in os.listdir(temp_dir)
  41.         if f.lower().endswith((".png", ".jpg", ".jpeg", ".bmp", ".webp"))
  42.     ])
  43.     if images:
  44.         pdf_paths = []
  45.         for i, img_path in enumerate(images):
  46.             pdf_path = os.path.join(pdf_dir, f"{i}.pdf")
  47.             img = Image.open(img_path).convert("RGB")
  48.             img.save(pdf_path, "PDF", resolution=100.0)
  49.             img.close()
  50.             pdf_paths.append(pdf_path)
  51.             progress(len(file_list) + i + 1, total_steps)
  52.         merger = PdfMerger()
  53.         for pdf in pdf_paths:
  54.             merger.append(pdf)
  55.         out_path = os.path.splitext(path)[0] + ".pdf"
  56.         merger.write(out_path)
  57.         merger.close()
  58.         progress(total_steps - 1, total_steps)
  59.     shutil.rmtree(temp_dir)
  60.     shutil.rmtree(pdf_dir)
  61.     progress(total_steps, total_steps)
  62.  
  63. def main():
  64.     global sr
  65.     for file in os.listdir(DIR):
  66.         path = os.path.join(DIR, file)
  67.         if os.path.isfile(path):
  68.             with SlashR() as sr:
  69.                 handle_file(path)
  70.  
  71. if __name__ == "__main__":
  72.     main()
  73.  
Tags: python
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement