Criação de arquivo pcl

Bom dia.
Estou trabalhando na conversão de alguns programas de Delphi para JavaSE, mas esbarrei num pequeno grande problema.
Para a criação de arquivos .pcl preciso colocar dentro do código alguns comandos Escape, mas eles não podem aparecer no arquivo gerado, somente ficar em oculto.
Segue abaixo o trecho do código de geração do arquivo pcl.

[code]private void EscrevePCL()
{
try {

        FileOutputStream arq = new FileOutputStream(CaminhoArquivo1.getText());
        BufferedOutputStream buf = new BufferedOutputStream(arq);
        DataOutputStream dado = new DataOutputStream(buf);
        StringBuilder conteudoArquivo = new StringBuilder();         
        
     
       conteudoArquivo.append("\'%-12345X' \'E' \'&l2s26a0o0E'\'&u300D'");
       conteudoArquivo.append(conteudoArquivo+"\'(19U'\'(s1p10v0s3b16602T'");
       conteudoArquivo.append(conteudoArquivo+" Testando arquivo PCL");
       
      
       dado.writeUTF(conteudoArquivo.toString());
       dado.close();
   } catch (IOException ex) {
        Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
   }

    
     
}[/code]

Na hora de eu visualizar o arquivo gerado com o SwiftView eu deveria apenas ver o trecho “Testando arquivo PCL” e não todo o conteudo Escape.
Alguem poderia me ajudar?
Grato.

Você pode postar o programa Delphi que você tentou traduzir? Os caracteres de escape no Delphi são codificados de forma diferente no Java.

