13 de Junio, 2005

Codificar ISO Latin1 en Postscript

Resulta bastante cómodo generar documentos en Postscript desde nuestros programas. No hace falta ninguna librería, solo conocer un poco de este lenguaje de descripción de páginas y generar un fichero en texto plano.

Actualmente estoy empleando un excelente generador de códigos de barras en Postscript para un proyecto.

Se trata de una aplicación de gestión de producción basada en web que tiene que imprimir una serie de etiquetas. Desde PHP genero un fichero Postscript que pasa a través de Ghostscript para devolver un fichero PDF al vuelo (el cliente corre en Windows, así que le resulta más cómodo este formato).

Me he hecho cuatro funciones de servicio, y la impresión de etiquetas va genial, hasta que ha sido necesario imprimir una 'Ñ' :(.

Resulta que las fuentes que uso (genéricas) sí contienen el juego de caracteres completo de ISO Latin1 (aka ISO 8859-1), pero por defecto Postscript codifica las fuentes como us-ascii. Para poder usar todos los caracteres, hay que realizar una recodificación.

He encontrado la siguiente función:

% ISO encoding by Peter Vollenweider (Für unix/mail Sept 1993)
/ReEncode {
exch findfont
dup length dict
begin
{
	1 index /FID eq
	{ pop pop }
	{ def } ifelse
} forall
/Encoding ISOLatin1Encoding def
currentdict
end
definefont
pop
} bind def

Parece una función bastante general, publicada en Für unix/mail en Septiembre del 93 por el Dr. Peter Vollenweider de la universidad de Zurich (forma parte de algo así como un ensayo sobre el tema, creo... porque está en perfecto alemán).

La función se invoca para recodificar una fuente de la siguiente forma:

% recodificamos la fuente Helvetica en _Helvetica
/Helvetica /_Helvetica ReEncode

% usamos la nueva fuente normalmente
/_Helvetica findfont
10 scalefont
setfont
(Ahora podemos escribir ¡caña!) show

Solo he tenido que incluir la nueva función en los archivos generados, reconvertir las fuentes que uso y son susceptibles de mostrar caracteres ISO Latin1, y cambiar los nombres de las fuentes en las llamadas a findfont.

Anotación por Juan J. Martínez, clasificada en: hacks, postscript.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: