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()