Só para ter uma idéia, seu programa em Java não tem nenhum caracter de escape (que no manual da HP aparece como EC e no Java é “\u001B” (olhe aqui para ver uma lista dos caracteres de escape em hexadecimal - http://www.december.com/html/spec/ascii.html )

http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13210/bpl13210.pdf

entanglement obrigado pela ajuda.

O que ocorre é o seguinte: O programa em Delphi roda muito bem. Cou postar um trecho do código em delphi.

[code]procedure TfrmImprime.Imprimir;
var
nOriginX : integer;
nOriginY : integer;
sBuffer : string;
fsSaida : TFileStream;
CodBarras : String;
nTotalDebitos : real;
nCounter : integer;
nWidth : integer;
fsFormFile : TFileStream;
fsFormFont : TFileStream; {declaração da variável para utilização das fontes}
sTemp, codEdificio, sFormDir, BancoD : string;
nStartForm, nEndForm : integer;
nResolut : integer;
deslocamento : integer;
nControle, npaginas, contadorArquivos,contadorRota : integer;
lotes : array of TLotesRec;
idProduto, sNomeArquivo, sModeloCarta, pathFormFrente, pathFormVerso, sRota : string;

const
aCodBarras: array[0…9] of string = (‘00110’, ‘10001’, ‘01001’, ‘11000’, ‘00101’, ‘10100’, ‘01100’, ‘00011’, ‘10010’, ‘01010’);
begin
//Buscando Informações para Gerar a Ordem de Serviço
with adsRelatorio do
begin
try
Close;
CommandText := 'select nome_arquivo, count(nome_arquivo) as Quantidade ‘+
’ from clientes group by nome_arquivo order by nome_arquivo’;

  Open;

  //Inicializando variaveis para Gerar a Ordem de Serviço
  SetLength(lotes,RecordCount);

  for contadorRota:=0 to (RecordCount -1) do
  begin
     sRota := FieldByName('nome_Arquivo').AsString;
     while (Pos('.', sRota) > 0) do
       System.Delete(sRota, Pos('.', sRota), 1);
       while (Pos(' ', sRota) > 0) do
       System.Delete(sRota, Pos(' ', sRota), 1);

     lotes[contadorRota].descricao := sRota;//Copy(sRota, 1, 5) + Copy(sRota, 9, Length(SRota) - 8);
     lotes[contadorRota].quantidade := FieldByName('Quantidade').AsInteger;
     Next;
  end;
finally
  Close;
end;

end;

//Gerando a Ordem de Serviço
if (chbGerarOS.Checked) then
begin
idProduto := ‘492’; //Codigo do Produto;
GerarOrdemServico (idProduto,lotes);
end;

with TADODataSet.Create(self) do
begin
Connection := adoBPD;
CommandText := ‘SELECT nome_arquivo FROM clientes GROUP BY nome_arquivo ORDER BY nome_arquivo’;
Open;

while not EOF do
begin
  sRota := Fields[0].AsString;
  adsClientes.Close;

  adsClientes.CommandText := 'select * from clientes where nome_arquivo = :arquivo order by cep_destinatario';
  adsClientes.Parameters[0].Value := sRota;
  adsClientes.Open;
  Next;

  deslocamento :=0;
  nControle := 1;

  Screen.Cursor := crHourGlass;

  System.Delete(sRota,Pos('.', sRota),1);
  fsSaida := TFileStream.Create(Srota +'.pcl', fmCreate);

  sTemp := #27'&f0y0x0S'#27'&f1s1x10X'#27'&f1y0x0S'#27'&f1s1x10X'#27'&f2y0x0S'#27'&f1s1x10X';

if feFormFrente.FileName <> '' then
begin
try
 fsFormFile := TFileStream.Create(feFormFrente.FileName, fmOpenRead or fmShareDenyWrite );

 SetLength( sBuffer, 8192 );
 nCounter := 8192;
 nStartForm := -1;
 nEndForm := -1;
 sTemp := '';

 nResolut := 300;
 while nCounter > 0 do
 begin
   nCounter := fsFormFile.Read( pointer(sBuffer)^, 8192);

   if Pos(#27'&l0E',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nStartForm := fsFormFile.Position-nCounter+Pos(#27'&l0E',sTemp+Copy(sBuffer,1,nCounter))-1-Length(sTemp);

   if Pos(#27'*t600R',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nResolut := 600
   else if Pos(#27'*t300R',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nResolut := 300;

   if Pos(#27'&l1X'#12,sTemp+Copy(sBuffer,1,nCounter)) > 0 then
   begin
     nEndForm := fsFormFile.Position-nCounter+Pos(#27'&l1X'#12,sTemp+Copy(sBuffer,1,nCounter))-1-Length(sTemp);
     Break;
   end;
   sTemp := Copy(sBuffer,nCounter-6,6);
 end;

 fsFormFile.Position := nStartForm;
 sTemp := Format(#27'&f0y0x0S'#27'&u%3.3dD'#27'*t%3.3dR', [nResolut,nResolut]);
 fsSaida.Write( pointer(sTemp)^, Length(sTemp) );
 fsSaida.CopyFrom( fsFormFile, nEndForm-nStartForm );
 fsFormFile.Free;
 sTemp := #27'*v0N'#27'&f1s1x10X';
 fsSaida.Write( pointer(sTemp)^, Length(sTemp) );

except
MessageDlg( 'O arquivo com o formulário ‘+ pathFormFrente + ’ não pode ser encontrado. Verifique a existência do formulário.’, mtError, [mbOK], 0);
Exit;
end;
end;

if feFormVerso.FileName <> ‘’ then
begin
try
fsFormFile := TFileStream.Create(feFormVerso.FileName, fmOpenRead or fmShareDenyWrite );

 SetLength( sBuffer, 8192 );
 nCounter := 8192;
 nStartForm := -1;
 nEndForm := -1;
 sTemp := '';

 nResolut := 300;
 while nCounter > 0 do
 begin
   nCounter := fsFormFile.Read( pointer(sBuffer)^, 8192);

   if Pos(#27'&l0E',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nStartForm := fsFormFile.Position-nCounter+Pos(#27'&l0E',sTemp+Copy(sBuffer,1,nCounter))-1-Length(sTemp);

   if Pos(#27'*t600R',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nResolut := 600
   else if Pos(#27'*t300R',sTemp+Copy(sBuffer,1,nCounter)) > 0 then
     nResolut := 300;

   if Pos(#27'&l1X'#12,sTemp+Copy(sBuffer,1,nCounter)) > 0 then
   begin
     nEndForm := fsFormFile.Position-nCounter+Pos(#27'&l1X'#12,sTemp+Copy(sBuffer,1,nCounter))-1-Length(sTemp);
     Break;
   end;
   sTemp := Copy(sBuffer,nCounter-6,6);
 end;

 fsFormFile.Position := nStartForm;
 sTemp := Format(#27'&f1y0x0S'#27'&u%3.3dD'#27'*t%3.3dR', [nResolut,nResolut]);
 fsSaida.Write( pointer(sTemp)^, Length(sTemp) );
 fsSaida.CopyFrom( fsFormFile, nEndForm-nStartForm );
 fsFormFile.Free;
 sTemp := #27'*v0N'#27'&f1s1x10X';
 fsSaida.Write( pointer(sTemp)^, Length(sTemp) );

except
MessageDlg( ‘O arquivo com o formulário ‘+pathFormVerso+’ não pode ser encontrado. Verifique a existência do formulário.’, mtError, [mbOK], 0);
Exit;
end;
end;

  fsFormFont := TFileStream.Create(sFonteDir+'hsbc.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'banestes.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'unibanco.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'caixa.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'bancoob.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'BB.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'bradesc.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'realsant.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

  fsFormFont := TFileStream.Create(sFonteDir+'banco_itau.flj', fmOpenRead or fmShareDenyWrite );
  fsSaida.CopyFrom(fsFormFont,fsFormFont.Size);
  fsFormFont.Free;

sBuffer := #27’%-12345X’#27’E’#27’&l2s26a0o0E’#27’&u300D’;

fsSaida.Write(pointer(sBuffer)^, Length(sBuffer));

ggProgresso2.MinValue := 0;
ggProgresso2.MaxValue := adsClientes.RecordCount;
npaginas :=1;
while not (adsClientes.Eof) do
begin
ggProgresso2.Progress := adsClientes.RecNo;

sBuffer := #27’&f0y4X’;
sBuffer := sBuffer+ #27’(19U’#27’(s1p10v0s3b16602T’;

sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [120,1730,‘Nº Contrato: ’ + adsClientes.FieldByName(‘numero_contrato’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [170,490,adsClientes.FieldByName(‘nome’).AsString + ’ - CPF: ’ + adsClientes.FieldByName(‘cpf_cnpj’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [265,190,adsClientes.FieldByName(‘identificao_empresa’).AsString]);

sBuffer := sBuffer+ #27’(s0p14h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [640,185,adsClientes.FieldByName(‘data_contrato’).AsString]);

sBuffer := sBuffer+ #27’(s0p15h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [640,450,Copy(adsClientes.FieldByName(‘nome_estabelecimento’).AsString,1,30)]);

sBuffer := sBuffer+ #27’(s0p14h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [640,1110,adsClientes.FieldByName(‘data_primeiro_vencimento_aberto’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [640,1200, adsClientes.FieldByName(‘valor_parcela_aberto’).AsFloat]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%2.2d’, [640,1730, adsClientes.FieldByName(‘quantidade_parcelas_aberto’).AsInteger]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [640,1760, adsClientes.FieldByName(‘valor_debito_atual_corrigido’).AsFloat]);

sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [965,640, adsClientes.FieldByName(‘valor_debito_corrigido’).AsFloat]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [1045,640, adsClientes.FieldByName(‘valor_desconto’).AsFloat]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [1125,640, adsClientes.FieldByName(‘valor_quitacao’).AsFloat]);

if (Trim(adsClientes.FieldByName(‘descricao_opcao_1’).AsString) <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [965,1300,adsClientes.FieldByName(‘descricao_opcao_1’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [965,1640, adsClientes.FieldByName(‘valor_opcao_1’).AsFloat]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [965,1500,’-’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [965,1960,’-’]);
end;

if (Trim(adsClientes.FieldByName(‘descricao_opcao_2’).AsString) <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1045,1300,adsClientes.FieldByName(‘descricao_opcao_2’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [1045,1640, adsClientes.FieldByName(‘valor_opcao_2’).AsFloat]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1045,1500,’-’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1045,1960,’-’]);
end;

if (Trim(adsClientes.FieldByName(‘descricao_opcao_3’).AsString) <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1125,1300,adsClientes.FieldByName(‘descricao_opcao_3’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [1125,1640, adsClientes.FieldByName(‘valor_opcao_3’).AsFloat]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1125,1500,’-’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1125,1960,’-’]);
end;

if (Trim(adsClientes.FieldByName(‘descricao_opcao_4’).AsString) <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1205,1300,adsClientes.FieldByName(‘descricao_opcao_4’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%18.2n’, [1205,1640, adsClientes.FieldByName(‘valor_opcao_4’).AsFloat]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1205,1500,’-’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1205,1960,’-’]);
end;

sBuffer := sBuffer+ #27’(s1p10v0s3b16602T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1647,650,adsClientes.FieldByName(‘data_validade’).AsString]);

// Informações do Boleto

    if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '399') then  ///HSBC
    begin
       BancoD   := '399-9';
       //sBuffer  := sbuffer+Format(#27'(58X'#27'*p%dy%dX%s', [2465,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '409') then ///UNIBANCO
    begin
       BancoD   := '409-0';
       //sBuffer := sbuffer+Format(#27'(72X'#27'*p%dy%dX%s', [2465,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '104') then  ///CEF
    begin
       BancoD   := '104-0';
       //sBuffer := sbuffer+Format(#27'(73X'#27'*p%dy%dX%s', [2465,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '756') then      /// Sicoob
    begin
      BancoD   := '756-0';
      //sBuffer := sbuffer+Format(#27'(71X'#27'*p%dy%dX%s', [2445,130,'AB']); // Ficha de Compensação
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '001') then      /// BB
    begin
      BancoD   := '001-9';
      //sBuffer := sbuffer+Format(#27'(70X'#27'*p%dy%dX%s', [2445,105,'AB']); // Ficha de Compensação
      ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '356') then ///REAL
    begin
       BancoD   := '356-5';
       //sBuffer := sbuffer+Format(#27'(74X'#27'*p%dy%dX%s', [2465,165,'AB']); // Ficha de Compensacao Santander
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '237') then  /// BRADESCO
    begin
       BancoD   := '237-2';
       //sBuffer  := sbuffer+Format(#27'(60X'#27'*p%dy%dX%s', [2445,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else  if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '021') then  /// BANESTES
    begin
       BancoD   := '021-3';
       //sBuffer := sbuffer+Format(#27'(59X'#27'*p%dy%dX%s', [2465,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');

    end
    else  if (Copy(adsClientes.FieldByName('linha_digitavel').AsString, 1, 3) = '341') then  /// ITAU
    begin
       BancoD   := '341-7';
       //sBuffer := sbuffer+Format(#27'(80X'#27'*p%dy%dX%s', [2445,165,'AB']); // Ficha de Compensacao
       ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end
    else
    begin
      ShowMessage(Copy(adsClientes.FieldByName('Linha_digitavel').AsString, 1, 3)+'  Banco não encontrado!');
    end;

sBuffer := sBuffer+ #27’(19U’;

// Recibo do Sacado

sBuffer := sBuffer + #27’(s0p9h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1835,530,BancoD]);
sBuffer := sBuffer + #27’(s0p11h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1835,715,adsClientes.FieldByName(‘Linha_Digitavel’).AsString]);
sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1920,160, adsClientes.FieldByName(‘nome_cedente’).Asstring]);
sBuffer := sBuffer+Format(#27’*p%dX%20s’, [1170,adsClientes.FieldByName(‘agencia_codigo_cedente’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1520,adsClientes.FieldByName(‘especie_documento’).AsString]);//Especie Documento
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1680,adsClientes.FieldByName(‘quantidade’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dX%20s’, [1770,adsClientes.FieldByName(‘Nosso_Numero’).AsString]);

sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2005,160,adsClientes.FieldByName(‘numero_contrato’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dX%20s’, [650,adsClientes.FieldByName(‘cpf_cnpj’).AsString]);

if (adsClientes.FieldByName(‘vencimento’).AsString <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dX%18s’, [1150,adsClientes.FieldByName(‘vencimento’).AsString]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1250, ‘Contra Apresentação’]);
end;
if (adsClientes.FieldByName(‘valor_boleto’).AsFloat > 0) then
begin
sBuffer := sBuffer+Format(#27’*p%dX%18.2n’,[1350, adsClientes.FieldByName(‘valor_boleto’).AsFloat]);
end;

sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2175, 160, adsClientes.FieldByName(‘nome’).AsString]);

// Ficha de Compensação
sBuffer := sBuffer + #27’(s0p9h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2440,530,BancoD]);
sBuffer := sBuffer + #27’(s0p11h0s3b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2440,715,adsClientes.FieldByName(‘Linha_Digitavel’).AsString]);
sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2535,160,adsClientes.FieldByName(‘Local_pagamento’).AsString]);
sBuffer := sBuffer + #27’(s0p14h0s3b4102T’;
if (adsClientes.FieldByName(‘vencimento’).AsString <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dX%18s’, [1770,adsClientes.FieldByName(‘vencimento’).AsString]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1770, ‘Contra Apresentação’]);
end;

sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2605,160, adsClientes.FieldByName(‘nome_cedente’).Asstring]);

sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dX%20s’, [1770,adsClientes.FieldByName(‘agencia_codigo_cedente’).AsString]);

sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2675,160,DateToStr(Now)]);
sBuffer := sBuffer+Format(#27’*p%dX%s’, [500,adsClientes.FieldByName(‘numero_contrato’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dX%s’, [900,adsClientes.FieldByName(‘especie_documento’).AsString]);//Especie Documento
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1150,adsClientes.FieldByName(‘aceite’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dX%s’, [1420,DateToStr(Now)]);

sBuffer := sBuffer+Format(#27’*p%dX%20s’, [1770,adsClientes.FieldByName(‘Nosso_Numero’).AsString]);

sBuffer := sBuffer + #27’(s0p16h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2740, 680,adsClientes.FieldByName(‘carteira’).AsString]); //Carteira
sBuffer := sBuffer+Format(#27’*p%dX%s’, [900,adsClientes.FieldByName(‘Especie_moeda’).AsString]);//Especie

sBuffer := sBuffer + #27’(s0p14h0s3b4102T’;
if (adsClientes.FieldByName(‘valor_boleto’).AsFloat > 0) then
begin
sBuffer := sBuffer+Format(#27’*p%dX%18.2n’, [1770,adsClientes.FieldByName(‘valor_boleto’).AsFloat]);
end;

sBuffer := sBuffer + #27’(s0p22h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2850,160,adsClientes.FieldByName(‘instrucao1’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2890,160,adsClientes.FieldByName(‘instrucao2’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2930,160,adsClientes.FieldByName(‘instrucao3’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [2970,160,adsClientes.FieldByName(‘instrucao4’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [3010,160,adsClientes.FieldByName(‘instrucao5’).AsString]);

sBuffer := sBuffer + #27’(s0p18h0s0b4102T’;

// Sacado
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [3130,260,Trim(adsClientes.FieldByName(‘nome’).AsString)]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [3160,260+deslocamento,adsClientes.FieldByName(‘rua_destinatario’).AsString + ‘, ’ + adsClientes.FieldByName(‘numero_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [3190,260+deslocamento,adsClientes.FieldByName(‘bairro_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [3220,260+deslocamento,adsClientes.FieldByName(‘cidade_destinatario’).AsString + ’ - ’ +
adsClientes.FieldByName(‘estado_destinatario’).AsString + ’ CEP: ’ + adsClientes.FieldByName(‘cep_destinatario’).AsString]);

nOriginX := 160;
nOriginY := 3310;

CodBarras := Trim(adsClientes.FieldByName(‘Codigo_barra’).AsString);

sBuffer := sBuffer+Format(#27’*p%dy%dX’#27’*c%da150b0P’,[nOriginY, nOriginX, 3]);
inc(nOriginX,6);
sBuffer := sBuffer+Format(#27’*p%dy%dX’#27’*c%da150b0P’,[nOriginY, nOriginX, 3]);
inc(nOriginX,6);
while Length(CodBarras) > 0 do
begin
for nCounter := 1 to 5 do
begin
if aCodBarras[StrToInt(CodBarras[1])][nCounter] = ‘0’ then
nWidth := 3
else
nWidth := 9;

   sBuffer := sBuffer+Format(#27'*p%dy%dX'#27'*c%da150b0P',[nOriginY, nOriginX, nWidth]);
   inc(nOriginX, nWidth);

   if aCodBarras[StrToInt(CodBarras[2])][nCounter] = '0' then
     nWidth := 3
   else
     nWidth := 9;
   inc(nOriginX, nWidth);
 end;
 system.Delete(CodBarras,1,2);

end;
sBuffer := sBuffer+Format(#27’*p%dy%dX’#27’*c%da150b0P’,[nOriginY, nOriginX, 9]);
inc(nOriginX,12);
sBuffer := sBuffer+Format(#27’*p%dy%dX’#27’*c%da150b0P’,[nOriginY, nOriginX, 3]);

sBuffer := sBuffer+#12;

// Início do Verso

sBuffer := sBuffer+#27’&f1y4X’;

sBuffer := sBuffer+#27’(s0p22h0s0b4102T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’,[1750, 50 + deslocamento,#27’&a90P’ + copy(adsClientes.FieldByName(‘nome_arquivo’).AsString,1,Length(adsClientes.FieldByName(‘nome_arquivo’).AsString)-4)+ ’ - Carta(MOD ’ + sModeloCarta+ ‘)’+ #27’&a0P’]);

sBuffer := sBuffer+#27’(s1p8v0s3b16602T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1410,490+deslocamento,adsClientes.FieldByName(‘nome’).AsString]);
sBuffer := sBuffer+#27’(s1p8v0s0b16602T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1450,490+deslocamento,adsClientes.FieldByName(‘rua_destinatario’).AsString + ‘, ’ + adsClientes.FieldByName(‘numero_destinatario’).AsString]);
if (Trim(adsClientes.FieldByName(‘complemento_destinatario’).AsString) <> ‘’) then
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1490,490+deslocamento,adsClientes.FieldByName(‘complemento_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1530,490+deslocamento,adsClientes.FieldByName(‘bairro_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1570,490+deslocamento,adsClientes.FieldByName(‘cidade_destinatario’).AsString + ’ - ’ +
adsClientes.FieldByName(‘estado_destinatario’).AsString + ’ CEP: ’ + adsClientes.FieldByName(‘cep_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1610,490 + deslocamento,trim(adsClientes.FieldByName(‘referencia_destinatario’).AsString)]);
end
else
begin
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1490,490+deslocamento,adsClientes.FieldByName(‘bairro_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1530,490+deslocamento,adsClientes.FieldByName(‘cidade_destinatario’).AsString + ’ - ’ +
adsClientes.FieldByName(‘estado_destinatario’).AsString + ’ CEP: ’ + adsClientes.FieldByName(‘cep_destinatario’).AsString]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [1570,490 + deslocamento,trim(adsClientes.FieldByName(‘referencia_destinatario’).AsString)]);
end;

sBuffer := sBuffer+Format(#27’(s22H’#27’*p%dy%dX%4.0d’, [1645,1770+deslocamento,npaginas]);

sBuffer := sBuffer+#27’&a180P’;

sBuffer := sBuffer+#27’(s1p10v0s3b16602T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [530,600+deslocamento,adsClientes.FieldByName(‘nome_remetente’).AsString]);
sBuffer := sBuffer+#27’(s1p10v0s0b16602T’;
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [580,600+deslocamento,‘XXXXXXXXXXXXXXXXXXXX]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [630,600+deslocamento,‘XXXXXXXXXXXXXXXXXXXX’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [680,600+deslocamento,‘XXXXXXXXXXXXXXXXXXXX’]);
sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [730,600+deslocamento,‘XXXXXXXXXXXXXXXXXXXX’]);

//sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [580,600+deslocamento,adsClientes.FieldByName(‘rua_remetente’).AsString + ‘, ’ + adsClientes.FieldByName(‘numero_remetente’).AsString]);
//if (Trim(adsClientes.FieldByName(‘complemento_remetente’).AsString) <> ‘’) then
//begin
// sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [630,600+deslocamento,adsClientes.FieldByName(‘complemento_remetente’).AsString]);
// sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [680,600+deslocamento,adsClientes.FieldByName(‘bairro_remetente’).AsString]);
// sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [730,600+deslocamento,adsClientes.FieldByName(‘cidade_remetente’).AsString + ’ - ’ +
// adsClientes.FieldByName(‘estado_remetente’).AsString + ’ CEP: ’ + adsClientes.FieldByName(‘cep_remetente’).AsString]);
//end
//else
//begin
// sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [630,600+deslocamento,adsClientes.FieldByName(‘bairro_remetente’).AsString]);
// sBuffer := sBuffer+Format(#27’*p%dy%dX%s’, [680,600+deslocamento,adsClientes.FieldByName(‘cidade_remetente’).AsString + ’ - ’ +
// adsClientes.FieldByName(‘estado_remetente’).AsString + ’ CEP: ’ + adsClientes.FieldByName(‘cep_remetente’).AsString]);
//end;

sBuffer := sBuffer+#27’&a0P’;

sBuffer := sBuffer+#27’(s18H’#12;
inc(npaginas);
adsClientes.Next;

fsSaida.WriteBuffer(pointer(sBuffer)^, Length(sBuffer) );

end;

sBuffer := #27’E’;
fsSaida.WriteBuffer(pointer(sBuffer)^, Length(sBuffer) );
fsSaida.Free;

ggProgresso2.Progress := 0;
end;
end;
Screen.Cursor := crDefault;

adsClientes.Close;
end;[/code]

Acima é a procedure que realiza a impressão no delphi capturando os dados variáveis de um banco de dados.

Outra coisa chata. Quando você usa DataOutputStream e usa writeUTF, o Java faz o seguinte. Digamos que você tenha uma String com o seguinte conteúdo:

“Realização”

Em vez de ele mandar os bytes 52 65 61 6C 69 7A 61 E7 E3 6F , como você está imaginando (52 = “R”, 65 = “e” etc.)

ele faz duas coisas que você não está esperando:

a) A primeira é que ele escreve o comprimento da String como 4 bytes, o byte mais significativo primeiro.
Nesse caso, você vai ter o valor 00 00 00 0C (lembrando que 0C = 12 em decimal).

Ei, mas “Realização” não tem 10 caracteres? Em UTF-8 os caracteres acentuados aparecem com 2 bytes (estou simplificando um pouco), e realização tem um c cedilha e um a til, portanto tem 2 bytes a mais. Então a codificação seria, incluindo os bytes indicando o comprimento:

00 00 00 0C 52 65 61 6C 69 7A 61 C3 A7 C3 A3 6F

entanglement ;

Realmente verifiquei esse problema. Mudei de writeUTF para writeBytes e resolveu esse problema.
Agora tenho que quebrar a cabeça para posicionar (Posição X, Posição Y) dos dados variáveis e carregar o que chamamos de form do arquivo.

Obrigado pela ajuda.

sBuffer := #27’%-12345X’#27’E’#27’&l2s26a0o0E’#27’&u300D’;

Em Java isso é parecido com:

private static final ESC = "\u001B";
...

sBuffer = ESC + "%-12345X" + ESC + "E" + ESC + "&l2s26a0o0E" + ESC + "&u300D";

Para gravar uma String em um FileOutputStream sem que haja essa conversão esquisita do writeUTF, você pode simplesmente converter a String em um array de bytes, e gravar esse array de bytes no FileOutputStream.

O método getBytes ( http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes(java.lang.String) ) faz essa conversão. (Talvez seja necessário passar “UTF-8” ou “Windows-1252”).

entanglement obrigado pela ajuda.

Agora estou com problema para setar o cursor dentro do arquivo, tipo posicionar o dado que eu tenho que escrever.
Alguem poderia me ajudar?

Bom dia!

Quanto ao posicionamento do cursor já consegui resolver o problema.
Eu estava pensando em algo do tipo printf(), foi quando tive a ideia de usar o posicionamento usando comando pcl mesmo.

conteudoArquivo.append("\u001B&a200c150H"+"Testando o posicionamento do cursor");

Com isso resolvi o posicionamento.
Agora vou quebrar a cabeça para importar os forms gerados em prn para poder gerar o pc completo.

Errata!

no comentário anterior, cometi um erro de referencia. O codigo correto segue abaixo:

[code]FileOutputStream arq = new FileOutputStream(CaminhoArquivo1.getText());
BufferedOutputStream buf = new BufferedOutputStream(arq);
DataOutputStream dado = new DataOutputStream(buf);
dado.writeBytes("\u001B%-12345X \u001BE \u001B&l0s26a0o0E \u001B&u300D");
dado.writeBytes("\u001B&f0y4X");
dado.writeBytes("\u001B(19U\u001B(s1p10v0s0b16602T");
dado.writeBytes("\u001Bp100X\u001Bp400Y"+“Testando pcl”);
dado.writeBytes("\u001BE\u001B%-12345X");

        dado.close();[/code]