Ciertamente puedes generar una plantilla de boleto con algun reporteador y despues darle salida por el puerto deseado. Hace algun tipo hice esto usando un memo, es para algo en particular por lo que solo interpreta el como lo hice.
Código Delphi
[-]
procedure tfrmPBoletos.showBoleto ;
begin
with Memo1.Lines do
begin
Clear ;
Add('MiEmpresa');
Add('MiDomicilio');
Add('MiCiudad');
Add('MiCodigoFiscal');
Add('MiTelefono' + #13#10);
Add('*****REIMPRESION DE BOLETO*****');
Add('');
Add(' Folio: ' + DM_Varios.PadString(IntToStr(frmDatos.MDOSalida.FieldByName('FOLIO').AsInteger),'0',7,toLeft));
Add('Vehiculo Placas: ' + frmDatos.MDOSalida.FieldByName('PLACAS').AsString);
Add('Transporte: ' + frmDatos.MDOSalida.FieldByName('TRANSPORTE').AsString);
if Trim(frmDatos.MDOSalida.FieldByName('OPERADOR').AsString) = '' then
Memo1.Lines.Add('')
else
Memo1.Lines.Add('Operador: ' + frmDatos.MDOSalida.FieldByName('OPERADOR').AsString + #13#10);
Add('Origen: ' + frmDatos.MDOSalida.FieldByName('ORIGEN').AsString);
Add('Cliente:' + frmDatos.MDOSalida.FieldByName('NOMBRE').AsString);
Add('Producto: ' + frmDatos.MDOSalida.FieldByName('PRODUCTO').AsString + #13#10);
Add('');
if Trim(frmDatos.MDOSalida.FieldByName('OBS').AsString) = '' then
Memo1.Lines.Add('')
else
begin
Memo1.Lines.Add('Observaciones: ' + #13#10);
Memo1.Lines.Add(frmDatos.MDOSalida.FieldByName('OBS').AsString);
end;
end;
end;
procedure TfrmPBoletos.btnImprimeClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
DM_Formatos.ComPort1.WriteStr(Memo1.Lines[i] + #13#10);
Close;
end;
procedure TfrmPBoletos.Memo1Change(Sender: TObject);
begin
if (Length(Memo1.Lines.Text) mod 40) = 0 then
begin
Memo1.Lines.Add(''); Memo1.SelStart := Length(Memo1.Lines.Text); end;
end;