Spaces:
Sleeping
Sleeping
File size: 1,909 Bytes
6e142db 9507aff 6e142db 9507aff 6e142db 2ebf3c4 6e142db | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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() |