Explicando los dispositivos de salida del ordenador, no podía faltar la impresora. Creo que todos podríamos dar una respuesta a la pregunta: ¿Qué es la impresora?, pero probablemente nos costaría más responder a: ¿como funciona? Esto es lo que me propongo explicar en este post.

Una posible definición para Impresora sería: Periférico que traslada a papel los documentos electrónicos. Tomando esta descripción, y considerando que la sociedad está cada vez más preocupada por la conservación del medio ambiente, podríamos llegar a la conclusión de que estos dispositivos están en declive y condenados a desaparecer. Es posible que está situación se de en el futuro, pero la realidad hoy en día es que seguimos imprimiendo millones de copias de documentos y seguimos comprando impresoras. Por todo ello, es conveniente conocer como funciona este dispositivo.

Impresora

Funcionamiento de la impresora

Los programas que ejecutamos en nuestro ordenador son los encargados de generar la información de salida, que puede ir destinada a distintos periféricos. De igual forma que estos programas generan información de salida para la pantalla, lo hacen para la impresora. Así pues, lo primero que necesitamos son los datos a imprimir generados por la aplicación. Necesitaremos también un controlador que permita que el sistema operativo se entienda con la impresora. Una conexión para hacer llegar los datos a esta y la propia impresora.

El ordenador utiliza los conocidos como lenguajes de descripción de página (PDL: Page Description Language) para preparar los datos para la impresora. Este procesado y preparación de los datos es conocido como rasterización o ripeo de datos. Básicamente consiste en digitalizar punto por punto las imágenes o texto a imprimir, obteniendo los datos rasterizados. Más adelante veremos un ejemplo de este proceso.

El ordenador utiliza un programa para adaptar los datos a la impresora: el driver de la misma. Dicho programa habrá que instalarlo en nuestro ordenadro para que el sistema operativo se entienda con la impresora. Esto es lo mismo que con el resto de periféricos, si bien en el caso de la impresora hay más probabilidades de que tengamos que instalarlo porque no venga de serie con el sistema operativo. Esto último seguro que no nos pasa ni con el teclado ni con el ratón.

Los datos rasterizados, es decir preparados para la impresión, son entregados al controlador de la impresora, que interpretando los lenguajes de descripción de página, es capaz de generar la imagen a imprimir para la impresora. Dicha imagen es enviada al sistema de escritura cuya misión es la impresión en papel de la imagen.

Estaréis pensando que la explicación que he dado arriba es muy básica, hay muchos tipos de impresoras y no es posible que todas funcionen igual. En realidad, el funcionamiento es muy similar entre todas ellas, lo que marca la diferencia es principalmente el sistema de impresión. Veremos entonces que una impresora de inyección de tinta imprime de una manera totalmente diferente a una impresora laser, pero esto lo trataremos en otro post en el que hablaré de los tipos de impresoras.

En cuanto a las conexiones al ordenador, las tenemos de todo tipo. Inicialmente, quiero decir hace bastante tiempo, las impresoras usaban el puerto paralelo para conectarse localmente al ordenador. No obstante, en las conexiones locales por cable, ya no se utiliza la transmisión de datos en paralelo, sino en serie a través del puerto USB. También es cada vez más habitual la conexión local sin cable: Wireless en el entorno doméstico y la conexión por red a través de un servidor de impresión en el entorno corporativo.

La rasterización

El proceso de rasterización consiste en desgranar una imagen en el conjunto de puntos que la componen, para posteriormente emplearlo en algún periférico de salida. Comento esto porque también nos encontramos con este proceso al presentar las imágenes por pantalla, donde estos puntos en los que se desgrana la imagen son los conocidos pixeles. No obstante, en este post como es acerca de la impresora, me centraré en dicho dispositivo.

Entonces, en una impresora, ¿Cómo funciona la rasterización en la práctica? Lo mejor es verlo con un ejemplo sencillo.

Imaginemos que queremos imprimir en blanco y negro el nombre “Pablo” desde un editor de texto que funciona con caracteres ASCII. Dichos caracteres serían rasterizados de acuerdo a las fuentes de letras que empleemos. En nuestro caso, tendríamos algo así:

Rasterizacion Pablo

La información de la fuente de letra nos indica donde hay un punto y donde estaría vacío, transmitiendo un “1” o un “0” respectivamente. Así de simple serían los datos rasterizados en este ejemplo. Si nuestra imagen es a color y la queremos enviar con todos sus colores a la impresora, lógicamente necesitaríamos más información por punto que un simple bit. La cantidad de bits que necesitaríamos va a depender del número de colores posibles de nuestra paleta.

