PDFDocument: Mejoras en la gestión de Fuentes

Xojo 2022r1 incorpora una buena cantidad de mejoras y nuevas capacidades a la hora de trabajar con las fuentes en la creación de documentos PDF, tanto para reducir la cantidad de tiempo requerido en el procesado de las fuentes propiamente dichas como en la generación de archivos PDF de tamaño más reducido… y también cuando se trata de utilizar fuentes que no estén instaladas inicialmente en la carpeta correspondiente del sistemas operativo.

Como probablemente ya sepas, el mejor modo de permanecer en la “zona segura” cuando se trata del uso de fuentes en la creación de archivos PDF consiste en utilizar sólo aquellas comprendidas en el estándar PDF, garantizando así que cualquier sistema operativo pueda mostrarlas sin la necesidad de tener que embeberlas como parte de los contenidos del archivo PDF. Como resultado, los resultados de los archivos PDF son más pequeños.

Ahora bien, no todos los sistemas operativos tienen instaladas de serie todas o alguna de las fuentes requeridas por el estándar (Helvetica, Times, Courier, Symbol y ZapfDingbats), y PDFDocument necesita que tengas instaladas en el equipo cualquier fuente que vayas a utilizar. Por lo tanto, es aconsejable seguir estas recomendaciones.

  • macOS incluye por omisión todas las fuentes del estándar PDF, excepto en Monterrey donde se incluye Times New Roman en vez de Times. Por lo tanto, conviene que uses Times New Roman… o bien instalar Times.
  • Windows no incluye las fuentes Helvetica, Times, Curier o ZapfDingbats; debiendo utilizar como sustitutas Arial, Times New Roman, Courier New… e instalando ZapfDingbats o cualquier otra fuente similar que desees utilizar.
  • Linux no incluye por omisión ninguna de las fuentes del estándar PDF, pero sí fuentes equivalentes en la mayoría de los casos. Por tanto, es recomendable que utilices Liberation Sans como sustituta de Helvetica, Liberation Serif como sustituta de Times, Liberation Mono como sustituta de Courier; así como instalar las fuentes de símbolos (Symbol) y equivalente de ZapfDingbats que quieras utilizar, o bien instalar las fuentes soportadas por el estándar PDF.

Adicionalmente, es habitual que los servidores Linux no incluyan muchas fuentes. Asegúrate de instalar aquellas que quieras utilizar en tus documentos PDF.

Más allá de las anteriores aclaraciones, es probable que quieras utilizar en tus documentos PDF otras fuentes a parte de las recogidas en el Standard 14. En este caso, puede que quieras utilizar otras fuentes que ya estén instaladas y disponibles en la carpeta Fuentes (o equivalente) de tu sistema operativo… o bien otras fuentes que ni tan siquiera se hayan instalado y, por tanto, no estén disponibles por omisión para el sistema operativo.

En este caso, PDFDocument mejora la gestión de fuentes en esta versión. Por un lado se ha mejorado el sistema de caché de fuentes para que sea más ágil, reduciendo el tiempo requerido para acceder y obtener los datos de la fuente que se vaya a utilizar por primera vez en el dibujado de texto.

Embeber las fuentes en el PDF

Por otra parte, y dado que esta es una característica solicitada por varios usuarios, hemos traído de vuelta la propiedad EmbeddedFonts (definida por omisión como False). De esta forma, cuando utilices una fuente no incluida entre las comprendidas en el Standard 14, no se incluirán los datos de dichas fuentes como parte de los contenidos del PDF, resultando por lo tanto en archivos con un tamaño más reducido.

Esta característica resultará especialmente útil para aquellos que quieran compartir sus PDF con otros usuarios que, saben a ciencia cierta, tienen el mismo conjunto de fuentes instaladas en sus equipos; tal y como ocurre por ejemplo en muchas empresas. De esta forma, pueden reducir considerablemente en tamaño de los archivos PDF generados.

Pero si los documentos PDF creados de esta forma se van a distribuir para un uso general, entonces probablemente no todos los usuarios que vayan a abrir el documento PDF tendrán instalado en sus equipos el mismo conjunto de fuentes utilizadas en su creación y, como resultado, es probable que el texto muestre desajustes cuando se abra en la aplicación de visualización de archivos PDF.

Si por el contrado se define la propiedad EmbeddedFonts a True, entonces el documento PDF incorporará los datos de las fuentes utilizadas (excluyendo las correspondientes a las recogidas bajo el Standard 14), de modo que se pueda mostrar correctamente el texto tanto si el usuario tiene instaladas las fuentes como si no.

Usar Fuentes no Instaladas en el Sistema Operativo

Se ha mejorado el método PDFDocument.AddFonts para solucionar algunos fallos detectados, y también para añadir la capacidad de utilizar fuentes no instaladas cuando se trata de crear documentos PDF en apps iOS creadas con Xojo.

Para este escenario es recomendable definir la propiedad PDFDocument.AddFonts a True de modo que se garantice que los datos requeridos se incluyen como parte del documento PDF propiamente dicho.

También es necesario considerar lo siguiente:

  1. Uso de Fuentes Externas en Windows. Proporciona al método AddFonts un FolderItem que apunte al directorio que contiene los archivos de fuentes.
  2. Usar Fuentes Externas en macOS. macOS requiere copiar a la carpeta Resources > Fonts, dentro del bundle de la app, cualquier fuente que quieras utilizar y que no esté disponible entre las ya instaladas en el equipo. Por tanto, tendrás que añadir un paso de compilación “Copy Files” a tu proyecto Xojo, copiando todas las fuentes que quieras utilizar dentro del subdirectorio “Fonts” y seleccionando “Resources” como la opción en la entrada “Destination” en el Panel Inspector.Además, tendrás que añadir un archivo de texto al proyecto dentro del Navegador del IDE (por ejemplo con el nombre “ExtraKeys.plist” y cuyo contenido será similar al siguiente):
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
    <plist version="0.9">
    <dict>
    <key>ATSApplicationFontsPath</key>
    <string>Fonts</string>
    </dict>
    </plist>
  3. Usar Fuentes Externas en iOS. Tal y como ocurre en macOS, iOS requiere copiar cualquier fuente que vayas a utilizar en tus PDF (y que estén ya disponibles de serie) en la carpeta “App Parent Folder” > “Fonts”. Por tanto, tendrás que añadir un paso de compilación “Copy Files” a tu proyecto Xojo, copiando todos los archivos de fuentes dentro del subdirectorio “Fonts” y seleccionando “App Parent Folder” o “Resources” como destino en el Panel Inspector asociado.Además, tendrás que añadir un archivo de texto a tu proyecto Xojo (por ejemplo con el nombre “iOSKeys.plist”) cuyo contenido será similar al siguiente:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>Fonts provided by application</key>
    	<array>
    		<string>Honey.ttf</string>
    		<string>Montserrat-Regular.otf</string>
    		<string>Gypsum.ttf</string>
    	</array>
    </dict>
    </plist></pre>

    Observa que en este ejemplo las entradas “Honey.ttf”, “Montserrat-Regular.otf” y “Gypsum.ttf” son los nombres correspondientes a los archivos de fuente añadidos a la app iOS con el paso de compilación “Copy Files”. Tendrás que cambiar el nombre de dichas entradas (o cambiar la cantidad de entradas) para que se corresponda con el nombre de los archivos de fuente que vayas a utilizar en tu caso. Importante: no olvides incluir la extensión de los archivos como parte del nombre, y asegúrate de que el archivo “.plist” incluye tantas entradas como la cantidad de fuentes añadidas al proyecto mediante el paso de compilación “Copy Files”.

Por ejemplo, esta captura de pantalla muestra un PDF creado en iOS y que utiliza las fuentes nombradas en el archivo “.plist” que hemos visto anteriormente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *