Add X_main.py
funcional bucle while x50 a PDF
This commit is contained in:
parent
4edf39d763
commit
41cefd5846
111
X_main.py
Normal file
111
X_main.py
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#
|
||||||
|
# (entorn_A3) GNUstavo:~/codi/targeta_visita$ for i in {1..50}; do python3 X_main.py && sleep 3 ; done
|
||||||
|
# # inspirat en targeta de visita del carlos
|
||||||
|
#
|
||||||
|
# # NOM del Programa: LITOS 13 Planetes .PY
|
||||||
|
#
|
||||||
|
# WEB dissenyador https://carlosmxercavinsportafoli.wordpress.com/sobre-mi/
|
||||||
|
#
|
||||||
|
# ALGO AIXÍ,
|
||||||
|
# PROGRAMA QUE sobre catifa de caràcters base64 (emulant el clàssic joc de la sopa de lletres)
|
||||||
|
# AGAFA strings per pantalla o fitxer per defecte
|
||||||
|
# 3 VARIABLES: HOST, e-correu, telefon
|
||||||
|
# 13 paraules_clau, sintagmes que sintetitzin allò que hi vulguis camuflar, més base64? ;)
|
||||||
|
#
|
||||||
|
# buscar a la carpeta on s'executa una template.svg creada prèviament en InkScape després de posar text ràndom (README.md per a exemples, etc)
|
||||||
|
#
|
||||||
|
# escupir la template modificada_YYYYMMDD_.svg
|
||||||
|
#
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import datetime
|
||||||
|
import shutil
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
# definir aguments de línia de comandes
|
||||||
|
parser = argparse.ArgumentParser(description="transforma svg de template substituint variables i camuflant strings")
|
||||||
|
parser.add_argument("-t", "--template", type=str, default="template_base64.svg", help="necessites plantilla d'svg")
|
||||||
|
parser.add_argument("-p", "--pile", type=str, default="cadenes_usuari.txt", help="txt on poses paraules_clau, sintagmes, etc")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# el fitxer de pila de paraules
|
||||||
|
cadenes_fitxer = args.pile
|
||||||
|
cadenes_usuari = []
|
||||||
|
if os.path.exists(cadenes_fitxer):
|
||||||
|
with open(cadenes_fitxer, "r", encoding="utf-8") as f:
|
||||||
|
cadenes_usuari = [line.strip().replace(" ", "_") for line in f.readlines() if line.strip()]
|
||||||
|
if len(cadenes_usuari) == 16:
|
||||||
|
print(f"carregades correctament 16 cadenes des de '{cadenes_fitxer}' MAKING MOVIES !!!!")
|
||||||
|
host, correu, telefon, *resta_cadenes = cadenes_usuari
|
||||||
|
cadenes_usuari = resta_cadenes
|
||||||
|
else:
|
||||||
|
print(f"'{cadenes_fitxer}' existeix, PERÒ només té {len(cadenes_usuari)} vàlides: es demanaran interactivament les cadenes que falten")
|
||||||
|
|
||||||
|
# si no hi ha 16 línies vàlides, demana les cadenes manualment
|
||||||
|
while len(cadenes_usuari) < 13:
|
||||||
|
entrada = input(f"POSA / proporciona 2nDsy+_Paraula_Clau_+B1biB {len(cadenes_usuari) + 1}/13: ").strip().replace(" ", "_")
|
||||||
|
if entrada:
|
||||||
|
cadenes_usuari.append(entrada)
|
||||||
|
|
||||||
|
# dades bàsiques complementàries si no s'han obtingut del fitxer
|
||||||
|
if len(cadenes_usuari) < 13:
|
||||||
|
host = input("quin nom de HOST ").strip().replace(" ", "_")
|
||||||
|
correu = input("quin correu de contacte ").strip().replace(" ", "_")
|
||||||
|
telefon = input("quin telèfon ").strip().replace(" ", "_")
|
||||||
|
|
||||||
|
# test si el fitxer de plantilla existeix
|
||||||
|
if not os.path.exists(args.template):
|
||||||
|
print(f"ERROR -- no s'ha trobat arxiu de plantilla '{args.template}'")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# crear marca de temps per al nom del nou fitxer
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
nom_nou = f"{now.strftime('%H%M%S_%Y%m%d')}_{os.path.basename(args.template).replace('.svg', '_modificada.svg')}"
|
||||||
|
shutil.copy(args.template, nom_nou)
|
||||||
|
|
||||||
|
# processar el fitxer SVG
|
||||||
|
tree = ET.parse(nom_nou)
|
||||||
|
root = tree.getroot()
|
||||||
|
|
||||||
|
# localitzar etiquetes <tspan>
|
||||||
|
tspans = root.findall(".//{http://www.w3.org/2000/svg}tspan")
|
||||||
|
|
||||||
|
# CANVIAR la primera línia HOST / e-correu
|
||||||
|
if len(tspans) > 0:
|
||||||
|
text_inicial = tspans[0].text
|
||||||
|
if text_inicial:
|
||||||
|
tspans[0].text = text_inicial.replace("{HOST}", host).replace("{e-correu}", correu)
|
||||||
|
|
||||||
|
# INSERT a la segona línia : telèfon
|
||||||
|
if len(tspans) > 1:
|
||||||
|
text_segona = tspans[1].text if tspans[1].text else ""
|
||||||
|
tspans[1].text = text_segona.replace("{telefon}", telefon)
|
||||||
|
|
||||||
|
# INSERT la resta de paraules en les següents línies
|
||||||
|
index_tspan = 2 # INIT - -- INSERT a partir de la tercera línia
|
||||||
|
for cadena in cadenes_usuari:
|
||||||
|
if index_tspan < len(tspans):
|
||||||
|
text_actual = tspans[index_tspan].text if tspans[index_tspan].text else ""
|
||||||
|
max_posicio = min(48 - len(cadena), len(text_actual)) # ajust caràcters INSERT x encaixar
|
||||||
|
if max_posicio < 1:
|
||||||
|
continue
|
||||||
|
posicio = random.randint(1, max_posicio)
|
||||||
|
|
||||||
|
# dividir el text actual en tres parts: abans, la inserció, després
|
||||||
|
text_abans = text_actual[:posicio]
|
||||||
|
text_despres = text_actual[posicio:]
|
||||||
|
|
||||||
|
# inserir la +_cadena_+ al MIG
|
||||||
|
tspans[index_tspan].text = text_abans + f'+_{cadena}_+' + text_despres
|
||||||
|
|
||||||
|
index_tspan += 1
|
||||||
|
else:
|
||||||
|
break # si no hi ha més <tspan>, parem
|
||||||
|
|
||||||
|
# DESA el nou fitxer svg
|
||||||
|
tree.write(nom_nou, encoding="utf-8", xml_declaration=True)
|
||||||
|
|
||||||
|
print(f"PERFECTE: arxiu DESAT COM ---> {nom_nou}")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user