Criação de arquivo pcl

8 respostas
M

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.

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);
       }
    
        
         
    }

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.

8 Respostas

E

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

M

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.

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;

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

E

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

M

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.

E

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”).

M

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?

M

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.

M

Errata!

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

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("\u001B*p100X\u001B*p400Y"+"Testando pcl");
            dado.writeBytes("\u001BE\u001B%-12345X");    
           
            dado.close();
Criado 22 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 8
Participantes 2