Exemplo n.º 1
0
        /// <summary>
        /// Copy the Document into a new Document
        /// </summary>
        /// <returns>Returns a copy of a the Document</returns>
        public override Xceed.Document.NET.Document Copy()
        {
            var memorystream = new MemoryStream();

            this.SaveAs(memorystream);
            memorystream.Seek(0, SeekOrigin.Begin);
            return(DocX.Load(memorystream));
        }
Exemplo n.º 2
0
Arquivo: DocX.cs Projeto: zwdwww/DocX
        /// <summary>
        /// Copy the Document into a new Document
        /// </summary>
        /// <returns>Returns a copy of a the Document</returns>
        public override Xceed.Document.NET.Document Copy()
        {
            var initialDoc = !string.IsNullOrEmpty(_filename) ? DocX.Load(_filename) : DocX.Load(_stream);

            var memorystream = new MemoryStream();

            initialDoc.SaveAs(memorystream);

            memorystream.Seek(0, SeekOrigin.Begin);
            return(DocX.Load(memorystream));
        }
Exemplo n.º 3
0
        public override void SaveAs(string filename)
        {
            if (this.IsPackageClosed(_package))
            {
                // When package is closed (already saved), reload the package and restart SaveAs();
                var initialDoc = !string.IsNullOrEmpty(_filename) ? DocX.Load(_filename) : DocX.Load(_stream);
                initialDoc.SaveAs(filename);
                return;
            }

            base.SaveAs(filename);
        }
Exemplo n.º 4
0
        public override void SaveAs(Stream stream)
        {
            if (this.IsPackageClosed(_package))
            {
                // When package is closed (already saved), reload the package and restart SaveAs();
                var initialDoc = (_stream.Length > 0) ? DocX.Load(_stream) : DocX.Load(_filename);
                initialDoc.SaveAs(stream);
                return;
            }

            base.SaveAs(stream);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Copy the Document into a new Document
        /// </summary>
        /// <returns>Returns a copy of a the Document</returns>
        public override Xceed.Document.NET.Document Copy()
        {
            try
            {
                var initialDoc = this;
                if (this.IsPackageClosed(_package))
                {
                    initialDoc = !string.IsNullOrEmpty(_filename) ? DocX.Load(_filename) : DocX.Load(_stream);
                }

                var memorystream = new MemoryStream();
                initialDoc.SaveAs(memorystream);

                memorystream.Seek(0, SeekOrigin.Begin);
                return(DocX.Load(memorystream));
            }
            catch (Exception e)
            {
                // If we can't load the filename or stream, just return the current document.
                return(this);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Save this document back to the location it was loaded from.
        /// </summary>
        /// <example>
        /// <code>
        /// // Load a document.
        /// using (var document = DocX.Load(@"C:\Example\Test.docx"))
        /// {
        ///     // Add an Image from a file.
        ///     document.AddImage(@"C:\Example\Image.jpg");
        ///
        ///     // Save all changes made to this document.
        ///     document.Save();
        /// }// Release this document from memory.
        /// </code>
        /// </example>
        /// <seealso cref="DocX.Load(System.IO.Stream)"/>
        /// <seealso cref="DocX.Load(string)"/>
        /// <!--
        /// Bug found and fixed by krugs525 on August 12 2009.
        /// Use TFS compare to see exact code change.
        /// -->
        public override void Save()
        {
            if (this.IsPackageClosed(_package))
            {
                // When package is closed (already saved), reload the package and restart Save();
                var initialDoc = !string.IsNullOrEmpty(_filename) ? DocX.Load(_filename) : DocX.Load(_stream);
                initialDoc.Save();
                return;
            }

            // Save the main document
            using (TextWriter tw = new StreamWriter(new PackagePartStream(this.PackagePart.GetStream(FileMode.Create, FileAccess.Write))))
            {
                _mainDoc.Save(tw, SaveOptions.None);
            }

            if ((_settings == null) || !this.isProtected)
            {
                using (TextReader textReader = new StreamReader(_settingsPart.GetStream()))
                {
                    _settings = XDocument.Load(textReader);
                }
            }

            // Save the header/footer content.
            this.SaveHeadersFooters();

            // Save the settings document.
            using (TextWriter tw = new StreamWriter(new PackagePartStream(_settingsPart.GetStream(FileMode.Create, FileAccess.Write))))
            {
                _settings.Save(tw, SaveOptions.None);
            }

            if (_endnotesPart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_endnotesPart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _endnotes.Save(tw, SaveOptions.None);
                }
            }

            if (_footnotesPart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_footnotesPart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _footnotes.Save(tw, SaveOptions.None);
                }
            }

            if (_stylesPart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_stylesPart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _styles.Save(tw, SaveOptions.None);
                }
            }

            if (_stylesWithEffectsPart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_stylesWithEffectsPart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _stylesWithEffects.Save(tw, SaveOptions.None);
                }
            }

            if (_numberingPart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_numberingPart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _numbering.Save(tw, SaveOptions.None);
                }
            }

            if (_fontTablePart != null)
            {
                using (TextWriter tw = new StreamWriter(new PackagePartStream(_fontTablePart.GetStream(FileMode.Create, FileAccess.Write))))
                {
                    _fontTable.Save(tw, SaveOptions.None);
                }
            }

            // Close the document so that it can be saved in .NETStandard.
            _package.Close();

            #region Save this document back to a file or stream, that was specified by the user at save time.
            if (_filename != null)
            {
                var saveFileName = _filename.EndsWith(".docx") || _filename.EndsWith(".doc") ? _filename : _filename + ".docx";
                using (FileStream fs = new FileStream(saveFileName, FileMode.Create))
                {
                    if (_memoryStream.CanSeek)
                    {
                        // Write to the beginning of the stream
                        _memoryStream.Position = 0;
                        HelperFunctions.CopyStream(_memoryStream, fs);
                    }
                    else
                    {
                        fs.Write(_memoryStream.ToArray(), 0, (int)_memoryStream.Length);
                    }
                }
            }
            else if (_stream.CanSeek) //Check if stream can be seeked to support System.Web.HttpResponseStream.
            {
                // Set the length of this stream to 0
                _stream.SetLength(0);

                // Write to the beginning of the stream
                _stream.Position = 0;

                _memoryStream.WriteTo(_stream);
                _memoryStream.Flush();
            }
            #endregion
        }