""" Crea 3 documenti fittizi con date in formato italiano per testare il tab "Datazione Documenti" di GraphoLab. Output: data/samples/doc_lettera_1998.png — data: 3 marzo 1998 data/samples/doc_contratto_2001.png — data: 15/06/2001 data/samples/doc_testamento_2024.png — data: 10 gennaio 2024 Ordinamento atteso nella tab: 1998 → 2001 → 2024 """ from pathlib import Path from PIL import Image, ImageDraw, ImageFont ROOT = Path(__file__).parent.parent OUT_DIR = ROOT / "data" / "samples" FONTS_DIR = Path("C:/Windows/Fonts") PAGE_W, PAGE_H = 1200, 900 MARGIN = 80 BG = (255, 255, 255) INK = (30, 30, 30) GRAY = (120, 120, 120) def load_font(name: str, size: int) -> ImageFont.FreeTypeFont: for path in [name, str(FONTS_DIR / name)]: try: return ImageFont.truetype(path, size) except (IOError, OSError): pass return ImageFont.load_default() def new_canvas() -> tuple[Image.Image, ImageDraw.ImageDraw]: img = Image.new("RGB", (PAGE_W, PAGE_H), BG) draw = ImageDraw.Draw(img) # bordo sottile draw.rectangle([10, 10, PAGE_W - 11, PAGE_H - 11], outline=(200, 200, 200), width=2) return img, draw def draw_text_block(draw: ImageDraw.ImageDraw, text: str, font: ImageFont.FreeTypeFont, x: int, y: int, max_w: int, fill=INK, align="left") -> int: """Disegna testo con a capo automatico. Restituisce la y finale.""" words = text.split() line = "" lines = [] for word in words: test = (line + " " + word).strip() bbox = draw.textbbox((0, 0), test, font=font) if bbox[2] - bbox[0] > max_w and line: lines.append(line) line = word else: line = test if line: lines.append(line) line_h = font.size + 6 for ln in lines: if align == "right": bbox = draw.textbbox((0, 0), ln, font=font) lw = bbox[2] - bbox[0] draw.text((x + max_w - lw, y), ln, font=font, fill=fill) else: draw.text((x, y), ln, font=font, fill=fill) y += line_h return y # ────────────────────────────────────────────── # Documento 1: Lettera formale — 3 marzo 1998 # ────────────────────────────────────────────── def create_lettera(path: Path) -> None: img, draw = new_canvas() font_h = load_font("Inkfree.ttf", 28) font_b = load_font("Inkfree.ttf", 20) font_sm = load_font("Inkfree.ttf", 17) font_dt = load_font("Inkfree.ttf", 22) x0 = MARGIN max_w = PAGE_W - 2 * MARGIN # Data in alto a destra draw.text((PAGE_W - MARGIN, MARGIN), "3 marzo 1998", font=font_dt, fill=INK, anchor="ra") # Mittente y = MARGIN draw.text((x0, y), "Dott. Mario Bianchi", font=font_b, fill=INK) y += 28 draw.text((x0, y), "Via Roma 14, 20121 Milano", font=font_sm, fill=GRAY) y += 70 # Intestazione draw.text((x0, y), "LETTERA RACCOMANDATA", font=font_h, fill=INK) y += 50 draw.line([(x0, y), (PAGE_W - MARGIN, y)], fill=(180, 180, 180), width=1) y += 20 # Destinatario draw.text((x0, y), "Egregio Avv. Luigi Ferri", font=font_b, fill=INK) y += 28 draw.text((x0, y), "Studio Legale Ferri & Associati", font=font_sm, fill=GRAY) y += 28 draw.text((x0, y), "Corso Vittorio Emanuele 88, 00186 Roma", font=font_sm, fill=GRAY) y += 50 # Corpo lettera corpo = ( "Con la presente mi pregio di informarLa che, in seguito alla nostra riunione " "del mese scorso, ho provveduto a raccogliere tutta la documentazione necessaria " "relativa alla pratica in oggetto. Allego pertanto le copie dei contratti stipulati " "nonché le ricevute di pagamento degli ultimi tre anni fiscali. " "Resto a Sua completa disposizione per qualsiasi chiarimento." ) y = draw_text_block(draw, corpo, font_sm, x0, y, max_w) y += 30 draw.text((x0, y), "Distinti saluti,", font=font_sm, fill=INK) y += 30 draw.text((x0, y), "Mario Bianchi", font=font_b, fill=INK) y += 28 draw.line([(x0, y), (x0 + 200, y)], fill=INK, width=1) img.save(path, "PNG") print(f" Creato: {path.name}") # ────────────────────────────────────────────── # Documento 2: Contratto di vendita — 15/06/2001 # ────────────────────────────────────────────── def create_contratto(path: Path) -> None: img, draw = new_canvas() font_h = load_font("segoesc.ttf", 26) font_b = load_font("segoesc.ttf", 19) font_sm = load_font("segoesc.ttf", 16) font_dt = load_font("segoesc.ttf", 21) x0 = MARGIN max_w = PAGE_W - 2 * MARGIN y = MARGIN # Titolo centrato title = "CONTRATTO DI COMPRAVENDITA IMMOBILIARE" bbox = draw.textbbox((0, 0), title, font=font_h) tw = bbox[2] - bbox[0] draw.text(((PAGE_W - tw) // 2, y), title, font=font_h, fill=INK) y += 50 # Data e luogo draw.text((x0, y), "Luogo e data: Torino, 15/06/2001", font=font_dt, fill=INK) y += 45 draw.line([(x0, y), (PAGE_W - MARGIN, y)], fill=(160, 160, 160), width=2) y += 25 # Parti contraenti draw.text((x0, y), "TRA", font=font_b, fill=GRAY) y += 28 draw.text((x0, y), "Sig. Carlo Esposito (venditore), C.F. ESPCRL60M15F205X", font=font_sm, fill=INK) y += 25 draw.text((x0, y), "E", font=font_b, fill=GRAY) y += 28 draw.text((x0, y), "Sig.ra Anna De Luca (acquirente), C.F. DLCNNA72E55L219Q", font=font_sm, fill=INK) y += 40 # Articoli articoli = [ ("Art. 1 — Oggetto", "Il venditore cede all'acquirente l'immobile sito in Via Garibaldi 5, Torino, " "catastalmente identificato al Foglio 12, Particella 340, sub 8."), ("Art. 2 — Prezzo", "Il prezzo pattuito ammonta a lire 280.000.000 (duecentoottantamilioni), " "già interamente corrisposto alla data di firma del presente atto."), ("Art. 3 — Consegna", "La consegna delle chiavi avverrà entro trenta giorni dalla firma, " "libero da persone e cose."), ] for titolo, testo in articoli: draw.text((x0, y), titolo, font=font_b, fill=INK) y += 26 y = draw_text_block(draw, testo, font_sm, x0 + 20, y, max_w - 20) y += 15 y += 20 col1, col2 = x0, PAGE_W // 2 draw.text((col1, y), "Il venditore", font=font_sm, fill=GRAY) draw.text((col2, y), "L'acquirente", font=font_sm, fill=GRAY) y += 50 draw.line([(col1, y), (col1 + 200, y)], fill=INK, width=1) draw.line([(col2, y), (col2 + 200, y)], fill=INK, width=1) img.save(path, "PNG") print(f" Creato: {path.name}") # ────────────────────────────────────────────── # Documento 3: Testamento olografo — 10 gennaio 2024 # ────────────────────────────────────────────── def create_testamento(path: Path) -> None: img, draw = new_canvas() font_h = load_font("segoepr.ttf", 26) font_b = load_font("segoepr.ttf", 20) font_sm = load_font("segoepr.ttf", 17) font_dt = load_font("segoepr.ttf", 20) x0 = MARGIN max_w = PAGE_W - 2 * MARGIN y = MARGIN # Titolo title = "TESTAMENTO OLOGRAFO" bbox = draw.textbbox((0, 0), title, font=font_h) tw = bbox[2] - bbox[0] draw.text(((PAGE_W - tw) // 2, y), title, font=font_h, fill=INK) y += 55 draw.line([(x0, y), (PAGE_W - MARGIN, y)], fill=(180, 180, 180), width=1) y += 25 # Testatore draw.text((x0, y), "Io sottoscritta, Giovanna Mancini, nata a Napoli il 12 aprile 1942,", font=font_sm, fill=INK) y += 28 draw.text((x0, y), "residente in Via Caracciolo 22, 80122 Napoli, nel pieno possesso", font=font_sm, fill=INK) y += 28 draw.text((x0, y), "delle mie facoltà mentali, dispongo delle mie ultime volontà:", font=font_sm, fill=INK) y += 45 # Disposizioni disposizioni = [ "1. Lascio al mio figlio primogenito, Dott. Roberto Mancini, " "l'appartamento di Via Caracciolo 22 e tutti i beni mobili ivi contenuti.", "2. Lascio alla mia nipote Sara Mancini la somma di euro 50.000 (cinquantamila) " "depositata sul conto corrente n. 123456 presso la Banca di Napoli.", "3. Il residuo del mio patrimonio dovrà essere suddiviso in parti uguali " "tra i miei tre figli: Roberto, Elena e Marco Mancini.", "4. Nomino esecutore testamentario il Notaio Dott. Enzo Vitale, " "con studio in Via Toledo 80, Napoli.", ] for d in disposizioni: y = draw_text_block(draw, d, font_sm, x0, y, max_w) y += 18 y += 30 # Data in basso — font più grande e left-aligned per facilitare l'OCR font_dt2 = load_font("segoepr.ttf", 26) draw.text((x0, y), "Napoli, 10 gennaio 2024", font=font_dt2, fill=INK) y += 50 draw.text((x0, y), "Firma autografa:", font=font_sm, fill=GRAY) y += 35 draw.line([(x0, y), (x0 + 250, y)], fill=INK, width=1) y += 10 draw.text((x0, y), "Giovanna Mancini", font=font_b, fill=INK) img.save(path, "PNG") print(f" Creato: {path.name}") if __name__ == "__main__": OUT_DIR.mkdir(parents=True, exist_ok=True) print("Generazione documenti fittizi con date...") create_lettera(OUT_DIR / "doc_lettera_1998.png") create_contratto(OUT_DIR / "doc_contratto_2001.png") create_testamento(OUT_DIR / "doc_testamento_2024.png") print("Fatto. Carica i 3 file nel tab 'Datazione Documenti' di GraphoLab.")