Jump to content


Photo

Programa para imprimir archivo de texto en impresora usb


  • Please log in to reply
3 replies to this topic

#1 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 posts
  • LocationLos Mochis

Posted 19 March 2009 - 07:48 PM

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
  • 14448 posts
  • LocationMéxico

Posted 19 March 2009 - 08:04 PM

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
  • 1259 posts
  • LocationEspaña

Posted 20 March 2009 - 08:17 AM

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 posts
  • LocationLos Mochis

Posted 24 March 2009 - 10:11 AM

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.

Attached Files

  • Attached File  380_.zip   16.56KB   32 downloads

  • 0




IP.Board spam blocked by CleanTalk.