Commits
Multi-edició a punt: tickets tancats, tres bugs d'usuari i una decisió d'impremta
Matinada de tickets (03-06) amb end-to-end en verd i tres informes de l'usuari que destapen bugs d'invisibilitat, el colofó sense alçada i una decisió: els PDF de client es pinten a sobre de la plantilla, mai la reemplacen.
Dimarts de matinada i dia sencer dedicats a tancar la funcionalitat de multi-edició. La sessió venia de la nit del 26 i el pla era clar: acabar els tickets pendents i deixar-ho tot llest per validar amb material real. Al final no només va ser tancar tickets: el dia va derivar cap a tres informes de l'usuari que van destapar problemes més subtils que els del codi nou.
La matinada va anar ràpida. El ticket 03 va quedar resolt amb un sol mecanisme de «campos fijos + personalizados» compartit per la Identitat de la revista i la fitxa d'edició: el render deixa de llegir tema.yaml i numero.yaml, i el context de plantilles és ara revista.* i numero.*, amb la plantilla decidint què pintar, tal com havíem acordat. El ticket 04 va portar la novetat més grossa del render: cada costat de la revista accepta imatge de fons o PDF tancat que reemplaça la pàgina generada. El punt de risc tècnic — pintar el fons amb WeasyPrint sota el contingut — va funcionar a la primera, verificat amb un PDF real. El ticket 05 va convertir la paperera en una secció de Neteja amb manifestos: cada esborrat guarda origen, data i contingut, i es restaura d'un clic.
El resultat més satisfactori del dia va ser el ticket 06, l'end-to-end de tota la feature contra una instància neta. Es va crear una edició n87 amb ISSN com a camp personalitzat pintat a portada, fons PNG i un anunci de tancament amb sangrat; els dos articles es van pujar, extreure, reordenar i maquetar; l'export va donar els vuit checks en verd i el «Listo para imprenta». Del camí en van caure dues lliçons honestes: el primer export va sortir en vermell perquè el meu material de prova era indigne — foto a 181 ppp, anunci sense sangrat — i el preflight feia exactament la seva feina. I qpdf no era al portàtil, i el seu avís enfonsava el veredicte global; instal·lat amb Homebrew, mateixa jugada que Ghostscript.
A migdia van arribar els tres informes de l'usuari, i amb ells la lliçó més important del dia. El primer: la imatge de portada no es veia. Eran dos bugs superposats — WeasyPrint guarda les imatges a la caché per URL i el fons sempre es deia <lado>.png, així que el segon fons pujat no arribava mai al PDF — i el definitiu: el fons anava com <img> amb z-index -1, que pinta DARRERE del background del contenidor, i el color fosc de la portada el tapava. La imatge era al PDF però invisible. El segon informe: el colofó sortia a dalt i retallat. L'anclatge absolut al peu es resolia contra la caixa de l'article, i l'article del colofó no tenia alçada — bottom: 3mm sobre una caixa d'alçada zero deixa el text penjant a dalt. Solució: height: 255mm, l'àrea útil de l'A4 amb els marges de la plantilla.
La lliçó de fons és de verificació: els meus checks del ticket 04 comptaven XObjects d'imatge a la pàgina 1 — la imatge REFERENCIADA hi era, la VISIBLE no. Ara els tests rasteritzen amb pdftoppm i compten píxels del color esperat: visible de veritat o res. Tres capes per no tornar a confondre «és al stream» amb «es veu»: extract, píxels i ulls.
La tercera comunicació va acabar en decisió d'arquitectura. L'usuari va detectar amb una captura que la contraportada en PDF del client es veia més gran que la resta: el seu MediaBox viatjava sencer al document final i la pàgina quedava amb un altre tamany físic, un risc real d'impremta. Decisió, a la seva proposta: en comptes de reemplaçar la pàgina, el PDF del client es pinta a sobre de la pàgina de plantilla amb add_overlay de pikepdf, escalat tipus cover i prenent el TrimBox del client com a origen si el porta. Resultat: totes les pàgines comparteixen MediaBox, TrimBox, sangrat i marques de tall del programa — un sol MediaBox a tot el PDF, verificat. I com que el overlay tapava les marques de tall, es repinten a sobre com a Form XObject generat al vol, només a les pàgines tancades.
La jornada es va tancar amb dos ajustos d'impremta amb criteri de taller. Els materials tancats ara respecten la seva posició del llistat — el render reserva una pàgina-plaça invisible marcada amb un text transparent i després hi pinta el client a sangrat — i el múltiple de 4 es calcula amb les plaçes ja dins. I l'export guanya dues opcions: «Textos en negre pur (només planxa K)», que defineix la tinta com device-cmyk(0,0,0,1) i sobreviu intacta a la conversió de Ghostscript, i la reducció d'imatges per damunt del mínim configurat (300 ppp per defecte) durant la conversió. La revalidació final amb tot plegat va tornar a donar l'informe tot en verd. La feature queda a punt per validar amb l'usuari i fer el merge.