Difference between revisions of "Using the printer/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 69: Line 69:
 
Con esto hemos escrito algo ''basico'' y ''simple''. El siguiente ejemplo es algo más complejo. Next to the basic text output in the bold line, it also provides an example of formatting your text.
 
Con esto hemos escrito algo ''basico'' y ''simple''. El siguiente ejemplo es algo más complejo. Next to the basic text output in the bold line, it also provides an example of formatting your text.
  
From ''begin'' to ''end;'' the following happens.
+
Desde ''begin'' a ''end;'' sucede lo siguiente:
* You can use the ''Printer'' object directly, without your own variable such as ''MyPrinter''. So, the MyPrinter object is not really needed, it is just the way how I want to write my code.
+
 
* With ''MyPrinter.BeginDoc'' you start printing, however nothing is sent to the printer until you finish with ''MyPrinter.EndDoc;''.
+
* Se puede utilizar el objeto ''Printer'' directamente, sin utilizar tu propia variable tal como se ha hecho con ''MiImpresora''. Por lo tanto el objeto MiImpresora no es realmente necesario, se ha utilizado para dar claridad al código fuente utilizado.
* The printer uses a Canvas to draw the output on. It is this drawing that ends up on the page. ''Canvas.Font'' is the font object for that moment. That is, the ''TextOut'' call we use later will output text using the settings of the font object of that moment.
+
 
 +
* Se comienza la preparación de impresión con ''MiImpresora.BeginDoc'' pero todavía no se envía nada a la impresora, por lo que podemos ir rellenando en unas coordenadas de ubicación sobre el lienzo (Canvas) el texto deseado con una tipografía, un color,....hasta que se finalice el bloque con ''MiImpresora.EndDoc;''.
 +
 
 +
* Printer utiliza un lienzo (Canvas) para dibujar sobre el mismo el contenido tal como lo haríamos en una hoja de papel (bien sea texto (con su tipografía, formato, color....), líneas, dibujos, etc). Para ir rellenando el lienzo anteponemos Canvas seguido de un punto (Canvas.) luego que que deseamos poner, en este caso al ser texto lo primero que hacemos es establecer la tipografía con
 +
''Canvas.Font', por lo tanto ya hemos puesto un objeto tipo font. Ponemos otro punto (Canvas.Font.) y por tanto dentro de font podemos definir la tipografía por su nombre (Canvas.Font.Name) que en este caso lo establece a Courier New, pero podríamos establecer su tamaño (Canvas.Font.Size) o su color (Canvas.Font.Color) o cualquiera otra propiedad que ese objeto nos permita establecer.
 +
Una vez definido esto con TextOut escribimos nuestro texto en el lienzo.  
 +
 
 +
 
 
* Everything you draw on the canvas must be positioned using coordinates. So, we calculate a ''LineHeight'' to position text vertically. You could do the same for the horizontal position, which I left here to be ''LEFTMARGIN''.
 
* Everything you draw on the canvas must be positioned using coordinates. So, we calculate a ''LineHeight'' to position text vertically. You could do the same for the horizontal position, which I left here to be ''LEFTMARGIN''.
 
* The text is drawn with the ''TextOut'' call.
 
* The text is drawn with the ''TextOut'' call.

Revision as of 13:55, 13 March 2013

Introducción

La impresión es fácil en FreePascal, pero solamente después de seguir algunos pasos requeridos, una vez que se comprenden estos primeros pasos ya se estaría en condiciones de pasar a conceptos más avanzados de impresión. Este artículo trata dichos pasos, que han sido recogidos de varios foros y ejemplos. Después de explicar los pasos básicos se realizará la impresión de unos textos para a continuación plantear sugerencias sobre impresión avanzada.


Los pasos básicos

Se necesita seguir los siguientes pasos para poder utilizar las impresoras:

  1. Añadir el paquete Printer4Lazarus a los requerimientos del programa.
  2. Añadir la unit Printers a la sección uses en la unidad.
  3. Utilizar el objeto existente Printer.

Añadiendo el paquete Printer4Lazarus a los requerimientos del proyecto

El paquete Printer4Lazarus define una impresora básica y provee de un sistema de impresión independiente de la plataforma utilizada. Lo siguiente puede utilizarse por tanto en varias plataformas:

En el IDE de Lazarus, realizar lo siguiente:

  1. En el menú, dentro de Proyecto, haz click en Inspector de Proyecto. A continuación se muestra una ventana con una vista en árbol, una de sus ramas se llama Paquetes Requeridos. Por defecto la rama de Paquetes Requeridos muestra el paquete LCL.
  2. Hacer click en el pulsador Añadir, es el que tiene dibujado el signo +.
  3. Abre la solapa Nuevo requerimiento.
  4. En el cuadro de listado Nombre de Paquete selecciona Printer4Lazarus.
  5. Haz click en Crear Nuevo Requisito.
  6. Con esto ya se muestra Printer4Lazarus en la rama de Paquetes Requeridos.

