Spaces:
Sleeping
Sleeping
| import os | |
| import json | |
| import logging | |
| import pdfplumber | |
| import docx | |
| from fpdf import FPDF | |
| def save_to_json(data, filename): | |
| try: | |
| with open(filename, "w", encoding="utf-8") as f: | |
| json.dump(data, f, ensure_ascii=False, indent=2) | |
| except Exception as e: | |
| logging.error(f"Failed to save data to {filename}: {e}") | |
| def load_from_json(filename, default_dict): | |
| if os.path.exists(filename): | |
| try: | |
| with open(filename, "r", encoding="utf-8") as f: | |
| loaded_data = json.load(f) | |
| default_dict.update(loaded_data) | |
| except Exception as e: | |
| logging.error(f"Could not load data from {filename}: {e}") | |
| return default_dict | |
| def extract_text_from_file(file_path: str) -> str: | |
| ext = file_path.rsplit('.', 1)[-1].lower() | |
| if ext == "pdf": | |
| with pdfplumber.open(file_path) as pdf: | |
| return ''.join([p.extract_text() for p in pdf.pages if p.extract_text()]) | |
| elif ext == "docx": | |
| doc = docx.Document(file_path) | |
| return ' '.join([para.text for para in doc.paragraphs]) | |
| elif ext == "txt": | |
| with open(file_path, 'r', encoding='utf-8') as f: | |
| return f.read() | |
| else: | |
| raise ValueError("Unsupported file type.") | |
| def save_as_txt(content, filename, output_folder): | |
| path = os.path.join(output_folder, filename) | |
| with open(path, 'w', encoding='utf-8') as f: | |
| f.write(content) | |
| return path | |
| def save_as_pdf(content, filename, output_folder): | |
| pdf = FPDF() | |
| pdf.add_page() | |
| pdf.set_font("Arial", size=12) | |
| for line in content.split('\n'): | |
| if line.strip(): | |
| pdf.multi_cell(0, 10, line.strip()) | |
| pdf.ln(2) | |
| path = os.path.join(output_folder, filename) | |
| pdf.output(path) | |
| return path |