/// <summary> /// Salva o documento. /// </summary> /// <param name="stream">The stream.</param> /// <param name="options">The options.</param> /// <param name="encoding">The encoding.</param> /// <returns>TDocument.</returns> public virtual void Save(Stream stream, DFeSaveOptions options = DFeSaveOptions.DisableFormatting, Encoding encoding = null) { var serializer = new DFeSerializer <TDocument>(); if (!options.HasFlag(DFeSaveOptions.None)) { serializer.Options.RemoverAcentos = options.HasFlag(DFeSaveOptions.RemoveAccents); serializer.Options.RemoverEspacos = options.HasFlag(DFeSaveOptions.RemoveSpaces); serializer.Options.FormatarXml = !options.HasFlag(DFeSaveOptions.DisableFormatting); serializer.Options.OmitirDeclaracao = options.HasFlag(DFeSaveOptions.OmitDeclaration); } if (encoding != null) { serializer.Options.Encoding = encoding; } serializer.Serialize(this, stream); using (var ms = new MemoryStream()) { stream.CopyTo(ms); stream.Position = 0; using (var reader = new StreamReader(ms, serializer.Options.Encoding)) Xml = reader.ReadToEnd(); } }
/// <summary> /// Salva o documento. /// </summary> /// <param name="stream">The stream.</param> /// <param name="options">The options.</param> /// <param name="encoding">The encoding.</param> /// <returns>TDocument.</returns> public void Save(Stream stream, DFeSaveOptions options = DFeSaveOptions.None, Encoding encoding = null) { var serializer = new DFeSerializer(typeof(TDocument)); if (!options.HasFlag(DFeSaveOptions.None)) { serializer.Options.RemoverAcentos = options.HasFlag(DFeSaveOptions.RemoveAccents); serializer.Options.FormatarXml = !options.HasFlag(DFeSaveOptions.DisableFormatting); serializer.Options.OmitirDeclaracao = !options.HasFlag(DFeSaveOptions.OmitDeclaration); } if (encoding != null) { serializer.Options.Encoder = encoding; } serializer.Serialize(this, stream); }
/// <summary> /// Salva o documento. /// </summary> /// <param name="path">The path.</param> /// <param name="options">The options.</param> /// <param name="encoding">The encoding.</param> /// <returns>TDocument.</returns> public virtual void Save(string path, DFeSaveOptions options = DFeSaveOptions.DisableFormatting, Encoding encoding = null) { var serializer = new DFeSerializer <TDocument>(); if (!options.HasFlag(DFeSaveOptions.None)) { serializer.Options.RemoverAcentos = options.HasFlag(DFeSaveOptions.RemoveAccents); serializer.Options.RemoverEspacos = options.HasFlag(DFeSaveOptions.RemoveSpaces); serializer.Options.FormatarXml = !options.HasFlag(DFeSaveOptions.DisableFormatting); serializer.Options.OmitirDeclaracao = options.HasFlag(DFeSaveOptions.OmitDeclaration); } if (encoding != null) { serializer.Options.Encoding = encoding; } serializer.Serialize(this, path); Xml = File.ReadAllText(path, serializer.Options.Encoding); }
/// <summary> /// Gera a assinatura do xml e retorna uma instancia da classe <see cref="DFeSignature"/>. /// </summary> /// <typeparam name="TDocument">The type of the t document.</typeparam> /// <param name="document">The document.</param> /// <param name="certificado">The certificado.</param> /// <param name="comments">if set to <c>true</c> [comments].</param> /// <param name="digest">The digest.</param> /// <param name="options">The options.</param> /// <param name="signedXml"></param> /// <returns>DFeSignature.</returns> public static DFeSignature AssinarDocumento <TDocument>(this DFeSignDocument <TDocument> document, X509Certificate2 certificado, bool comments, SignDigest digest, DFeSaveOptions options, out string signedXml) where TDocument : class { Guard.Against <ArgumentException>(!typeof(TDocument).HasAttribute <DFeSignInfoElement>(), "Atributo [DFeSignInfoElement] não encontrado."); var xml = document.GetXml(options, Encoding.UTF8); var xmlDoc = new XmlDocument { PreserveWhitespace = true }; xmlDoc.LoadXml(xml); var signatureInfo = typeof(TDocument).GetAttribute <DFeSignInfoElement>(); var xmlSignature = GerarAssinatura(xmlDoc, signatureInfo.SignElement, signatureInfo.SignAtribute, certificado, comments, digest); // Adiciona a assinatura no documento e retorna o xml assinado no parametro signedXml var element = xmlDoc.ImportNode(xmlSignature, true); xmlDoc.DocumentElement?.AppendChild(element); signedXml = xmlDoc.AsString(!options.HasFlag(DFeSaveOptions.DisableFormatting), !options.HasFlag(DFeSaveOptions.OmitDeclaration)); return(DFeSignature.Load(xmlSignature.OuterXml)); }