iamtatsuki05's picture
Synced repo using 'sync_with_huggingface' Github Action
514c4e1 verified
raw
history blame
2.57 kB
import tempfile
from pathlib import Path
import streamlit as st
from unlock_pdf_password.unlock_pdf_password import unlock_pdf, unlock_pdf_password
def app():
st.title("PDF Unlocker")
uploaded_file = st.file_uploader("Upload your PDF", type="pdf")
password_length = st.number_input(
"Enter maximum password length:", min_value=1, value=4
)
password_start_length = st.number_input(
"Enter starting password length:", min_value=0, value=0
)
password_in_number = st.checkbox("Include numbers", True)
password_in_lower = st.checkbox("Include lowercase letters", True)
password_in_upper = st.checkbox("Include uppercase letters", True)
password_in_sign = st.checkbox("Include special characters", True)
if st.button("Unlock PDF"):
if uploaded_file is None:
st.error("Please upload a PDF file.")
else:
with tempfile.NamedTemporaryFile(
delete=False, suffix=".pdf"
) as temp_input_file:
temp_input_file.write(uploaded_file.getvalue())
input_pdf_path = temp_input_file.name
password = unlock_pdf_password(
input_pdf_path=input_pdf_path,
password_length=password_length,
password_start_length=password_start_length,
password_in_number=password_in_number,
password_in_lower=password_in_lower,
password_in_upper=password_in_upper,
password_in_sign=password_in_sign,
)
if password:
result = unlock_pdf(
input_pdf_path=input_pdf_path,
password=password,
output_pdf_path=None,
)
if result:
st.success(f"PDF unlocked successfully! Password: {password}")
with tempfile.NamedTemporaryFile(
delete=False, suffix=".pdf"
) as temp_output_file:
result.save(temp_output_file.name)
with open(temp_output_file.name, 'rb') as f:
pdf_bytes = f.read()
st.download_button(
label="Download unlocked PDF",
data=pdf_bytes,
file_name=f"unlocked_{Path(input_pdf_path).name}",
mime="application/octet-stream",
)
else:
st.error("Failed to unlock PDF.")
else:
st.error("Password not found.")
if __name__ == "__main__":
app()