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

Programa para imprimir archivo de texto en impresora usb
Comenzado por
axesys
, mar 19 2009 07:48
3 respuestas en este tema
#1
Escrito 19 marzo 2009 - 07:48
#2
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.

Salud OS
#3
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:
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
De todas formas imprimir texto usando el canvas no es tan difícil, yo uso el siguiente código:
delphi
type TPrinterCaps = record ppx: integer; ppy: integer; pox: integer; poy: integer; end; TPrinterContext = record Caps: TPrinterCaps; Cursor: TPoint; Inter: Double; end; function CreatePrinterContext: TPrinterContext; begin FillChar(Result,Sizeof(Result),0); with Result.Caps do begin ppx:= GetDeviceCaps(Printer.Handle, LOGPIXELSX); ppy:= GetDeviceCaps(Printer.Handle, LOGPIXELSY); pox:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX); poy:= GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY); end; Result.Inter:= 1.5; end; function ToPixelsX(X: Double; Context: TPrinterContext): Integer; begin with Context.Caps do Result:= Round((X / 25.4) * ppx) - pox; end; function ToPixelsY(Y: Double; Context: TPrinterContext): Integer; begin with Context.Caps do Result:= Round((Y / 25.4) * ppy) - poy; end; procedure SetPrinterCursor(X, Y: Double; var Context: TPrinterContext); begin with Context do begin if X > 0 then Cursor.X:= ToPixelsX(X,Context); if Y > 0 then Cursor.Y:= ToPixelsY(Y,Context); end; end; procedure IncPrinterCursor(var Context: TPrinterContext); begin with Context, Context.Caps do begin Cursor.Y:= Cursor.Y + Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72); end; end; procedure DecPrinterCursor(var Context: TPrinterContext); begin with Context, Context.Caps do begin Cursor.Y:= Cursor.Y - Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72); end; end; procedure PrinterWrite(Width: Double; alRight: Boolean; Str: string; Context: TPrinterContext); var Rectangle: TRect; begin with Context, Context.Caps do begin Rectangle.Left:= Cursor.X; Rectangle.Top:= Cursor.Y; Rectangle.Right:= Cursor.X + Round((Width / 25.4) * ppx); if alRight then Cursor.X:= Rectangle.Right - Printer.Canvas.TextWidth(Str); Rectangle.Bottom:= Cursor.Y + Round(Inter*(Printer.Canvas.Font.Size * ppy) / 72); Printer.Canvas.TextRect(Rectangle,Cursor.X,Cursor.Y,Str); end; end; procedure PrinterTextOut(X, Y: Double; Str: string; Context: TPrinterContext); begin Printer.Canvas.Textout(ToPixelsX(X,Context),ToPixelsY(Y,Context),Str); end; procedure PrinterCenterText(X, Y: Double; Str: string; Context: TPrinterContext); begin Printer.Canvas.Textout( ToPixelsX(X,Context) - (Printer.Canvas.TextWidth(Str) div 2), ToPixelsY(Y,Context) - (Printer.Canvas.TextHeight(Str) div 2), Str); end; procedure PrinterMoveTo(X, Y: Double; Context: TPrinterContext); begin Printer.Canvas.MoveTo(ToPixelsX(X,Context),ToPixelsY(Y,Context)); end; procedure PrinterLineTo(X, Y: Double; Context: TPrinterContext); begin Printer.Canvas.LineTo(ToPixelsX(X,Context),ToPixelsY(Y,Context)); end; procedure PrinterLine(X1,Y1,X2,Y2: Double; Context: TPrinterContext); begin PrinterMoveTo(X1,Y1,Context); PrinterLineTo(X2,Y2,Context); end; // Y uso las funciones anteriores de esta manera var i: Integer; Context: TPrinterContext; begin with TPrinterSetupDialog.Create(nil) do try if Execute then with Printer do begin Printer.Orientation := poPortrait; Printer.BeginDoc; try Context:= CreatePrinterContext; Canvas.Font.Name:= 'Arial'; Canvas.Font.Color:= clBlack; Canvas.Font.Size:= 10; SetPrinterCursor(20,20,Context); for i:= 1 to 20 do begin PrinterWrite(100,FALSE,'Linea ' + IntToStr(i),Context); incPrinterCursor(Context); end; Printer.EndDoc; except Printer.Abort; end; end; finally Free; end; 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
#4
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.
Después de varios días de estar investigando como hacer el programita este archivo adjunto fue el resultado.