Añadiendo la unidad Printers a la sección uses section de tu unidad

Esto es simple y fácil de hacer, pareciéndose el resultado a esto:

unit MainUnt;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Printers;

Utilizando el objeto Printer

Asumiremos que se necesita un pulsador para imprimir un texto. Dicho pulsador se llama PrintBtn y precisa del evento OnClick, una vez hecho esto ya lo podemos utilizar.

procedure TForm1.PrintBtnClick(Sender: TObject);
const
  LEFTMARGIN = 100; {margen izquierdo, lo definimos como una constante}
  HEADLINE = 'Mi primera impresión de texto utilizando Lazarus '; {Línea de cabecera a imprimir}
var
  YPos, LineHeight, VerticalMargin: Integer; {Posición Y, Alto de línea, Margen vertical }
  SuccessString: String;
begin
  with Printer do
  try { realiza la prueba por si se puede imprimir, caso de que no se realiza una acción, caso de que si realiza finally }
    BeginDoc;   { Comenzamos el documento a imprimir }
    Canvas.Font.Name := 'Courier New'; { Ya tenemos el Canvas pues a llenarlo, en este caso definimos el nombre de la fuente }
    { para el texto que vamos a imprimir }
    Canvas.Font.Size := 10; { Definimos el tamaño para el tipo de fuente (nombre de la fuente) de texto que hemos escogido }
    Canvas.Font.Color := clBlack; { Definimos el color que va a tener nuestra fuente de texto gráfica }
    LineHeight := Round(1.2 * Abs(Canvas.TextHeight('I'))); { Definimos la altura de cada línea }
    VerticalMargin := 4 * LineHeight; { Definimos el margen vertical }
    { una vez hecho lo anterior ya podemos ubicar nuestro texto en el lienzo }
    YPos := VerticalMargin; { Definimos la posición Y en el lienzo }
    SuccessString := HEADLINE + DateTimeToStr(Now);  { Concatenamos nuestro texto de cabecera con la fecha actual } 
    Canvas.TextOut(LEFTMARGIN, YPos, SuccessString); { Escribimos nuestro texto donde lo queremos poner }
  finally
    EndDoc; { Como ya tenemos el lienzo dibujado con nuestro texto, con EndDoc lo enviamos a imprimir }
  end;
end;

Con esto hemos escrito algo basico y simple. El siguiente ejemplo es algo más complejo. Next to the basic text output in the bold line, it also provides an example of formatting your text.

Desde begin a end; sucede lo siguiente:

  • Se puede utilizar el objeto Printer directamente, sin utilizar tu propia variable tal como se ha hecho con MiImpresora. Por lo tanto el objeto MiImpresora no es realmente necesario, se ha utilizado para dar claridad al código fuente utilizado.
  • Se comienza la preparación de impresión con MiImpresora.BeginDoc pero todavía no se envía nada a la impresora, por lo que podemos ir rellenando en unas coordenadas de ubicación sobre el lienzo (Canvas) el texto deseado con una tipografía, un color,....hasta que se finalice el bloque con MiImpresora.EndDoc;.
  • Printer utiliza un lienzo (Canvas) para dibujar sobre el mismo el contenido tal como lo haríamos en una hoja de papel (bien sea texto (con su tipografía, formato, color....), líneas, dibujos, etc). Para ir rellenando el lienzo anteponemos Canvas seguido de un punto (Canvas.) luego que que deseamos poner, en este caso al ser texto lo primero que hacemos es establecer la tipografía con

Canvas.Font', por lo tanto ya hemos puesto un objeto tipo font. Ponemos otro punto (Canvas.Font.) y por tanto dentro de font podemos definir la tipografía por su nombre (Canvas.Font.Name) que en este caso lo establece a Courier New, pero podríamos establecer su tamaño (Canvas.Font.Size) o su color (Canvas.Font.Color) o cualquiera otra propiedad que ese objeto nos permita establecer. Una vez definido esto con TextOut escribimos nuestro texto en el lienzo.


  • Everything you draw on the canvas must be positioned using coordinates. So, we calculate a LineHeight to position text vertically. You could do the same for the horizontal position, which I left here to be LEFTMARGIN.
  • The text is drawn with the TextOut call.
  • This magnificent result is sent to the printer by MyPrinter.EndDoc.

In some forums it is suggested that the use of PrintDialog (the printer selection dialog) is required for good functioning, but I did not find this to be true (any more).