private void OnRaiseSignedFileEvent(SignedFileEventArgs e) { EventHandler <SignedFileEventArgs> handler = SignedFileEvent; if (handler != null) { handler(this, e); } }
private void PdfSigner_SignedFileEvent(object sender, SignedFileEventArgs e) { var a = ArchivosParaFirmar.Where(ar => ar.File.FullName == e.File.FullName).First(); if (e.HasError) { a.Estado = EstadoFirmaArchivo.GetError(); a.Estado.Descripcion = e.Message; logger.Error("Ha ocurrido un error firmando el archivo {archivo} del lote {lote} con el siguiente mensaje: {mensaje}", e.File.Name, a.Lote, e.Message); } else { try { File.WriteAllBytes(System.IO.Path.Combine(carpetaDestino, e.File.Name), e.SignedContent); } catch (Exception es) { logger.Error("No se pudo guardar el archivo {directorio} .", a.File.FullName); a.Estado = EstadoFirmaArchivo.GetError(); a.Estado.Descripcion = $"No se pudo guardar el archivo.\n{es.Message}"; return; } a.Estado = EstadoFirmaArchivo.GetFirmado(); logger.Information("El archivo {archivo} del lote {lote} ha sido firmado.", a.File.Name, a.Lote); try { a.File.Delete(); logger.Information("El archivo {archivo} del lote {lote} ha sido eliminado de la carpeta origen.", a.File.Name, a.Lote); if (a.File.Directory.GetFiles().Count() == 0) { try { a.File.Directory.Delete(); logger.Information("Se borró el directorio {directorio} de la carpeta origen.", a.File.Directory.Name); } catch (Exception eD) { logger.Error(eD, "No se pudo borrar el directorio {directorio} de la carpeta origen.", a.File.Directory.Name); a.Estado = EstadoFirmaArchivo.GetAtencion(); a.Estado.Descripcion = $"El archivo se firmó y se eliminó.\nEra el último archivo del lote pero no se pudo borrar el directorio.\n{eD.Message}"; } } } catch (Exception exx) { logger.Error(exx, "No se pudo borrar archivo {archivo} del lote {lote} de la carpeta origen.", a.File.Name, a.Lote); a.Estado = EstadoFirmaArchivo.GetAtencion(); a.Estado.Descripcion = $"El archivo se firmó pero no se pudo eliminar.\n{exx.Message}"; } } }
public override async Task SignPdf(string fileId, byte[] fileData) { SignedFileEventArgs eventArgs = null; if (String.IsNullOrWhiteSpace(pin) || privatekeyHandle == null) { eventArgs = new SignedFileEventArgs(null, fileId, true, "El pin es requerido.\nO bien no fue ingresado, o era incorrecto."); } else { using (var memStream = new MemoryStream(fileData)) using (PdfReader reader = new PdfReader(memStream)) { StampingProperties properties = new StampingProperties(); properties.UseAppendMode(); using (MemoryStream outputStream = new MemoryStream()) { try { PdfSigner signer = new PdfSigner(reader, outputStream, properties); /* signer.SetCertificationLevel(certificationLevel); * PdfSignatureAppearance appearance = signer.GetSignatureAppearance().SetReason(reason).SetLocation(location * ).SetReuseAppearance(setReuseAppearance); * * signer.SetFieldName(name);*/ // Creating the signature signer.SignDetached(externalSignature, certPath, null, null, null, 0, PdfSigner.CryptoStandard.CADES); eventArgs = new SignedFileEventArgs(outputStream.ToArray(), fileId, false, ""); } catch (Exception e) { logger.Error(e, "Error firmando archivo {fileId}\n{mensaje}", fileId, e.Message); eventArgs = new SignedFileEventArgs(null, fileId, true, e.Message); } } } } OnRaiseSignedFileEvent(eventArgs); await Task.CompletedTask; }