Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| from PIL import Image | |
| import fitz # PyMuPDF | |
| from docx2pdf import convert | |
| def convert_to_pdf(file): | |
| pdf_document = fitz.open() | |
| if file.name.endswith('.docx'): | |
| # docx2pdfを使用してdocxファイルをPDFに変換 | |
| pdf_path = file.name.replace('.docx', '.pdf') | |
| convert(file.name, pdf_path) | |
| existing_pdf = fitz.open(pdf_path) | |
| for page in existing_pdf: | |
| pdf_document.insert_pdf(existing_pdf, from_page=page.number, to_page=page.number) | |
| elif file.name.endswith('.xlsx'): | |
| df = pd.read_excel(file.name, engine='openpyxl') | |
| text = df.to_string(index=False) | |
| pdf_page = pdf_document.new_page() | |
| pdf_page.insert_text((72, 72), text) | |
| elif file.name.endswith('.png') or file.name.endswith('.jpg') or file.name.endswith('.jpeg'): | |
| img = Image.open(file.name) | |
| img_byte_arr = img.tobytes() | |
| pdf_page = pdf_document.new_page(width=img.width, height=img.height) | |
| pdf_page.insert_image(fitz.Rect(0, 0, img.width, img.height), stream=img_byte_arr) | |
| elif file.name.endswith('.pdf'): | |
| existing_pdf = fitz.open(file.name) | |
| for page in existing_pdf: | |
| pdf_document.insert_pdf(existing_pdf, from_page=page.number, to_page=page.number) | |
| return pdf_document | |
| def merge_pdfs(files): | |
| merged_pdf = fitz.open() | |
| for file in files: | |
| pdf_document = convert_to_pdf(file) | |
| merged_pdf.insert_pdf(pdf_document) | |
| output_path = "merged_output.pdf" | |
| merged_pdf.save(output_path) | |
| return output_path | |
| def main(files): | |
| output_path = merge_pdfs(files) | |
| return output_path | |
| iface = gr.Interface( | |
| fn=main, | |
| inputs=gr.File(file_count="multiple"), | |
| outputs=gr.File(), | |
| title="File Merger to PDF", | |
| description="Upload Word, Excel, Image or PDF files to merge them into a single PDF." | |
| ) | |
| iface.launch() |