示例#1
0
        /// <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();
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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));
        }