import gradio as gr from PIL import Image import os from typing import List from pdfitdown import convert_file from pdf2image import convert_from_path def convert_readme_to_pdf(markdown_file) -> str: output_path = markdown_file.name.replace('.md', '.pdf') convert_file(markdown_file.name, output_path) return output_path def convert_image_to_pdf(image_file) -> str: # Open image and convert to PDF output_path = image_file.name.replace(os.path.splitext(image_file.name)[1], '.pdf') image = Image.open(image_file.name) if image.mode == 'RGBA': image = image.convert('RGB') image.save(output_path, 'PDF') return output_path def convert_pdf_to_images(pdf_file) -> List[Image.Image]: # Convert PDF to list of images images = convert_from_path(pdf_file.name) return images # Create individual interfaces readme_to_pdf = gr.Interface( fn=convert_readme_to_pdf, inputs=gr.File(label="Upload README/Markdown file", file_types=[".md"]), outputs=gr.File(label="Converted PDF"), title="README to PDF Converter", description="Convert your markdown files to PDF format" ) image_to_pdf = gr.Interface( fn=convert_image_to_pdf, inputs=gr.File(label="Upload Image", file_types=["image"]), outputs=gr.File(label="Converted PDF"), title="Image to PDF Converter", description="Convert your images to PDF format" ) pdf_to_images = gr.Interface( fn=convert_pdf_to_images, inputs=gr.File(label="Upload PDF", file_types=[".pdf"]), outputs=gr.Gallery(label="Converted Images"), title="PDF to Images Converter", description="Convert your PDF to a series of images" ) # Create tabbed interface demo = gr.TabbedInterface( [readme_to_pdf, image_to_pdf, pdf_to_images], ["README to PDF", "Image to PDF", "PDF to Images"], title="File Conversion Tools" ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860, debug=True)