Mudanças entre as edições de "AssDig32.dll"

De UniWiki
Ir para: navegação, pesquisa
(Criou página com 'Categoria:Assinatura Digital Categoria:Unilab Categoria:Desenvolvimento <div style="width: 700px; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;font-size: ...')
 
 
Linha 4: Linha 4:
 
<div style="width: 700px; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;font-size: 10pt;">
 
<div style="width: 700px; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;font-size: 10pt;">
 
AssDig32.dll é a biblioteca para assinatura digital de documentos PDF do Unilab para o SO Windows.
 
AssDig32.dll é a biblioteca para assinatura digital de documentos PDF do Unilab para o SO Windows.
 +
 +
A biblioteca AssDig32.dll e o arquivo AssDig32.tlb devem ser colocados na mesma pasta, e então registrado no windows com o programa RegAsm.exe localizado na pasta de instalação do .NET
 +
Requer .NET 3.5 ou superior.
  
 
<span style="color:blue;">'''Interface (Metodos)'''</span>
 
<span style="color:blue;">'''Interface (Metodos)'''</span>

Edição atual tal como às 18h19min de 1 de junho de 2016

AssDig32.dll é a biblioteca para assinatura digital de documentos PDF do Unilab para o SO Windows.

A biblioteca AssDig32.dll e o arquivo AssDig32.tlb devem ser colocados na mesma pasta, e então registrado no windows com o programa RegAsm.exe localizado na pasta de instalação do .NET Requer .NET 3.5 ou superior.

Interface (Metodos)

Item Descrição
Classe: IAssinaDig
Construtor: CoAssinaDig.create
Unit AssDig32_TLB

Um log de atividade e erro da biblioteca pode ser ativado diretamente no registro do windows na
chave: HKEY_CURRENT_USER\SoftwarezUniware\AssDig32Dll Setar conforma a tabela abaixo Interface (Metodos)

CAMPO TIPO DESCRIÇÃO
ActiveDebug DWORD Ativa (1) ou desativa (0) o log detalhado para depuração.
ActiveLog DWORD Ativa (1) ou desativa (0) o log da biblioteca
LogFileName TEXTO Nome (incluindo o path) do arquivo de log

Exemplo Delphi (assina PDF)

var
 Ma : IAssinaDig;           // Modulo para assinar documentos PDF da uniware
 r,i,repete : Integer;
 IdxAss : Integer;         // indice da assinatura da vez
 CertConv : TComConvert;   // Conversor de dados COM
