""" Generator PSD - Pudelko na pieniadze z zyczeniami na Komunie (Kielich). Makieta A3 z panelami: - DL: od_kogo, naglowek, zyczenia - DP: imie, data, tytul Format daty w szablonie: "DD.MM.RRRR" (standardowy). Wymaga: uruchomiony Adobe Photoshop, photoshop-python-api. """ import argparse import os import photoshop.api as ps PROJEKT_DIR = os.path.join( r"d:\pomysloweprezenty.pl\projekty\komunia święta - pudełka na pieniądze", "Pudełko na pieniądze z życzeniami na Komunie Świętą - Kielich", ) SZABLON_PATH = os.path.join(PROJEKT_DIR, "pudełka na chrzest - makieta A3 CMYK.psd") GOTOWE_DIR = os.path.join(PROJEKT_DIR, "_gotowe") def set_text(layer, new_text): """Zmienia tekst warstwy zachowujac srodek bounding boxa (centrowane warstwy).""" b = [float(x) for x in layer.bounds] cx, cy = (b[0] + b[2]) / 2, (b[1] + b[3]) / 2 layer.textItem.contents = new_text b2 = [float(x) for x in layer.bounds] cx2, cy2 = (b2[0] + b2[2]) / 2, (b2[1] + b2[3]) / 2 dx, dy = cx - cx2, cy - cy2 if dx or dy: layer.translate(dx, dy) def set_layer_text(container, layer_name, new_text): if new_text is None: return layer = container.artLayers[layer_name] old = layer.textItem.contents set_text(layer, new_text) print(f' {layer_name}: "{old[:30]}..." -> "{new_text[:40]}..."') def generate(klient, imie, data, od_kogo, zyczenia=None, naglowek=None, tytul=None): os.makedirs(GOTOWE_DIR, exist_ok=True) output_path = os.path.join(GOTOWE_DIR, f"{klient}.psd") app = ps.Application() doc = app.open(SZABLON_PATH) print(f"Otwarto szablon: {doc.name}") try: dl = doc.layerSets["DL"] print(" [DL] zyczenia:") set_layer_text(dl, "od_kogo", od_kogo) set_layer_text(dl, "naglowek", naglowek) set_layer_text(dl, "zyczenia", zyczenia) dp = doc.layerSets["DP"] print(" [DP] imie/data/tytul:") set_layer_text(dp, "imie", imie) set_layer_text(dp, "data", data) set_layer_text(dp, "tytul", tytul) psd_opts = ps.PhotoshopSaveOptions() doc.saveAs(output_path, psd_opts, True) print(f"Zapisano: {output_path}") finally: app.activeDocument.close(ps.SaveOptions.DoNotSaveChanges) print("Gotowe!") return output_path def main(): parser = argparse.ArgumentParser(description="Generator PSD - Pudelko komunia, Kielich") parser.add_argument("--klient", required=True, help="Nazwa pliku wyjsciowego") parser.add_argument("--imie", required=True, help="Imie dziecka (odmienione, np. Jakuba)") parser.add_argument("--data", required=True, help='Data komunii, format "DD.MM.RRRR" (np. 18.05.2026)') parser.add_argument("--od-kogo", dest="od_kogo", required=True, help="Od kogo (np. Matka Chrzestna z rodziną)") parser.add_argument("--zyczenia", default=None, help="Tresc zyczen (opcjonalnie, domyslnie z szablonu)") parser.add_argument("--naglowek", default=None, help='Naglowek (opcjonalnie, domyslnie "Z najlepszymi życzeniami")') parser.add_argument("--tytul", default=None, help='Tytul (opcjonalnie, domyslnie "Pamiątka I Komunii Świętej")') args = parser.parse_args() generate( klient=args.klient, imie=args.imie, data=args.data, od_kogo=args.od_kogo, zyczenia=args.zyczenia, naglowek=args.naglowek, tytul=args.tytul, ) if __name__ == "__main__": main()