Lo anterior son sólo los datos de la imagen, pero el ordenador añade información extra mediante comandos del lenguaje de descripción de página. Como por ejemplo si queremos imprimir a B/N o a color, si queremos negrita o cursiva, indicación de fin de página y muchas otras instrucciones.

El controlador de la impresora

El controlador recibe los datos rasterizados y los comandos del lenguaje de descripción de página enviados por el ordenador. Su función es controlar el mecanismo de impresión para imprimir la información recibida.

En una impresora local, el controlador será un circuito integrado que incorporará una CPU, algún tipo de memoria ROM donde guardar el programa de impresión y Memoria RAM donde almacenar los datos recibidos. En impresoras de mayor tamaño, el controlador será un ordenador dedicado a administrar varias de ellas: un servidor de impresión.

El controlador prepara los datos que recibe para enviarlos al sistema de impresión a través del Video Interface. Los pasos que sigue son los siguientes:

  1. En primer lugar recibe la información a imprimir y la almacena en un buffer de entrada. De esta forma podrá ir tomando los datos de dicho buffer a la velocidad que se requiera, solventando los problemas que pudieran ocasionarse por la diferencia entre las velocidades de entrada de datos y de generación de la imagen.
  2. Con los datos del buffer de entrada, el controlador crea la imagen a imprimir, interpretándola de acuerdo a un lenguaje de descripción de página. Para las partes de texto cuenta con la ayuda de la información de las fuentes almacenadas en la impresora y de las descargadas en el ordenador. Con todo ello, crea la imagen rasterizada a imprimir.
  3. Finalmente, envía al video interface, los datos de los puntos de la imagen, línea a línea.

El Video Interface

El controlador de la impresora se comunica con el mecanismo de impresión a través del video Interface. Este elemento no está estandarizado, por lo que los distintos fabricantes han desarrollado sus soluciones propietarias. En cualquier caso, las funciones a cubrir por este elemento son siempre las mismas:

  1. Transmitir la imagen rasterizada al mecanismo de impresión a una velocidad constante. Las impresoras tienen una resolución fija y una velocidad de alimentación del papel constante, por lo que el mecanismo de impresión requiere que se le suministren los datos a una velocidad constante.
  2. Informar al controlador del estado del mecanismo de impresión. Se trata de información básica para controlar la impresión, aspectos tales como: el tamaño del papel disponible, si no hay papel, la finalización de la impresión, etc.
  3. También transmite al mecanismo de impresión las instrucciones del controlador: tipo y orientación del papel, etc.

Las fuentes

Conviene comentar el funcionamiento de las fuentes, ya que la impresión de letras y símbolos es de lo más habitual.

Una fuente es básicamente un conjunto de datos que nos permite obtener las imágenes de un juego de caracteres. Voy a explicarlas brevemente, ya que la impresión de letras y símbolos es de lo más habitual y conviene entender como funcionan.

Características de las fuentes

Hay muchos tipos de fuentes, podemos incluso definir nuestra propia fuente, pero todas ellas tienen una serie de características básicas comunes:

  • Juego de caracteres: conjunto de letras y símbolos incluidos en la fuente. Para todos ellos tendremos su correspondiente imagen.
  • Tipos de datos: Los datos de nuestra fuente pueden ser almacenados de dos formas: indicando punto a punto la imagen de cada carácter (fuentes tipo bitmap) o proporcionando las proporciones (fuentes escalables). En el siguiente apartado explicaré este punto.
  • Espaciado: Indica el espacio que hay antes y después de cada carácter.
  • Ancho del carácter: Medido como el número de caracteres que entran en una pulgada. La unidad utilizada es el cpi (character per inch). Aquí te dejo un ejemplo de una fuente que tiene 10 cpi:

  • Tamaño de punto: Aplicable a las fuentes escalables, ya que las bitmaps son de tamaño fijo.
  • Tipo de fuente: El nombre que reciben. Algunas de las más conocidas son: Arial, Courier o Times Roman.
  • Estilo de los caracteres: Itálica o normal.
  • Grueso del trazo: Negrita o normal.

Tipos de Fuentes

Como había comentado, los datos de las fuentes pueden ser almacenados de dos formas distintas, dando lugar a las fuentes Bitmap o a las fuentes escalables.

