Setsunapux's picture
Create app.py
63bc624 verified
Raw
History Blame Contribute Delete
2.67 kB
import gradio as gr
import subprocess
import os
import shutil
def kompres_pdf(input_file, tingkat_kompresi):
if input_file is None:
return None, "Silakan unggah file PDF terlebih dahulu."
input_path = input_file.name
output_path = "hasil_kompresi.pdf"
# Pemetaan kualitas kompresi
kualitas_map = {
"Sangat Kecil (Resolusi Layar/Web)": '/screen',
"Kecil (Kualitas Ebook)": '/ebook',
"Sedang (Kualitas Printer)": '/printer',
"Bagus (Kualitas Prepress)": '/prepress',
"Bawaan (Default)": '/default'
}
kualitas_gs = kualitas_map[tingkat_kompresi]
perintah_gs = [
"gs",
"-sDEVICE=pdfwrite",
"-dCompatibilityLevel=1.4",
f"-dPDFSETTINGS={kualitas_gs}",
"-dNOPAUSE",
"-dQUIET",
"-dBATCH",
f"-sOutputFile={output_path}",
input_path
]
try:
# Jalankan Ghostscript
subprocess.run(perintah_gs, check=True)
# Hitung ukuran file
ukuran_awal = os.path.getsize(input_path) / (1024 * 1024)
ukuran_akhir = os.path.getsize(output_path) / (1024 * 1024)
pesan = f"Sukses! Ukuran Awal: {ukuran_awal:.2f} MB ➡️ Ukuran Akhir: {ukuran_akhir:.2f} MB"
return output_path, pesan
except Exception as e:
return None, f"Terjadi kesalahan: {str(e)}"
# Membuat Tampilan Web dengan Gradio
with gr.Blocks(title="Kompres PDF Gratis") as app:
gr.Markdown("# 🗜️ Kompres PDF Gratis 100%")
gr.Markdown("Kecilkan ukuran file PDF Anda tanpa kehilangan teks aslinya. Aman, gratis, dan cepat!")
with gr.Row():
with gr.Column():
file_input = gr.File(label="Unggah File PDF", file_types=[".pdf"])
opsi_kompresi = gr.Radio(
choices=[
"Sangat Kecil (Resolusi Layar/Web)",
"Kecil (Kualitas Ebook)",
"Sedang (Kualitas Printer)",
"Bagus (Kualitas Prepress)",
"Bawaan (Default)"
],
value="Sangat Kecil (Resolusi Layar/Web)",
label="Pilih Tingkat Kompresi"
)
tombol_kompres = gr.Button("Kompres Sekarang!", variant="primary")
with gr.Column():
file_output = gr.File(label="Hasil Kompresi (Siap Diunduh)")
teks_status = gr.Textbox(label="Status", interactive=False)
tombol_kompres.click(
fn=kompres_pdf,
inputs=[file_input, opsi_kompresi],
outputs=[file_output, teks_status]
)
app.launch()