begin
 Ma := CoAssinaDig.create;

 Log(Ma.getAuthor());
 Log('Preparando metadados...');

 // Meta Dados da assinatura
 Ma.setAuthor( Edit1.Text );
 Ma.setTitle( Edit2.Text );
 Ma.setSubject( Edit3.Text );
 Ma.setKeywords( Edit4.Text );
 Ma.setCreator( Edit5.Text );
 Ma.setProducer( Edit10.Text );
 Log(' Metadados Ok.');

 Log('Setando documentos...');
 Ma.setDeletePdfOrig( CheckBox3.Checked );
 Ma.setInputPdf( Edit9.Text );
 if (not CheckBox3.Checked ) then begin
    // somente se a origem não for descartada
    Ma.setOuputPdf( Edit15.Text );
 end;
 Log(' Documentos Ok.');


 // Este loop é só para repetir a mesma assinatura para fins de teste
 repete := 0;
 repeat

   // Adiciona um novo registro de assinatura
   // Bara cada assinatura repetir este bloco

   // BLOCO ASSINATURA >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   IdxAss := Ma.addAssinante;
 
   // Assinatura Visivel ?
   Ma.setVisibleSig(IdxAss, CheckBox2.Checked );

   // Assinatura customizada ?
   Log('Verificando customozação...');
   Ma.setSignatureCustom(IdxAss, CheckBox1.Checked );
   if (CheckBox1.Checked) then begin
      Ma.setReason(IdxAss, Edit6.Text );
      Ma.setContact(IdxAss, Edit7.Text );
      Ma.setLocation(IdxAss, Edit8.Text );
      Log(' Customozação Ok.');
   end else begin
     Log(' Não customizar.');
   end;


   { Posição do carimbo na pagina
      Obs: CdSafeStrToDouble converte a string
      para um Double OLE. para passar um valor
      apartir de uma variavel numerica ou hardcode, use
      o tipo Currency convertido com CurrToDoubleOLE( value )
   }
   Log('Setando posição do carimbo...');
   Ma.setTop(IdxAss, CdSafeStrToDouble(Edit11.text, 100.0 ) );
   Ma.setLeft(IdxAss, CdSafeStrToDouble(Edit12.text, 10.0 ) );
   Ma.setHeight(IdxAss, CdSafeStrToDouble(Edit13.text, 70.8 ) );
   Ma.setWidth(IdxAss, CdSafeStrToDouble(Edit14.text, 170.5 ) );
   Log(' Carimbo Ok.');

   //Carrega Certificado e senha
   Try
      Log('Setando Certificado e senha...');
      // Carregar o arquivo pfx neste cara
      CertConv  := TComConvert.Create(Edit16.Text);
      try
        // Adiciona o certificado e a senha
        if (Ma.setBinCert(IdxAss, CertConv.COMArray, Edit17.Text ) <> 0) then begin
           // Loga erro se houver
           Log(Ma.getLastError);
        end;
      finally
         CertConv.Free;
      end;
   Except
      on E: Exception do begin
        Log(E.Message);
      end;
   end;
   // FIM BLOCO ASSINATURA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

   inc(repete);
 until (repete >= 5);  // incluir a mesma assinatura 2 vezes

 // finalmente assina o documento
 Log('Assinando...');

 r := Ma.assinarPDF;
 if (r = 0) then begin
   Memo1.Lines.Add('Documento assinado com sucesso: ' + Ma.getOuputPdf );
 end else begin
   Memo1.Lines.Add('Falha ao assinar o PDF, ero: '+ IntToStr(r));
   Memo1.Lines.Add('   ' + Ma.getLastError );
 end;

 // Baixa o log completo (DEPURANDO)
 R := Ma.logCount;
 if (R > 0) then begin
    Log('=================LOG COMPLETO=============');
    for i := 0 to r-1 do begin
      Log( Ma.getLogLine(I) );
    end;
 end;

 // Por se tratar de uma interface, não usa Ma.Free
end;

Exemplo Delphi (Valida Certificado)

 var
   Ma : IAssinaDig;  // Modulo para assinar documentos PDF da uniware
   S : String;
 begin
   Ma := CoAssinaDig.create;

   S := Ma.validateCrtd(Edit16.Text, Edit17.Text);
   {
      Ma.validateCrtd() retorna os dados so certificados ou erro.

      Retorno tipo erro:
        A string de retorno inicia com a plavra "Erro" seguido do número
        do erro e a descrição, mensagens possiveis:

        Erro 2:Arquivo de certificado nao encontrado "+fileName+"."
        Erro 10:Certificado ou chave privada invalido. except: '" + Detalhes do erro

      Retorno de Dados (Certificado Ok, traz as informações do certficado)
        A string será composta de várias linhas (sep. CR+LF), sendo que cada linha
        contem os dados de um dos certificados do pacote (arquivo pfx) no seguinte formato:

        "NotBefore=17/08/2015 21:00:00|NotAfter=16/08/2016 20:59:59|
         SerialNumber=1BDA4A259BCB59996D534FA300DCA164|FriendlyName=|
         Issuer=CN=AC Certisign RFB G4, OU=Secretaria da Receita Federal do Brasil - RFB, O=ICP-Brasil, C=BR|
         Nome=João da Silva|Cpf=652.387.109-23"

        Cada campo=valor na linha é separado por pipe (|) - sugestão: use CutStr
        para alimentar um TStringList para ter acesso aos campos pelo values[].

        A linha que corresponde ao certificado do usuário é a ultima linha,
        as anteriores contem dos dados dos certificados das certificadoras (deve possuir a cadeia completa)

   }

   Log(S);
 end;