¿Por qué el informe se descoloca cuando lo genera un servidor Linux?
· Toni Martir, arquitecto de software
Cada noche, un servidor genera en PDF el listado de facturas del mes y se lo envía a cada comercial. En el PC con Windows donde se diseñó, el informe sale perfecto: un cliente por línea, los importes alineados. Generado en un servidor Linux, sale con nombres cortados, importes partidos en dos líneas y una página de más. Nadie ha tocado el informe ni la base de datos.
Ha cambiado la fuente, el tipo de letra: el informe pide Arial o Calibri, el servidor no la tiene y escribe con otra que ocupa más. Se arregla sin rediseñar nada, aunque la solución obvia, copiar la fuente de Windows al servidor, está prohibida.
El servidor pone otra fuente sin avisar
Arial, Calibri y Times New Roman son fuentes de Microsoft. De Arial, su ficha dice que va «exclusivamente incluida» con productos y servicios de Microsoft. Un servidor Linux no la trae.
Cuando un programa pide en Linux una fuente que falta, quien elige la sustituta es fontconfig, la pieza de Linux que escoge las fuentes. Según su documentación, busca la más parecida entre las instaladas: «siempre devuelve una fuente», sin garantizar que «se parezca en nada» a la pedida. El PDF sale igual, sin error ni aviso.
Lo he probado dejando sólo la familia DejaVu, la que el paquete de fontconfig en Debian pide en primer lugar: Arial y Calibri se convierten en DejaVu Sans, y Times New Roman en DejaVu Serif.
Unos milímetros por línea
Un informe coloca cada dato en una casilla de medida fija, pensada para su fuente. A 9 puntos, «Suministros Industriales del Levante, S.A.» ocupa 59 milímetros en Arial y 66 en DejaVu Sans: en una columna de 60 ya no cabe. Según cómo esté hecha la casilla, el texto se corta, pisa la columna de al lado o salta de línea y empuja hacia abajo lo que sigue, hasta que el listado necesita otra página.
La fuente que pide el informe y la que pone el servidor
Medido en Ubuntu 26.04 con cinco textos de factura: dos nombres de cliente, un importe, un número de albarán y un rótulo. Las fuentes de Microsoft se midieron a través de su sustituta, que ocupa lo mismo. Courier New apenas cambia porque en las dos fuentes todas las letras tienen el mismo ancho.
Copiar la fuente de Windows está prohibido
Las preguntas frecuentes de Microsoft sobre sus fuentes son claras: salvo para incrustarlas en un documento, las fuentes de Windows no se pueden copiar «a otros ordenadores o servidores». El derecho a instalar la original en un servidor se compra aparte; para muchas, Microsoft remite a Monotype.
Lo práctico es una sustituta que ocupe lo mismo letra a letra. Las fuentes Liberation están hechas para medir lo mismo que Arial, Times New Roman y Courier New, y Carlito, lo mismo que Calibri. Cambia un poco el dibujo de las letras, pero no su ancho. Las dos familias usan la licencia SIL Open Font License, que permite usarlas, incrustarlas en un PDF y redistribuirlas sin pagar por ellas, con condiciones como no venderlas sueltas.
El informe se queda como está: fontconfig ya tiene apuntadas esas parejas en su
tabla de familias equivalentes
y, con la sustituta instalada, la elige sola. Si el programa que genera los PDF
usa fontconfig, la orden fc-match Arial
dice qué
fuente pondrá el servidor. Si contesta DejaVu Sans, el informe saldrá
descolocado.
Entonces, ¿por qué se descoloca?
Porque al servidor le falta la fuente con la que se diseñó el informe, y escribe sin avisar con otra que no mide lo mismo. Se arregla dándole una fuente con los mismos anchos: la original, comprando el derecho a instalarla en un servidor, o una sustituta libre como Liberation o Carlito.
Reportman Server, el servidor de
Report Manager en Docker, ya trae
sustitutas con las mismas medidas que Arial, Times New Roman, Courier New, Arial
Narrow, Calibri y Cambria, admite tus fuentes en su carpeta fuentes/ y enseña
cuáles ve el motor en Servidor → Diagnóstico → Fuentes. Con printreptopdf,
el servidor web de informes o una
aplicación propia hecha con el motor, las sustitutas se instalan en el servidor
y el motor las elige con fontconfig
(documentación en inglés).
Fuentes
- Microsoft, Arial font family, apartado «Download»: «N/A – Exclusively included with Microsoft products and services where applicable.»
- fontconfig, Fontconfig user documentation, apartado «Font Matching»: «Fontconfig performs matching by measuring the distance from a provided pattern to all of the available fonts in the system. The closest matching font is selected. This ensures that a font will always be returned, but doesn't ensure that it is anything like the requested pattern.»
- Debian, paquete fontconfig-config: su dependencia de fuentes es «fonts-dejavu-core» o, en su lugar, otra de una lista de alternativas.
- Microsoft, Font redistribution FAQ, apartado «Redistribution and extended rights»: «Apart from the document embedding rights described previously, you may not redistribute the Windows fonts. You may not copy them to other computers or servers, and you may not convert them to other formats, including bitmap formats, or modify them.» y «Many of the fonts owned by Microsoft can be licensed with extended rights from Monotype.»
- Liberation Fonts, repositorio oficial: «The Liberation Fonts is font collection which aims to provide document layout compatibility as usage of Times New Roman, Arial, Courier New.»
- Carlito, repositorio oficial: «Carlito is a font designed by Łukasz Dziedzic (@typoland) derived from Lato (also designed by Łukasz Dziedzic) that is metric-compatible with Calibri.»; y su licencia: «This Font Software is licensed under the SIL Open Font License, Version 1.1.»
- SIL, Open Font License 1.1: «Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software»; y la condición 1: «Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.»
- fontconfig, fichero conf.d/30-metric-aliases.conf (código fuente de fontconfig 2.15.0, en la copia de Debian): «Set substitutions for similar/metric-compatible families»; su tabla empareja Arial con Liberation Sans, Times New Roman con Liberation Serif, Courier New con Liberation Mono y Calibri con Carlito.
- fontconfig, página de manual de fc-match: «fc-match matches pattern (empty pattern by default) using the normal fontconfig matching rules to find the best font available.»
- Report Manager: Reportman Server (apartado «Fuentes»), printreptopdf en Linux, el servidor web de informes y la salida a PDF y la elección de fuentes en Linux.
Toni Martir, arquitecto de software · · fuentes comprobadas el