PDF2PNG / app.py
stzhao's picture
Update app.py
ed6d2dd verified
import gradio as gr
import fitz # PyMuPDF
from PIL import Image
import os
def pdf_to_png(pdf_file, dpi=300):
# Open the PDF file
pdf_document = fitz.open(pdf_file)
# Create a temporary directory to store the PNG files
output_folder = "temp_output_images"
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# List to store the paths of the generated PNG files
png_files = []
# Iterate through each page in the PDF
for page_num in range(len(pdf_document)):
# Get the page
page = pdf_document.load_page(page_num)
# Render the page to a Pixmap with the specified DPI
pix = page.get_pixmap(matrix=fitz.Matrix(dpi/72, dpi/72))
# Convert the Pixmap to a PIL Image
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
# Save the image as a PNG file
output_path = os.path.join(output_folder, f"page_{page_num + 1}.png")
img.save(output_path, "PNG")
png_files.append(output_path)
return png_files
# Define the Gradio interface
iface = gr.Interface(
fn=pdf_to_png,
inputs=[
gr.File(label="Upload PDF file"),
gr.Slider(minimum=72, maximum=600, value=300, step=1, label="DPI")
],
outputs=[gr.Gallery(label="Converted PNG Images")],
title="PDF to PNG Converter",
description="Upload a PDF file and convert each page to a PNG image."
)
# Launch the Gradio interface
iface.launch()