Fuentes Bitmap: La información de la imagen de cada carácter es guardada punto a punto, con lo que cada carácter tiene una imagen de tamaño fijo, que será siempre la misma. Por ejemplo, una imagen en B/N del carácter “B” definida en una matriz de 16×16 puntos tendría el siguiente aspecto:

Se trata de un mapa de bits, donde cada punto es indicado como negro con un “1” o como blanco con un “0”. El tamaño de memoria para almacenar esta imagen sería de 16×16 = 256 bits, es decir, 32 bytes. Lógicamente, si estuviéramos en una impresión a color, tendríamos que indicar el color para cada punto, y dependiendo de la profundidad de la paleta de colores que empleáramos, necesitaríamos más o menos espacio. Por ejemplo, si en lugar de utilizar un bit para indicar cada punto de la imagen, utilizáramos un byte. Cada punto podría tener 2 elevado a 8 posibles valores, es decir, 256. Podríamos emplear una paleta de 256 colores.

Con este tipo de fuentes tenemos la ventaja de que no hay que realizar cálculos, tenemos ya almacenado el valor de los puntos de la imagen. Serán por tanto más rápidas que las fuentes escalables donde si hay que realizar dichos cálculos.

Sin embargo, tenemos el inconveniente de que cuando se requiere imprimir una fuente Bitmap en un tamaño distinto al almacenado, hay que reducir o alargar la imagen. En este proceso, normalmente perderemos calidad, pudiéndose llegar a perder la forma de la fuente. Por todo ello, se recomienda utilizar las fuentes Bitmap en su tamaño almacenado.

Fuentes escalables: En este tipo de fuentes, la imagen de los caracteres se guarda almacenando las proporciones de su contorno. Por ello a veces se las denomina también fuentes de contorno. Esto va a hacer que tengan un comportamiento totalmente distinto al de las fuentes Bitmap.

Para definir este tipo de fuentes tendremos que seleccionar una serie de puntos que sean característicos del carácter en cuestión. Estos puntos serán los que nos permitan mantener las proporciones del carácter cuando lo escalemos, pudiendo generar la imagen del mismo en varios tamaños. Por ejemplo, para el carácter “b” podría ser algo parecido a lo siguiente:

En este ejemplo, el carácter “b” queda definido por 29 puntos significativos. Cuando tengamos que generar la imagen del carácter, tendremos que calcularla en función del tamaño de la imagen y la resolución de la impresora. Primero calculamos el entorno del carácter y luego lo rellenamos, generando así la imagen de puntos a imprimir.

La ventaja de este tipo de fuentes son claras: nos permiten imprimir en varios tamaños sin pérdida de calidad. El inconveniente es que tenemos que calcular las imágenes.

Bitmaps vs Escalables: Las impresoras disponen de ambos tipos de fuentes. Entonces, después de ver su funcionamiento, cabe preguntarse cuando usar cada una de ellas.

Utilizaremos las fuentes bitmaps en impresiones que no requieran alta calidad, o cuando el tamaño de la impresión se ajuste al tamaño de las imágenes de la fuente. Y utilizaremos fuentes escalables en las otras situaciones, es decir, cuando queramos una impresión de calidad o el tamaño de las fuentes bitmap no se ajuste al tamaño de impresión.

Lenguajes de descripción de página (PDL)

Las impresoras colaboran con el ordenador para generar la imagen a imprimir, liberando a este de esta carga de trabajo. El ordenador tiene que indicar a la impresora las acciones a realizar, para lo que utiliza los lenguajes de descripción de página (PDL). Estos disponen de un juego de instrucciones que el ordenador emplea para indicar las acciones a realizar al controlador de la impresora. De esta forma, el controlador recibe toda la información necesaria para completar la tarea de crear la imagen.

Las instrucciones que proporciona un PDL nos permiten indicar a un controlador aspectos como: imprimir a doble cara, tamaño del folio, impresión en cursiva o negrita, etc. Se trata de verdaderos lenguajes de programación, de hecho, también nos referimos a ellos como lenguaje de control de impresora.

Entre los PDLs más populares, destaco:

  • PCL (Printer Control Language): Desarrollado por HP
  • PostScript: Desarrollado por Adobe Systems. Aunque no se trata de un fabricante de impresoras, el estándar definido por ellos es ampliamente utilizado por los fabricantes, a los que cobra licencia por su uso.

NOTA:

Este post es parte de la colección “Arquitectura de Sistemas” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.