Ir al contenido


Foto

Programa para imprimir archivo de texto en impresora usb


  • Por favor identifícate para responder
3 respuestas en este tema

#1 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 19 marzo 2009 - 07:48

Alguien sabe de algún programa que haga lo mismo que este printfil que sea gratis o como se podrí­a hacer en delphi


Saludos
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 19 marzo 2009 - 08:04

Alguien sabe de algún programa que haga lo mismo que este printfil que sea gratis o como se podrí­a hacer en delphi


Saludos


Pues no se de ningún programa que haga eso, debe haber seguramente en sourceforge, pero si quieres hacer algo, nuestro amigo seoane tiene este código que te podrí­a ayudar a iniciar un proyecto propio. (y)

Salud OS
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 20 marzo 2009 - 08:17

Pues viendo lo que hace ese programa sospecho que imprime usando el canvas de la impresora, lo que además de permitirle imprimir texto y gráficos, también le deja imprimir en impresoras usb y de red. Sin embargo el código que yo puse esta pensado para mandar comandos directamente al puerto de la impresora, que es la mejor solución para impresoras de tickets, pero para impresoras normales puede que no sea la mejor opción.

De todas formas imprimir texto usando el canvas no es tan difí­cil, yo uso el siguiente código:


delphi
  1. type
  2.   TPrinterCaps = record
  3.     ppx: integer;
  4.     ppy: integer;
  5.     pox: integer;
  6.     poy: integer;
  7.   end;
  8.  
  9.   TPrinterContext = record
  10.     Caps: TPrinterCaps;
  11.     Cursor: TPoint;
  12.     Inter: Double;
  13.   end;
  14.  
  15. function CreatePrinterContext: TPrinterContext;
  16. begin
  17.   FillChar(Result,Sizeof(Result),0);
  18.   with Result.Caps do
  19.   begin
  20.     ppx:= GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  21.     ppy:= GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  22.     pox:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  23.     poy:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  24.   end;
  25.   Result.Inter:= 1.5;
  26. end;
  27.  
  28. function ToPixelsX(X: Double; Context: TPrinterContext): Integer;
  29. begin
  30.   with Context.Caps do
  31.     Result:= Round((X / 25.4) * ppx) - pox;
  32. end;
  33.  
  34. function ToPixelsY(Y: Double; Context: TPrinterContext): Integer;
  35. begin
  36.   with Context.Caps do
  37.     Result:= Round((Y / 25.4) * ppy) - poy;
  38. end;
  39.  
  40. procedure SetPrinterCursor(X, Y: Double; var Context: TPrinterContext);
  41. begin
  42.   with Context do
  43.   begin
  44.     if X > 0 then Cursor.X:= ToPixelsX(X,Context);
  45.     if Y > 0 then Cursor.Y:= ToPixelsY(Y,Context);
  46.   end;
  47. end;
  48.  
  49. procedure IncPrinterCursor(var Context: TPrinterContext);
  50. begin
  51.   with Context, Context.Caps do
  52.   begin
  53.     Cursor.Y:= Cursor.Y + Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72);
  54.   end;
  55. end;
  56.  
  57. procedure DecPrinterCursor(var Context: TPrinterContext);
  58. begin
  59.   with Context, Context.Caps do
  60.   begin
  61.     Cursor.Y:= Cursor.Y - Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72);
  62.   end;
  63. end;
  64.  
  65. procedure PrinterWrite(Width: Double; alRight: Boolean; Str: string;
  66.   Context: TPrinterContext);
  67. var
  68.   Rectangle: TRect;
  69. begin
  70.   with Context, Context.Caps do
  71.   begin
  72.     Rectangle.Left:= Cursor.X;
  73.     Rectangle.Top:= Cursor.Y;
  74.     Rectangle.Right:= Cursor.X + Round((Width / 25.4) * ppx);
  75.     if alRight then Cursor.X:= Rectangle.Right - Printer.Canvas.TextWidth(Str);
  76.     Rectangle.Bottom:=
  77.       Cursor.Y + Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72);
  78.     Printer.Canvas.TextRect(Rectangle,Cursor.X,Cursor.Y,Str);
  79.   end;
  80. end;
  81.  
  82. procedure PrinterTextOut(X, Y: Double; Str: string; Context: TPrinterContext);
  83. begin
  84.   Printer.Canvas.Textout(ToPixelsX(X,Context),ToPixelsY(Y,Context),Str);
  85. end;
  86.  
  87. procedure PrinterCenterText(X, Y: Double; Str: string;
  88.   Context: TPrinterContext);
  89. begin
  90.   Printer.Canvas.Textout(
  91.     ToPixelsX(X,Context) - (Printer.Canvas.TextWidth(Str) div 2),
  92.     ToPixelsY(Y,Context) - (Printer.Canvas.TextHeight(Str) div 2),
  93.     Str);
  94. end;
  95.  
  96. procedure PrinterMoveTo(X, Y: Double; Context: TPrinterContext);
  97. begin
  98.   Printer.Canvas.MoveTo(ToPixelsX(X,Context),ToPixelsY(Y,Context));
  99. end;
  100.  
  101. procedure PrinterLineTo(X, Y: Double; Context: TPrinterContext);
  102. begin
  103.   Printer.Canvas.LineTo(ToPixelsX(X,Context),ToPixelsY(Y,Context));
  104. end;
  105.  
  106. procedure PrinterLine(X1,Y1,X2,Y2: Double; Context: TPrinterContext);
  107. begin
  108.   PrinterMoveTo(X1,Y1,Context);
  109.   PrinterLineTo(X2,Y2,Context);
  110. end;
  111.  
  112.  
  113. // Y uso las funciones anteriores de esta manera
  114. var
  115.   i: Integer;
  116.   Context: TPrinterContext;
  117. begin
  118.   with TPrinterSetupDialog.Create(nil) do
  119.   try
  120.     if Execute then
  121.     with Printer do
  122.     begin
  123.       Printer.Orientation := poPortrait;
  124.       Printer.BeginDoc;
  125.       try
  126.         Context:= CreatePrinterContext;
  127.         Canvas.Font.Name:= 'Arial';
  128.         Canvas.Font.Color:= clBlack;
  129.         Canvas.Font.Size:= 10;
  130.         SetPrinterCursor(20,20,Context);
  131.         for i:= 1 to 20 do
  132.         begin
  133.           PrinterWrite(100,FALSE,'Linea ' + IntToStr(i),Context);
  134.           incPrinterCursor(Context);
  135.         end;
  136.         Printer.EndDoc;
  137.       except
  138.         Printer.Abort;
  139.       end;
  140.     end;
  141.   finally
  142.     Free;
  143.   end;
  144. end;


Las medidas (X,Y) son en milí­metros medidas desde la esquina superior izquierda de la hoja de papel.

Recuerda añadir Printers a las uses
  • 0

#4 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 24 marzo 2009 - 10:11

Gracias por el codigo Seoane funciono muy bien para la hora de imprimir, nomas que al intentar hacer la vista previa me atore y me puse a buscarle de otra manera con lo que al final me decidi por usar el fast reports.

Después de varios dí­as de estar investigando como hacer el programita este archivo adjunto fue el resultado.

Archivos adjuntos

  • Archivo adjunto  380_.zip   16,56KB   32 descargas

  • 0




IP.Board spam blocked by CleanTalk.