From 144f2fb2fc3e25e281692d3dcf563fb9eac1dd7d Mon Sep 17 00:00:00 2001 From: Simon Boucher Date: Tue, 18 May 2021 09:38:45 -0400 Subject: [PATCH] V1.8.0 Released --- Xceed.Document.NET/AssemblyVersionInfo.cs | 2 +- Xceed.Document.NET/Properties/AssemblyInfo.cs | 2 +- Xceed.Document.NET/Src/Bookmark.cs | 15 +- Xceed.Document.NET/Src/Charts/Axis.cs | 7 +- Xceed.Document.NET/Src/Charts/Chart.cs | 68 +- Xceed.Document.NET/Src/Charts/LineChart.cs | 14 +- Xceed.Document.NET/Src/Container.cs | 104 ++- Xceed.Document.NET/Src/Document.cs | 593 ++++++++++++------ Xceed.Document.NET/Src/Formatting.cs | 4 +- Xceed.Document.NET/Src/HelperFunctions.cs | 55 +- Xceed.Document.NET/Src/Paragraph.cs | 254 +++++--- Xceed.Document.NET/Src/Picture.cs | 6 +- Xceed.Document.NET/Src/Section.cs | 4 +- Xceed.Document.NET/Src/Table.cs | 68 +- Xceed.Document.NET/Src/_BaseClasses.cs | 13 +- Xceed.Words.NET.Examples/Program.cs | 10 +- .../Properties/AssemblyInfo.cs | 8 +- .../Samples/Bookmark/BookmarkSample.cs | 4 +- .../Bookmark/Output/InsertBookmarks.docx | Bin 5665 -> 5666 bytes .../Bookmark/Output/ReplaceBookmarkText.docx | Bin 13284 -> 13280 bytes .../Samples/Chart/ChartData.cs | 2 +- .../Samples/Chart/ChartSample.cs | 3 +- .../Samples/Chart/Output/3DChart.docx | Bin 6798 -> 6798 bytes .../Samples/Chart/Output/BarChart.docx | Bin 6930 -> 6929 bytes .../Samples/Chart/Output/LineChart.docx | Bin 6907 -> 6907 bytes .../Samples/Chart/Output/PieChart.docx | Bin 6479 -> 6479 bytes .../Samples/CheckBox/CheckBoxSample.cs | 2 +- .../Samples/Document/DocumentSample.cs | 4 +- .../Document/Output/AddCustomProperties.docx | Bin 6377 -> 6379 bytes .../Document/Output/AppendDocument.docx | Bin 11674 -> 11674 bytes .../Document/Output/ApplyTemplate.docx | Bin 22785 -> 22320 bytes .../Output/LoadDocumentWithFilename.docx | Bin 11642 -> 11642 bytes .../Output/LoadDocumentWithStream.docx | Bin 11641 -> 11641 bytes .../Document/Output/LoadDocumentWithUrl.docx | Bin 1309032 -> 1309032 bytes .../Samples/Document/Output/ReplacedText.docx | Bin 12168 -> 12168 bytes .../Output/ReplacedTextWithObjects.docx | Bin 31268 -> 31268 bytes .../Samples/Equation/EquationSample.cs | 2 +- .../Equation/Output/EquationSample.docx | Bin 5729 -> 5729 bytes .../HeaderFooter/HeaderFooterSample.cs | 20 +- .../HeaderFooter/Output/HeadersFooters.docx | Bin 9403 -> 9456 bytes .../Samples/Hyperlink/HyperlinkSample.cs | 2 +- .../Samples/Hyperlink/Output/Hyperlinks.docx | Bin 5933 -> 5935 bytes .../Samples/Hyphenation/HyphenationSample.cs | 68 ++ .../Resources/HyphenatedDocument.docx | Bin 0 -> 13314 bytes .../Samples/Image/ImageSample.cs | 2 +- .../Samples/Image/Output/AddPicture.docx | Bin 23123 -> 23119 bytes .../Samples/Image/Output/CopyPicture.docx | Bin 14538 -> 14538 bytes .../Samples/Image/Output/ModifyImage.docx | Bin 14925 -> 14925 bytes .../Samples/Line/LineSample.cs | 2 +- .../Line/Output/InsertHorizontalLine.docx | Bin 5722 -> 5721 bytes .../Samples/List/ListSample.cs | 2 +- .../Samples/List/Output/AddList.docx | Bin 6424 -> 6423 bytes .../Samples/Margin/MarginSample.cs | 2 +- .../Samples/Margin/Output/Indentation.docx | Bin 5626 -> 5628 bytes .../Samples/Margin/Output/Margins.docx | Bin 5562 -> 5560 bytes .../Samples/Margin/Output/SetDirection.docx | Bin 5563 -> 5565 bytes .../Miscellaneous/MiscellaneousSample.cs | 2 +- .../Miscellaneous/Output/CompanyReport.docx | Bin 62174 -> 62167 bytes .../Miscellaneous/Output/CreateInvoice.docx | Bin 69503 -> 69503 bytes .../Miscellaneous/Output/CreateRecipe.docx | Bin 96939 -> 96941 bytes .../Output/MailMerge/Acceptance_153581.docx | Bin 23868 -> 23868 bytes .../Output/MailMerge/Acceptance_155285.docx | Bin 23866 -> 23866 bytes .../Output/MailMerge/Acceptance_159632.docx | Bin 23864 -> 23864 bytes .../Output/MailMerge/Acceptance_161002.docx | Bin 23866 -> 23866 bytes .../Output/MailMerge/Acceptance_162558.docx | Bin 23864 -> 23864 bytes .../Output/AddObjectsFromOtherDocument.docx | Bin 21219 -> 21220 bytes .../ForceMultiParagraphsOnSinglePage.docx | Bin 5782 -> 5783 bytes .../Output/ForceParagraphOnSinglePage.docx | Bin 5795 -> 5796 bytes .../Samples/Paragraph/Output/Heading.docx | Bin 5601 -> 5602 bytes .../Output/SimpleFormattedParagraphs.docx | Bin 6067 -> 6066 bytes .../Samples/Paragraph/Output/TextActions.docx | Bin 5869 -> 5868 bytes .../Samples/Paragraph/ParagraphSample.cs | 2 +- .../Samples/Parallel/Output/OutputDoc1.docx | Bin 22162 -> 22161 bytes .../Samples/Parallel/Output/OutputDoc2.docx | Bin 22119 -> 22117 bytes .../Samples/Parallel/Output/OutputDoc3.docx | Bin 22102 -> 22102 bytes .../Samples/Parallel/ParallelSample.cs | 2 +- .../Samples/Pdf/PdfSample.cs | 14 +- .../DocumentToConvertWithUninstalledFont.docx | Bin 0 -> 11969 bytes .../Samples/Pdf/Resources/The Bugatten.ttf | Bin 0 -> 86348 bytes .../Output/AddPasswordProtection.docx | Bin 5787 -> 5788 bytes .../Protection/Output/AddProtection.docx | Bin 5649 -> 5651 bytes .../Output/UpdatedPasswordProtected.docx | Bin 0 -> 5800 bytes .../Samples/Protection/ProtectionSample.cs | 34 +- .../Resources/PasswordProtected.docx | Bin 0 -> 5789 bytes .../Section/Output/InsertSections.docx | Bin 7679 -> 10879 bytes .../Section/Output/SetPageOrientations.docx | Bin 5604 -> 5605 bytes .../Samples/Section/SectionSample.cs | 2 +- .../Samples/Shape/ShapeSample.cs | 2 +- .../Samples/Table/Output/ColumnsWidth.docx | Bin 6031 -> 6017 bytes .../Table/Output/CreateTableFromTemplate.docx | Bin 13879 -> 13884 bytes .../Table/Output/InsertRowAndImageTable.docx | Bin 8743 -> 8754 bytes .../Samples/Table/Output/MergeCells.docx | Bin 5808 -> 5823 bytes .../Table/Output/TextDirectionTable.docx | Bin 6240 -> 6234 bytes .../Samples/Table/TableSample.cs | 6 +- .../Output/InsertTableOfContent.docx | Bin 6511 -> 6521 bytes .../InsertTableOfContentWithReference.docx | Bin 6486 -> 6498 bytes .../TableOfContent/TableOfContentSample.cs | 2 +- .../Xceed.Words.NET.Examples.csproj | 5 + Xceed.Words.NET/DocX.cs | 123 ++-- Xceed.Words.NET/Properties/AssemblyInfo.cs | 2 +- Xceed.Words.NET/Xceed.Words.NET.csproj | 2 + 101 files changed, 1061 insertions(+), 479 deletions(-) create mode 100644 Xceed.Words.NET.Examples/Samples/Hyphenation/HyphenationSample.cs create mode 100644 Xceed.Words.NET.Examples/Samples/Hyphenation/Resources/HyphenatedDocument.docx create mode 100644 Xceed.Words.NET.Examples/Samples/Pdf/Resources/DocumentToConvertWithUninstalledFont.docx create mode 100644 Xceed.Words.NET.Examples/Samples/Pdf/Resources/The Bugatten.ttf create mode 100644 Xceed.Words.NET.Examples/Samples/Protection/Output/UpdatedPasswordProtected.docx create mode 100644 Xceed.Words.NET.Examples/Samples/Protection/Resources/PasswordProtected.docx diff --git a/Xceed.Document.NET/AssemblyVersionInfo.cs b/Xceed.Document.NET/AssemblyVersionInfo.cs index af6c7a42..734fbe34 100644 --- a/Xceed.Document.NET/AssemblyVersionInfo.cs +++ b/Xceed.Document.NET/AssemblyVersionInfo.cs @@ -21,7 +21,7 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at internal static class _XceedVersionInfo { [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] - public const string BaseVersion = "1.7"; + public const string BaseVersion = "1.8"; [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields" )] public const string Version = BaseVersion + ".0.0"; diff --git a/Xceed.Document.NET/Properties/AssemblyInfo.cs b/Xceed.Document.NET/Properties/AssemblyInfo.cs index aff2f77d..4b74702a 100644 --- a/Xceed.Document.NET/Properties/AssemblyInfo.cs +++ b/Xceed.Document.NET/Properties/AssemblyInfo.cs @@ -27,7 +27,7 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at [assembly: AssemblyCompany( "Xceed Software Inc." )] [assembly: AssemblyProduct( "Xceed Document for .NET Standard" )] -[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2020" )] +[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2021" )] [assembly: AssemblyCulture("")] diff --git a/Xceed.Document.NET/Src/Bookmark.cs b/Xceed.Document.NET/Src/Bookmark.cs index 07828c12..7c2ce164 100644 --- a/Xceed.Document.NET/Src/Bookmark.cs +++ b/Xceed.Document.NET/Src/Bookmark.cs @@ -31,21 +31,26 @@ public Paragraph Paragraph #endregion - #region Constructors + #region Internal Properties - public Bookmark() + internal string Id { + get; + set; } #endregion - #region Public Methods + #region Constructors - public void SetText( string text ) + public Bookmark() { - this.Paragraph.ReplaceAtBookmark( text, this.Name ); } + #endregion + + #region Public Methods + public void SetText( string text, Formatting formatting = null ) { this.Paragraph.ReplaceAtBookmark( text, this.Name, formatting ); diff --git a/Xceed.Document.NET/Src/Charts/Axis.cs b/Xceed.Document.NET/Src/Charts/Axis.cs index 1f3c0d1e..c46fd2d8 100644 --- a/Xceed.Document.NET/Src/Charts/Axis.cs +++ b/Xceed.Document.NET/Src/Charts/Axis.cs @@ -19,6 +19,7 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at namespace Xceed.Document.NET { + /// /// Axis base class /// @@ -55,7 +56,11 @@ public Boolean IsVisible } } - #endregion + + + + +#endregion #region Internal Properties diff --git a/Xceed.Document.NET/Src/Charts/Chart.cs b/Xceed.Document.NET/Src/Charts/Chart.cs index 0bf51ba3..b88a4ffe 100644 --- a/Xceed.Document.NET/Src/Charts/Chart.cs +++ b/Xceed.Document.NET/Src/Charts/Chart.cs @@ -34,7 +34,7 @@ public abstract class Chart #region Private Members -#endregion + #endregion #region Public Properties @@ -58,7 +58,7 @@ public List Series int index = 1; foreach( var element in ChartXml.Elements( ser ) ) { - element.Add( new XElement( XName.Get("idx", Document.c.NamespaceName ) ), index.ToString() ); + element.Add( new XElement( XName.Get( "idx", Document.c.NamespaceName ) ), index.ToString() ); series.Add( new Series( element ) ); ++index; } @@ -247,7 +247,7 @@ public Chart() } -#endregion + #endregion #region Public Methods @@ -302,7 +302,7 @@ public void RemoveLegend() } -#endregion + #endregion #region Protected Methods @@ -319,7 +319,7 @@ public void RemoveLegend() -#endregion + #endregion } /// @@ -336,6 +336,9 @@ public class Series #region Public Properties + + + public Color Color { get @@ -359,21 +362,42 @@ public Color Color } set { - var colorElement = this.Xml.Element( XName.Get( "spPr", Document.c.NamespaceName ) ); - if( colorElement != null ) + var spPrElement = this.Xml.Element( XName.Get( "spPr", Document.c.NamespaceName ) ); + string widthValue = string.Empty; + + if( spPrElement != null ) { - colorElement.Remove(); + var ln = spPrElement.Element( XName.Get( "ln", Document.a.NamespaceName ) ); + if( ln != null ) + { + var val = ln.Attribute( XName.Get( "w" ) ); + if( val != null ) + { + widthValue = val.Value; + } + } + spPrElement.Remove(); } var colorData = new XElement( XName.Get( "solidFill", Document.a.NamespaceName ), new XElement( XName.Get( "srgbClr", Document.a.NamespaceName ), new XAttribute( XName.Get( "val" ), value.ToHex() ) ) ); // When the chart containing this series is a lineChart, the line will be colored, else the shape will be colored. - colorElement = ( ( this.Xml.Parent != null ) && ( this.Xml.Parent.Name != null ) && (this.Xml.Parent.Name.LocalName == "lineChart" ) ) - ? new XElement( XName.Get( "spPr", Document.c.NamespaceName ), - new XElement( XName.Get( "ln", Document.a.NamespaceName ), colorData ) ) - : new XElement( XName.Get( "spPr", Document.c.NamespaceName ), colorData ); - this.Xml.Element( XName.Get( "tx", Document.c.NamespaceName ) ).AddAfterSelf( colorElement ); + if( string.IsNullOrEmpty( widthValue ) ) + { + spPrElement = ( ( this.Xml.Parent != null ) && ( this.Xml.Parent.Name != null ) && ( this.Xml.Parent.Name.LocalName == "lineChart" ) ) + ? new XElement( XName.Get( "spPr", Document.c.NamespaceName ), + new XElement( XName.Get( "ln", Document.a.NamespaceName ), colorData ) ) + : new XElement( XName.Get( "spPr", Document.c.NamespaceName ), colorData ); + } + else + { + spPrElement = new XElement( XName.Get( "spPr", Document.c.NamespaceName ), + new XElement( XName.Get( "ln", Document.a.NamespaceName ), + new XAttribute( XName.Get( "w" ), widthValue ), colorData ) ); + } + + this.Xml.Element( XName.Get( "tx", Document.c.NamespaceName ) ).AddAfterSelf( spPrElement ); } } @@ -390,7 +414,7 @@ public Color Color -#endregion + #endregion #region Internal Properties @@ -422,7 +446,7 @@ internal Series( XElement xml ) var val = xml.Element( XName.Get( "val", Document.c.NamespaceName ) ); if( val != null ) - { + { _numCache = val.Descendants( XName.Get( "numCache", Document.c.NamespaceName ) ).FirstOrDefault(); if( _numCache == null ) { @@ -438,18 +462,18 @@ public Series( String name ) this.Xml = new XElement( XName.Get( "ser", Document.c.NamespaceName ), new XElement( XName.Get( "tx", Document.c.NamespaceName ), - new XElement( XName.Get( "strRef", Document.c.NamespaceName ), + new XElement( XName.Get( "strRef", Document.c.NamespaceName ), new XElement( XName.Get( "f", Document.c.NamespaceName ), "" ), new XElement( XName.Get( "strCache", Document.c.NamespaceName ), - new XElement( XName.Get( "pt", Document.c.NamespaceName ), - new XAttribute( XName.Get( "idx" ), "0" ), + new XElement( XName.Get( "pt", Document.c.NamespaceName ), + new XAttribute( XName.Get( "idx" ), "0" ), new XElement( XName.Get( "v", Document.c.NamespaceName ), name ) ) ) ) ), new XElement( XName.Get( "invertIfNegative", Document.c.NamespaceName ), "0" ), - new XElement( XName.Get( "cat", Document.c.NamespaceName ), + new XElement( XName.Get( "cat", Document.c.NamespaceName ), new XElement( XName.Get( "strRef", Document.c.NamespaceName ), new XElement( XName.Get( "f", Document.c.NamespaceName ), "" ), _strCache ) ), - new XElement( XName.Get( "val", Document.c.NamespaceName ), + new XElement( XName.Get( "val", Document.c.NamespaceName ), new XElement( XName.Get( "numRef", Document.c.NamespaceName ), new XElement( XName.Get( "f", Document.c.NamespaceName ), "" ), _numCache ) ) @@ -470,7 +494,7 @@ public void Bind( ICollection list, String categoryPropertyName, String valuePro _strCache.Add( ptCount ); _numCache.Add( formatCode ); - _numCache.Add( ptCount ); + _numCache.Add( ptCount ); Int32 index = 0; XElement pt; @@ -587,7 +611,7 @@ internal ChartLegend( ChartLegendPosition position, Boolean overlay ) #region Internal Methods -#endregion + #endregion #region Private Methods diff --git a/Xceed.Document.NET/Src/Charts/LineChart.cs b/Xceed.Document.NET/Src/Charts/LineChart.cs index 714d6412..d52627fa 100644 --- a/Xceed.Document.NET/Src/Charts/LineChart.cs +++ b/Xceed.Document.NET/Src/Charts/LineChart.cs @@ -17,6 +17,7 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at using System.IO.Packaging; using System.Xml.Linq; using System.Linq; +using System.Globalization; namespace Xceed.Document.NET { @@ -64,10 +65,15 @@ public override void AddSeries( Series series ) var spPr = series.Xml.Element( XName.Get( "spPr", Document.c.NamespaceName ) ); if( spPr != null ) { - var spPrContent = spPr.Elements().First(); - var newSpPr = new XElement( XName.Get( "spPr", Document.c.NamespaceName ), new XElement( XName.Get( "ln", Document.a.NamespaceName ), spPrContent ) ); - spPr.AddAfterSelf( newSpPr ); - spPr.Remove(); + if( spPr.Element( XName.Get( "ln", Document.a.NamespaceName ) ) == null ) + { + var spPrContent = spPr.Elements().First(); // Only color tag is defined. + + var newSpPr = new XElement( XName.Get( "spPr", Document.c.NamespaceName ), + new XElement( XName.Get( "ln", Document.a.NamespaceName ), spPrContent ) ); + spPr.AddAfterSelf( newSpPr ); + spPr.Remove(); + } } base.AddSeries( series ); diff --git a/Xceed.Document.NET/Src/Container.cs b/Xceed.Document.NET/Src/Container.cs index d213a643..ca45391f 100644 --- a/Xceed.Document.NET/Src/Container.cs +++ b/Xceed.Document.NET/Src/Container.cs @@ -152,6 +152,10 @@ public virtual List Pictures + + + + public virtual List Lists { get @@ -408,6 +412,7 @@ public virtual void ReplaceTextWithObject( string searchValue, } } + /// Inserts the provided text at a bookmark location in this Container, using the specified formatting. public virtual void InsertAtBookmark( string toInsert, string bookmarkName, Formatting formatting = null ) { if( string.IsNullOrWhiteSpace( bookmarkName ) ) @@ -419,6 +424,76 @@ public virtual void InsertAtBookmark( string toInsert, string bookmarkName, Form } } + /// Replaces the text of the Bookmark in this Container. Equivalent to document.Bookmarks[ "abc" ].SetText("new ABC"); + public virtual void ReplaceAtBookmark( string text, string bookmarkName, Formatting formatting = null ) + { + if( string.IsNullOrWhiteSpace( bookmarkName ) ) + throw new ArgumentException( "bookmark cannot be null or empty", "bookmarkName" ); + + foreach( var paragraph in Paragraphs ) + { + paragraph.ReplaceAtBookmark( text, bookmarkName, formatting ); + } + } + + public virtual string[] ValidateBookmarks( params string[] bookmarkNames ) + { + var result = new List(); + + foreach( var bookmarkName in bookmarkNames ) + { + // Validate in container. + if( this.Paragraphs.Any( p => p.ValidateBookmark( bookmarkName ) ) ) + return new string[ 0 ]; + + result.Add( bookmarkName ); + } + + return result.ToArray(); + } + + public virtual Paragraph InsertBookmark( string bookmarkName ) + { + var p = InsertParagraph(); + p.AppendBookmark( bookmarkName ); + return p; + } + + public virtual void RemoveBookmark( string bookmarkName ) + { + if( string.IsNullOrWhiteSpace( bookmarkName ) ) + throw new ArgumentException( "bookmark cannot be null or empty", "bookmarkName" ); + + foreach( var paragraph in Paragraphs ) + { + paragraph.RemoveBookmark( bookmarkName ); + } + } + + public virtual void ClearBookmarks() + { + foreach( var paragraph in Paragraphs ) + { + paragraph.ClearBookmarks(); + } + } + + public virtual IEnumerable GetBookmarks() + { + var bookmarks = new List(); + + foreach( var paragraph in Paragraphs ) + { + var currentBookmarks = paragraph.GetBookmarks(); + if( currentBookmarks.Any() ) + { + bookmarks.AddRange( currentBookmarks ); + } + } + + return bookmarks; + } + public virtual Paragraph InsertParagraph( int index, string text, bool trackChanges ) { return InsertParagraph( index, text, trackChanges, null ); @@ -663,16 +738,9 @@ public virtual Paragraph InsertEquation( string equation, Alignment align = Alig return p; } - public virtual Paragraph InsertBookmark( String bookmarkName ) - { - var p = InsertParagraph(); - p.AppendBookmark( bookmarkName ); - return p; - } - public virtual Table InsertTable( int rowCount, int columnCount ) { - var newTable = HelperFunctions.CreateTable( rowCount, columnCount ); + var newTable = HelperFunctions.CreateTable( rowCount, columnCount, this.GetAvailableWidth() ); this.AddElementInXml( newTable ); var table = new Table( this.Document, newTable, this.PackagePart ); @@ -682,7 +750,7 @@ public virtual Table InsertTable( int rowCount, int columnCount ) public virtual Table InsertTable( int index, int rowCount, int columnCount ) { - var newTable = HelperFunctions.CreateTable( rowCount, columnCount ); + var newTable = HelperFunctions.CreateTable( rowCount, columnCount, this.GetAvailableWidth() ); var p = HelperFunctions.GetFirstParagraphEffectedByInsert( Document, index ); if( p == null ) @@ -781,23 +849,7 @@ public virtual List InsertList( int index, List list ) p.Xml.ReplaceWith( elements.ToArray() ); return list; - } - - public virtual string[] ValidateBookmarks( params string[] bookmarkNames ) - { - var result = new List(); - - foreach( var bookmarkName in bookmarkNames ) - { - // Validate in container. - if( this.Paragraphs.Any( p => p.ValidateBookmark( bookmarkName ) ) ) - return new string[ 0 ]; - - result.Add( bookmarkName ); - } - - return result.ToArray(); - } + } public int RemoveTextInGivenFormat( Formatting formattingToMatch, MatchFormattingOptions formattingOptions = MatchFormattingOptions.SubsetMatch ) { diff --git a/Xceed.Document.NET/Src/Document.cs b/Xceed.Document.NET/Src/Document.cs index 90a2bc8a..4c9b7bf8 100644 --- a/Xceed.Document.NET/Src/Document.cs +++ b/Xceed.Document.NET/Src/Document.cs @@ -29,6 +29,8 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at using System.Net; using System.Diagnostics; using System.Drawing.Drawing2D; +using System.Resources; +using System.Globalization; namespace Xceed.Document.NET { @@ -413,7 +415,7 @@ public Borders PageBorders /// // Create a new document. /// using (var document = DocX.Create(@"Test.docx")) /// { - /// if(document.isProtected) + /// if(document.IsProtected) /// Console.WriteLine("Protected"); /// else /// Console.WriteLine("Not protected"); @@ -426,7 +428,7 @@ public Borders PageBorders /// /// /// - public bool isProtected + public bool IsProtected { get { @@ -434,6 +436,28 @@ public bool isProtected } } + public bool IsPasswordProtected + { + get + { + if( !IsProtected ) + { + return false; + } + else + { + var documentProtection = _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ); + return documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "cryptAlgorithmClass", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "cryptAlgorithmType", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "cryptAlgorithmSid", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "cryptSpinCount", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "cryptProviderType", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "hash", w.NamespaceName ) ) != null ) != null && + documentProtection.FirstOrDefault( x => x.Attribute( XName.Get( "salt", w.NamespaceName ) ) != null ) != null; + } + } + } + public PageLayout PageLayout { get @@ -563,31 +587,19 @@ public bool DifferentOddAndEvenPages { get { - XDocument settings; - using( TextReader tr = new StreamReader( new PackagePartStream( _settingsPart.GetStream() ) ) ) - { - settings = XDocument.Load( tr ); - } - - var evenAndOddHeaders = settings.Root.Element( w + "evenAndOddHeaders" ); + var evenAndOddHeaders = _settings.Root.Element( w + "evenAndOddHeaders" ); return ( evenAndOddHeaders != null ); } set { - XDocument settings; - using( TextReader tr = new StreamReader( _settingsPart.GetStream() ) ) - { - settings = XDocument.Load( tr ); - } - - var evenAndOddHeaders = settings.Root.Element( w + "evenAndOddHeaders" ); + var evenAndOddHeaders = _settings.Root.Element( w + "evenAndOddHeaders" ); if( evenAndOddHeaders == null ) { if( value ) { - settings.Root.AddFirst( new XElement( w + "evenAndOddHeaders" ) ); + _settings.Root.AddFirst( new XElement( w + "evenAndOddHeaders" ) ); } } else @@ -597,11 +609,6 @@ public bool DifferentOddAndEvenPages evenAndOddHeaders.Remove(); } } - - using( TextWriter tw = new StreamWriter( new PackagePartStream( _settingsPart.GetStream() ) ) ) - { - settings.Save( tw ); - } } } @@ -889,76 +896,101 @@ public BookmarkCollection Bookmarks var bookmarks = new BookmarkCollection(); // In Body. // Faster to search the document.Xml instead of document.Paragraphs. - var documentBookmarks = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ); - foreach( var bookmark in documentBookmarks ) + var documentBookmarkStartsXml = this.Xml.Descendants(XName.Get("bookmarkStart", Document.w.NamespaceName)); + foreach (var bookmarkStartXml in documentBookmarkStartsXml ) { - var paraXml = bookmark.Parent; - while( paraXml.Name != XName.Get( "p", Document.w.NamespaceName ) ) + var bookmarkName = bookmarkStartXml.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value; + + var paragraphXml = bookmarkStartXml.Parent; + while ((paragraphXml != null) && (paragraphXml.Name != XName.Get("p", Document.w.NamespaceName))) { - paraXml = paraXml.Parent; + paragraphXml = paragraphXml.Parent; } - bookmarks.Add( new Bookmark + // bookmarkStart is not in a paragraph, get bookmarkEnd. + if( paragraphXml == null ) { - Name = bookmark.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value, - Paragraph = new Paragraph( this, paraXml, -1 ) { PackagePart = this.PackagePart } - } ); + var bookmarkId = bookmarkStartXml.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + var bookmarkEnd = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value == bookmarkId ) + .FirstOrDefault(); + + if( bookmarkEnd == null ) + throw new InvalidDataException( "bookmarkEnd can't be found to match bookmarkStart with name " + bookmarkName + "." ); + + paragraphXml = bookmarkEnd.Parent; + while( ( paragraphXml != null ) && ( paragraphXml.Name != XName.Get( "p", Document.w.NamespaceName ) ) ) + { + paragraphXml = paragraphXml.Parent; + } + + // bookmarkStart is not in a paragraph, get bookmarkEnd. + if( paragraphXml == null ) + throw new InvalidDataException( "bookmarkStart and bookmarkEnd are not part of a paragraph. This is currently not supported." ); + } + + bookmarks.Add(new Bookmark + { + Name = bookmarkName, + Id = bookmarkStartXml.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value, + Paragraph = new Paragraph(this, paragraphXml, -1) { PackagePart = this.PackagePart } + }); } - foreach( var section in this.Sections ) + foreach (var section in this.Sections) { // In Headers. var headers = section.Headers; - if( headers != null ) + if (headers != null) { - if( headers.Odd != null ) + if (headers.Odd != null) { - foreach( var paragraph in headers.Odd.Paragraphs ) + foreach (var paragraph in headers.Odd.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } - if( headers.Even != null ) + if (headers.Even != null) { - foreach( var paragraph in headers.Even.Paragraphs ) + foreach (var paragraph in headers.Even.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } - if( headers.First != null ) + if (headers.First != null) { - foreach( var paragraph in headers.First.Paragraphs ) + foreach (var paragraph in headers.First.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } } // In Footers. var footers = section.Footers; - if( footers != null ) + if (footers != null) { - if( footers.Odd != null ) + if (footers.Odd != null) { - foreach( var paragraph in footers.Odd.Paragraphs ) + foreach (var paragraph in footers.Odd.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } - if( footers.Even != null ) + if (footers.Even != null) { - foreach( var paragraph in footers.Even.Paragraphs ) + foreach (var paragraph in footers.Even.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } - if( footers.First != null ) + if (footers.First != null) { - foreach( var paragraph in footers.First.Paragraphs ) + foreach (var paragraph in footers.First.Paragraphs) { - bookmarks.AddRange( paragraph.GetBookmarks() ); + bookmarks.AddRange(paragraph.GetBookmarks()); } } } @@ -973,8 +1005,29 @@ public BookmarkCollection Bookmarks -#endregion + + + + + + + + + + + + + + + + + + + + + + #endregion #region Public Methods public override Section InsertSection( bool trackChanges ) @@ -1174,7 +1227,7 @@ public override string[] ValidateBookmarks( params string[] bookmarkNames ) // Returns the name of the first occurence of a paragraph's style, with name == styleName. public static string GetParagraphStyleIdFromStyleName( Document document, string styleName ) { - if( string.IsNullOrEmpty( styleName ) || (document == null)) + if( string.IsNullOrEmpty( styleName ) || ( document == null ) ) return null; // Load _styles if not loaded. @@ -1209,7 +1262,7 @@ public static string GetParagraphStyleIdFromStyleName( Document document, string /// using (var document = DocX.Create(@"Test.docx")) /// { /// // Make sure the document is protected before checking the protection type. - /// if (document.isProtected) + /// if (document.IsProtected) /// { /// EditRestrictions protection = document.GetProtectionType(); /// Console.WriteLine("Document is protected using " + protection.ToString()); @@ -1225,14 +1278,14 @@ public static string GetParagraphStyleIdFromStyleName( Document document, string /// /// /// - /// + /// public EditRestrictions GetProtectionType() { - if( isProtected ) + if( IsProtected ) { XElement documentProtection = _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ).FirstOrDefault(); string edit_type = documentProtection.Attribute( XName.Get( "edit", w.NamespaceName ) ).Value; - return (EditRestrictions)Enum.Parse( typeof( EditRestrictions ), edit_type ); + return ( EditRestrictions )Enum.Parse( typeof( EditRestrictions ), edit_type ); } return EditRestrictions.none; @@ -1257,7 +1310,7 @@ public EditRestrictions GetProtectionType() /// /// /// - /// + /// public void AddProtection( EditRestrictions er ) { // Call remove protection before adding a new protection element. @@ -1291,9 +1344,12 @@ public void AddProtection( EditRestrictions er ) /// /// /// - /// + /// public void RemoveProtection() { + if( IsPasswordProtected ) + throw new UnauthorizedAccessException( "The document is password protected." ); + // Remove every node of type documentProtection. _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ).Remove(); } @@ -1533,13 +1589,16 @@ public void InsertDocument( Document remote_document, bool append = true, bool u // } //} - var remoteFontRelationship = remote_document._fontTablePart.GetRelationshipsByType( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/font" ); - var localFontRelationship = this._fontTablePart.GetRelationshipsByType( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/font" ); - if( ( remoteFontRelationship.Count() > 0 ) && ( localFontRelationship.Count() == 0 ) ) + if( ( remote_document._fontTablePart != null ) && ( this._fontTablePart != null ) ) { - foreach( var rel in remoteFontRelationship ) + var remoteFontRelationship = remote_document._fontTablePart.GetRelationshipsByType( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/font" ); + var localFontRelationship = this._fontTablePart.GetRelationshipsByType( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/font" ); + if( ( remoteFontRelationship.Count() > 0 ) && ( localFontRelationship.Count() == 0 ) ) { - this._fontTablePart.CreateRelationship( rel.TargetUri, rel.TargetMode, rel.RelationshipType ); + foreach( var rel in remoteFontRelationship ) + { + this._fontTablePart.CreateRelationship( rel.TargetUri, rel.TargetMode, rel.RelationshipType ); + } } } @@ -1648,7 +1707,7 @@ public Table AddTable( int rowCount, int columnCount ) if( rowCount < 1 || columnCount < 1 ) throw new ArgumentOutOfRangeException( "Row and Column count must be greater than zero." ); - var t = new Table( this, HelperFunctions.CreateTable( rowCount, columnCount ), this.PackagePart ); + var t = new Table( this, HelperFunctions.CreateTable( rowCount, columnCount, this.GetAvailableWidth() ), this.PackagePart ); t.PackagePart = this.PackagePart; return t; } @@ -1790,7 +1849,6 @@ public Table AddTable( int rowCount, int columnCount ) - /// /// Applies document template to the document. Document template may include styles, headers, footers, properties, etc. as well as text content. /// @@ -1815,6 +1873,10 @@ public void ApplyTemplate( string templateFilePath, bool includeContent ) } using( FileStream packageStream = new FileStream( templateFilePath, FileMode.Open, FileAccess.Read ) ) { + if( packageStream.Length == 0 ) + { + throw new FileNotFoundException( string.Format( "File should not be empty {0}", templateFilePath ) ); + } ApplyTemplate( packageStream, includeContent ); } } @@ -2165,7 +2227,7 @@ public void AddFooters() this.Sections[ 0 ].AddHeadersOrFootersXml( false ); } - public virtual void Save() + public virtual void Save( string password = "" ) { } @@ -2203,11 +2265,11 @@ public virtual void Save() /// document.SaveAs(@"C:\Example\Test2.docx"); /// /// - public virtual void SaveAs( string filename ) + public virtual void SaveAs( string filename, string password = "" ) { _filename = filename; _stream = null; - Save(); + Save( password ); } /// @@ -2259,11 +2321,11 @@ public virtual void SaveAs( string filename ) /// } /// /// - public virtual void SaveAs( Stream stream ) + public virtual void SaveAs( Stream stream, string password = "" ) { _filename = null; _stream = stream; - Save(); + Save( password ); } /// @@ -2673,144 +2735,51 @@ public virtual Document Copy() public void AddPasswordProtection( EditRestrictions editRestrictions, string password ) { - // Intellectual Property information : - // - // The following code handles password protection of Word documents (Open Specifications) - // and is an implementation of algorithm(s) described in Office Document Cryptography Structure - // here: https://msdn.microsoft.com/en-us/library/cc313071.aspx. - // - // The code’s use is covered under Microsoft’s Open Specification Promise - // described here: https://msdn.microsoft.com/en-US/openspecifications/dn646765 - - - // Remove existing password protection - this.RemoveProtection(); + if( IsPasswordProtected ) + throw new UnauthorizedAccessException( "Document is already password protected." ); // If no EditRestrictions, nothing to do if( editRestrictions == EditRestrictions.none ) return; - // Variables - int maxPasswordLength = 15; - var saltArray = new byte[ 16 ]; - var keyValues = new byte[ 14 ]; - // Init DocumentProtection element var documentProtection = new XElement( XName.Get( "documentProtection", w.NamespaceName ) ); documentProtection.Add( new XAttribute( XName.Get( "edit", w.NamespaceName ), editRestrictions.ToString() ) ); documentProtection.Add( new XAttribute( XName.Get( "enforcement", w.NamespaceName ), "1" ) ); - int[] InitialCodeArray = { 0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3 }; - int[,] EncryptionMatrix = new int[ 15, 7 ] - { - /* char 1 */ { 0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09}, - /* char 2 */ { 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF}, - /* char 3 */ { 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0}, - /* char 4 */ { 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40}, - /* char 5 */ { 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5}, - /* char 6 */ { 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A}, - /* char 7 */ { 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9}, - /* char 8 */ { 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0}, - /* char 9 */ { 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC}, - /* char 10 */ { 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10}, - /* char 11 */ { 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168}, - /* char 12 */ { 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C}, - /* char 13 */ { 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD}, - /* char 14 */ { 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC}, - /* char 15 */ { 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4} - }; - - // Generate the salt - var random = new RNGCryptoServiceProvider(); - random.GetNonZeroBytes( saltArray ); - - // Validate the provided password - if( !String.IsNullOrEmpty( password ) ) - { - password = password.Substring( 0, Math.Min( password.Length, maxPasswordLength ) ); - var byteChars = new byte[ password.Length ]; + Encryption encryption = new Encryption(); + var encryptionObj = encryption.Encrypt( password ); - for( int i = 0; i < password.Length; i++ ) - { - var temp = Convert.ToInt32( password[ i ] ); - byteChars[ i ] = Convert.ToByte( temp & 0x00FF ); - - if( byteChars[ i ] == 0 ) - { - byteChars[ i ] = Convert.ToByte( ( temp & 0x00FF ) >> 8 ); - } - } - - var intHighOrderWord = InitialCodeArray[ byteChars.Length - 1 ]; - - for( int i = 0; i < byteChars.Length; i++ ) - { - int tmp = maxPasswordLength - byteChars.Length + i; - for( int intBit = 0; intBit < 7; intBit++ ) - { - if( ( byteChars[ i ] & ( 0x0001 << intBit ) ) != 0 ) - { - intHighOrderWord ^= EncryptionMatrix[ tmp, intBit ]; - } - } - } - - int intLowOrderWord = 0; - - // For each character in the strPassword, going backwards - for( int i = byteChars.Length - 1; i >= 0; i-- ) - { - intLowOrderWord = ( ( ( intLowOrderWord >> 14 ) & 0x0001 ) | ( ( intLowOrderWord << 1 ) & 0x7FFF ) ) ^ byteChars[ i ]; - } - - intLowOrderWord = ( ( ( intLowOrderWord >> 14 ) & 0x0001 ) | ( ( intLowOrderWord << 1 ) & 0x7FFF ) ) ^ byteChars.Length ^ 0xCE4B; - - // Combine the Low and High Order Word - var intCombinedkey = ( intHighOrderWord << 16 ) + intLowOrderWord; - - // The byte order of the result shall be reversed [Example: 0x64CEED7E becomes 7EEDCE64. end example], - // and that value shall be hashed as defined by the attribute values. + documentProtection.Add( new XAttribute( XName.Get( "cryptProviderType", w.NamespaceName ), "rsaFull" ) ); + documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmClass", w.NamespaceName ), "hash" ) ); + documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmType", w.NamespaceName ), "typeAny" ) ); + documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmSid", w.NamespaceName ), "4" ) ); + documentProtection.Add( new XAttribute( XName.Get( "cryptSpinCount", w.NamespaceName ), encryptionObj.Iterations.ToString() ) ); + documentProtection.Add( new XAttribute( XName.Get( "hash", w.NamespaceName ), Convert.ToBase64String( encryptionObj.KeyValues ) ) ); + documentProtection.Add( new XAttribute( XName.Get( "salt", w.NamespaceName ), Convert.ToBase64String( encryptionObj.SaltArray ) ) ); - for( int i = 0; i < 4; i++ ) - { - keyValues[ i ] = Convert.ToByte( ( (uint)( intCombinedkey & ( 0x000000FF << ( i * 8 ) ) ) ) >> ( i * 8 ) ); - } - } + _settings.Root.AddFirst( documentProtection ); + } - var sb = new StringBuilder(); - for( int intTemp = 0; intTemp < 4; intTemp++ ) - { - sb.Append( Convert.ToString( keyValues[ intTemp ], 16 ) ); - } + public void RemovePasswordProtection( string password ) + { + if( !IsPasswordProtected || string.IsNullOrEmpty( password ) ) + return; - keyValues = Encoding.Unicode.GetBytes( sb.ToString().ToUpper() ); - keyValues = MergeArrays( keyValues, saltArray ); + var documentProtection = _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ).FirstOrDefault(); - int iterations = 100000; + var salt = documentProtection.Attribute( XName.Get( "salt", w.NamespaceName ) ); + var hash = documentProtection.Attribute( XName.Get( "hash", w.NamespaceName ) ); - var sha1 = new SHA1Managed(); - keyValues = sha1.ComputeHash( keyValues ); - var iterator = new byte[ 4 ]; - for( int i = 0; i < iterations; i++ ) + if( hash != null && salt != null ) { - iterator[ 0 ] = Convert.ToByte( ( i & 0x000000FF ) >> 0 ); - iterator[ 1 ] = Convert.ToByte( ( i & 0x0000FF00 ) >> 8 ); - iterator[ 2 ] = Convert.ToByte( ( i & 0x00FF0000 ) >> 16 ); - iterator[ 3 ] = Convert.ToByte( ( i & 0xFF000000 ) >> 24 ); - - keyValues = MergeArrays( iterator, keyValues ); - keyValues = sha1.ComputeHash( keyValues ); + var encryption = new Encryption(); + var keyValues = encryption.Decrypt( password, salt.Value ); + if( hash.Value != keyValues ) + throw new UnauthorizedAccessException( "Invalid password." ); } - documentProtection.Add( new XAttribute( XName.Get( "cryptProviderType", w.NamespaceName ), "rsaFull" ) ); - documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmClass", w.NamespaceName ), "hash" ) ); - documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmType", w.NamespaceName ), "typeAny" ) ); - documentProtection.Add( new XAttribute( XName.Get( "cryptAlgorithmSid", w.NamespaceName ), "4" ) ); - documentProtection.Add( new XAttribute( XName.Get( "cryptSpinCount", w.NamespaceName ), iterations.ToString() ) ); - documentProtection.Add( new XAttribute( XName.Get( "hash", w.NamespaceName ), Convert.ToBase64String( keyValues ) ) ); - documentProtection.Add( new XAttribute( XName.Get( "salt", w.NamespaceName ), Convert.ToBase64String( saltArray ) ) ); - - _settings.Root.AddFirst( documentProtection ); + _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ).Remove(); } public void SetDefaultFont( Font fontFamily, double fontSize = 11d, Color? fontColor = null ) @@ -2898,6 +2867,20 @@ protected internal virtual void SaveHeadersFooters() { } + internal XDocument GetSettings() + { + if( _settings != null ) + return _settings; + + XDocument settings; + using( TextReader tr = new StreamReader( _settingsPart.GetStream() ) ) + { + settings = XDocument.Load( tr ); + } + + return settings ?? null; + } + protected internal override void AddElementInXml( object element ) { // Add element just before the last sectPr. @@ -3073,8 +3056,8 @@ internal static Document Load( string filename, Document document, DocumentTypes Stream receiveStream = null; try { - request = (HttpWebRequest)WebRequest.Create( filename ); - response = (HttpWebResponse)request.GetResponse(); + request = ( HttpWebRequest )WebRequest.Create( filename ); + response = ( HttpWebResponse )request.GetResponse(); receiveStream = response.GetResponseStream(); HelperFunctions.CopyStream( receiveStream, ms ); } @@ -3723,9 +3706,39 @@ internal void UpdateCacheSections() _cachedSections = this.GetSections(); } - #endregion + internal Paragraph GetNextParagraph( Paragraph refParagraph ) + { + if( refParagraph == null ) + return null; + + var paragraphs = this.GetParagraphs(); + + var index = paragraphs.FindIndex( p => p._endIndex == refParagraph._endIndex ); + + if( ( index < 0 ) || ( index >= paragraphs.Count - 1 ) ) + return null; + + return paragraphs[ index + 1 ]; + } + + internal Paragraph GetPreviousParagraph( Paragraph refParagraph ) + { + if( refParagraph == null ) + return null; + + var paragraphs = this.GetParagraphs(); + + var index = paragraphs.FindIndex( p => p._endIndex == refParagraph._endIndex ); + + if( index < 1 ) + return null; + + return paragraphs[ index - 1 ]; + } + + #endregion - #region Private Methods + #region Private Methods private void DeleteHeadersOrFooters( bool isHeader, bool deleteReferences = true ) { @@ -4209,9 +4222,9 @@ private bool IsDefaultParagraphStyle( XElement style ) if( style == null ) return false; - return ( ( style.Attribute( XName.Get( "default", w.NamespaceName ) ) != null ) - && ( style.Attribute( XName.Get( "default", w.NamespaceName ) ).Value == "1" ) - && ( style.Attribute( XName.Get( "type", w.NamespaceName ) ) != null ) + return ( ( style.Attribute( XName.Get( "default", w.NamespaceName ) ) != null ) + && ( style.Attribute( XName.Get( "default", w.NamespaceName ) ).Value == "1" ) + && ( style.Attribute( XName.Get( "type", w.NamespaceName ) ) != null ) && ( style.Attribute( XName.Get( "type", w.NamespaceName ) ).Value == "paragraph" ) ); } @@ -4634,7 +4647,7 @@ private static void UpdateRelationshipsUri( Package package ) if( package.PartExists( new Uri( "/word/_rels/document.xml.rels", UriKind.Relative ) ) ) { - var docRelationships = package.GetPart( new Uri( "/word/_rels/document.xml.rels", UriKind.Relative ) ); + var docRelationships = package.GetPart( new Uri( "/word/_rels/document.xml.rels", UriKind.Relative ) ); using( var tr = new StreamReader( docRelationships.GetStream( FileMode.Open, FileAccess.Read ) ) ) { XDocument docRelationShipDocument; @@ -4642,13 +4655,13 @@ private static void UpdateRelationshipsUri( Package package ) var urisToValidate = docRelationShipDocument .Descendants( XName.Get( "Relationship", rel.NamespaceName ) ) - .Where( relation => ( relation.Attribute( "TargetMode" ) != null) && (( string )relation.Attribute( "TargetMode" ) == "External") ); + .Where( relation => ( relation.Attribute( "TargetMode" ) != null ) && ( ( string )relation.Attribute( "TargetMode" ) == "External" ) ); bool needUpdate = false; foreach( var relation in urisToValidate ) { var target = ( string )relation.Attribute( "Target" ); - if( !string.IsNullOrEmpty( target )) + if( !string.IsNullOrEmpty( target ) ) { try { @@ -4697,14 +4710,6 @@ select int.Parse( r.Id.Substring( 3 ) ) return guid; } - private byte[] MergeArrays( byte[] array1, byte[] array2 ) - { - byte[] result = new byte[ array1.Length + array2.Length ]; - Buffer.BlockCopy( array2, 0, result, 0, array2.Length ); - Buffer.BlockCopy( array1, 0, result, array2.Length, array1.Length ); - return result; - } - @@ -4917,4 +4922,174 @@ public void Dispose() #endregion } + + /// + /// Represents encryption class + /// + internal class Encryption + { + #region Public fields + + public int Iterations; + public byte[] KeyValues; + public byte[] SaltArray; + + #endregion + + #region Public Methods + public Encryption Encrypt( string password ) + { + return EncryptOrDecrypt( password ); + } + + public string Decrypt( string password, string salt ) + { + var decrypt = EncryptOrDecrypt( password, salt ); + return Convert.ToBase64String( decrypt.KeyValues ); + } + + #endregion + + #region private methods + private Encryption EncryptOrDecrypt( string password, string salt = "" ) + { + // Intellectual Property information : + // + // The following code handles password protection of Word documents (Open Specifications) + // and is an implementation of algorithm(s) described in Office Document Cryptography Structure + // here: https://msdn.microsoft.com/en-us/library/cc313071.aspx. + // + // The code’s use is covered under Microsoft’s Open Specification Promise + // described here: https://msdn.microsoft.com/en-US/openspecifications/dn646765 + + // Variables + int maxPasswordLength = 15; + var saltArray = !string.IsNullOrEmpty( salt ) ? Convert.FromBase64String( salt ) : new byte[ 16 ]; + var keyValues = new byte[ 14 ]; + + int[] InitialCodeArray = { 0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3 }; + int[,] EncryptionMatrix = new int[ 15, 7 ] + { + /* char 1 */ { 0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09}, + /* char 2 */ { 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF}, + /* char 3 */ { 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0}, + /* char 4 */ { 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40}, + /* char 5 */ { 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5}, + /* char 6 */ { 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A}, + /* char 7 */ { 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9}, + /* char 8 */ { 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0}, + /* char 9 */ { 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC}, + /* char 10 */ { 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10}, + /* char 11 */ { 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168}, + /* char 12 */ { 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C}, + /* char 13 */ { 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD}, + /* char 14 */ { 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC}, + /* char 15 */ { 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4} + }; + + if( saltArray.All( item => item == 0 ) ) + { + // Generate the salt + var random = new RNGCryptoServiceProvider(); + random.GetNonZeroBytes( saltArray ); + } + + // Validate the provided password + if( !String.IsNullOrEmpty( password ) ) + { + password = password.Substring( 0, Math.Min( password.Length, maxPasswordLength ) ); + var byteChars = new byte[ password.Length ]; + + for( int i = 0; i < password.Length; i++ ) + { + var temp = Convert.ToInt32( password[ i ] ); + byteChars[ i ] = Convert.ToByte( temp & 0x00FF ); + + if( byteChars[ i ] == 0 ) + { + byteChars[ i ] = Convert.ToByte( ( temp & 0x00FF ) >> 8 ); + } + } + + var intHighOrderWord = InitialCodeArray[ byteChars.Length - 1 ]; + + for( int i = 0; i < byteChars.Length; i++ ) + { + int tmp = maxPasswordLength - byteChars.Length + i; + for( int intBit = 0; intBit < 7; intBit++ ) + { + if( ( byteChars[ i ] & ( 0x0001 << intBit ) ) != 0 ) + { + intHighOrderWord ^= EncryptionMatrix[ tmp, intBit ]; + } + } + } + + int intLowOrderWord = 0; + + // For each character in the strPassword, going backwards + for( int i = byteChars.Length - 1; i >= 0; i-- ) + { + intLowOrderWord = ( ( ( intLowOrderWord >> 14 ) & 0x0001 ) | ( ( intLowOrderWord << 1 ) & 0x7FFF ) ) ^ byteChars[ i ]; + } + + intLowOrderWord = ( ( ( intLowOrderWord >> 14 ) & 0x0001 ) | ( ( intLowOrderWord << 1 ) & 0x7FFF ) ) ^ byteChars.Length ^ 0xCE4B; + + // Combine the Low and High Order Word + var intCombinedkey = ( intHighOrderWord << 16 ) + intLowOrderWord; + + // The byte order of the result shall be reversed [Example: 0x64CEED7E becomes 7EEDCE64. end example], + // and that value shall be hashed as defined by the attribute values. + + for( int i = 0; i < 4; i++ ) + { + keyValues[ i ] = Convert.ToByte( ( ( uint )( intCombinedkey & ( 0x000000FF << ( i * 8 ) ) ) ) >> ( i * 8 ) ); + } + } + + var sb = new StringBuilder(); + for( int intTemp = 0; intTemp < 4; intTemp++ ) + { + sb.Append( Convert.ToString( keyValues[ intTemp ], 16 ) ); + } + + keyValues = Encoding.Unicode.GetBytes( sb.ToString().ToUpper() ); + keyValues = MergeArrays( keyValues, saltArray ); + + int iterations = 100000; + + var sha1 = new SHA1Managed(); + keyValues = sha1.ComputeHash( keyValues ); + var iterator = new byte[ 4 ]; + for( int i = 0; i < iterations; i++ ) + { + iterator[ 0 ] = Convert.ToByte( ( i & 0x000000FF ) >> 0 ); + iterator[ 1 ] = Convert.ToByte( ( i & 0x0000FF00 ) >> 8 ); + iterator[ 2 ] = Convert.ToByte( ( i & 0x00FF0000 ) >> 16 ); + iterator[ 3 ] = Convert.ToByte( ( i & 0xFF000000 ) >> 24 ); + + keyValues = MergeArrays( iterator, keyValues ); + keyValues = sha1.ComputeHash( keyValues ); + } + + Encryption encryption = new Encryption() + { + Iterations = iterations, + KeyValues = keyValues, + SaltArray = saltArray + }; + + return encryption; + } + + private byte[] MergeArrays( byte[] array1, byte[] array2 ) + { + byte[] result = new byte[ array1.Length + array2.Length ]; + Buffer.BlockCopy( array2, 0, result, 0, array2.Length ); + Buffer.BlockCopy( array1, 0, result, array2.Length, array1.Length ); + return result; + } + + #endregion + } } diff --git a/Xceed.Document.NET/Src/Formatting.cs b/Xceed.Document.NET/Src/Formatting.cs index 97a6aaf5..32dd812c 100644 --- a/Xceed.Document.NET/Src/Formatting.cs +++ b/Xceed.Document.NET/Src/Formatting.cs @@ -858,10 +858,10 @@ public static Formatting Parse( XElement rPr, Formatting formatting = null ) formatting.Script = Enum.TryParse( script, out enumScript ) ? enumScript : NET.Script.none; break; case "caps": - formatting.CapsStyle = ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "0" ) ? NET.CapsStyle.none : NET.CapsStyle.caps; + formatting.CapsStyle = ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "0" ) || ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "false" ) ? NET.CapsStyle.none : NET.CapsStyle.caps; break; case "smallCaps": - formatting.CapsStyle = ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "0" ) ? NET.CapsStyle.none : NET.CapsStyle.smallCaps; + formatting.CapsStyle = ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "0" ) || ( option.GetAttribute( XName.Get( "val", Document.w.NamespaceName ) ) == "false" ) ? NET.CapsStyle.none : NET.CapsStyle.smallCaps; break; case "shd": var fill = option.GetAttribute( XName.Get( "fill", Document.w.NamespaceName ) ); diff --git a/Xceed.Document.NET/Src/HelperFunctions.cs b/Xceed.Document.NET/Src/HelperFunctions.cs index 2c18fe4f..4b9abc0e 100644 --- a/Xceed.Document.NET/Src/HelperFunctions.cs +++ b/Xceed.Document.NET/Src/HelperFunctions.cs @@ -521,36 +521,32 @@ internal static XElement CreateEdit( EditType t, DateTime edit_time, object cont ); } - internal static XElement CreateTable( int rowCount, int columnCount ) + internal static XElement CreateTable( int rowCount, int columnCount, double tableWidth ) { if( ( rowCount <= 0 ) || ( columnCount <= 0 ) ) { throw new ArgumentOutOfRangeException( "Row and Column count must be greater than 0." ); } - - int[] columnWidths = new int[ columnCount ]; - for( int i = 0; i < columnCount; i++ ) + if( tableWidth <= 0d ) { - columnWidths[ i ] = 2310; + throw new ArgumentOutOfRangeException( "tableWidth must be greater than 0." ); } - return CreateTable( rowCount, columnWidths ); - } - internal static XElement CreateTable( int rowCount, int[] columnWidths ) - { var newTable = new XElement( XName.Get( "tbl", Document.w.NamespaceName ), new XElement( XName.Get( "tblPr", Document.w.NamespaceName ), new XElement( XName.Get( "tblStyle", Document.w.NamespaceName ), new XAttribute( XName.Get( "val", Document.w.NamespaceName ), "TableGrid" ) ), new XElement( XName.Get( "tblW", Document.w.NamespaceName ), new XAttribute( XName.Get( "w", Document.w.NamespaceName ), "5000" ), new XAttribute( XName.Get( "type", Document.w.NamespaceName ), "auto" ) ), new XElement( XName.Get( "tblLook", Document.w.NamespaceName ), new XAttribute( XName.Get( "val", Document.w.NamespaceName ), "04A0" ) ) ) ); + var columnWidth = ( tableWidth / columnCount ) * 20d; + for( int i = 0; i < rowCount; i++ ) { var row = new XElement( XName.Get( "tr", Document.w.NamespaceName ) ); - for( int j = 0; j < columnWidths.Length; j++ ) + for( int j = 0; j < columnCount; j++ ) { - var cell = HelperFunctions.CreateTableCell(); + var cell = HelperFunctions.CreateTableCell( columnWidth ); row.Add( cell ); } @@ -1167,7 +1163,7 @@ internal static Border GetBorderFromXml( XElement xml ) return new Border( borderStyle, borderSize, borderSpace, borderColor ); } - internal static void UpdateParagraphFromStyledParagraph( Paragraph p, Paragraph styledParagraph ) + internal static void UpdateParagraphFromStyledParagraph( Paragraph p, Paragraph styledParagraph, bool overrideParagraphProperties = false ) { if( ( p == null ) || ( styledParagraph == null ) ) return; @@ -1198,12 +1194,22 @@ internal static void UpdateParagraphFromStyledParagraph( Paragraph p, Paragraph } } } - // Paragraph contains the property, add the missing attributes from this property. - foreach( var att in styleParagraphElement.Attributes() ) + + // Paragraph contains the property, override this property in the paragraph. + if( overrideParagraphProperties ) + { + paragraphElement.Remove(); + paragraph_Ppr.Add( styleParagraphElement ); + } + else { - if( paragraphElement.Attribute( att.Name ) == null && p.CanAddAttribute( att ) ) + // Paragraph contains the property, add the missing attributes from this property. + foreach( var att in styleParagraphElement.Attributes() ) { - paragraphElement.Add( att ); + if( paragraphElement.Attribute( att.Name ) == null && p.CanAddAttribute( att ) ) + { + paragraphElement.Add( att ); + } } } } @@ -1222,12 +1228,21 @@ internal static void UpdateParagraphFromStyledParagraph( Paragraph p, Paragraph } else { - // Paragraph contains the property, add the missing attributes from this property. - foreach( var att in styleParagraphElement.Attributes() ) + // Paragraph contains the property, override this property in the paragraph. + if( overrideParagraphProperties ) + { + runElement.Remove(); + paragraph_rPr.Add( styleParagraphElement ); + } + else { - if( runElement.Attribute( att.Name ) == null ) + // Paragraph contains the property, add the missing attributes from this property. + foreach( var att in styleParagraphElement.Attributes() ) { - runElement.Add( att ); + if( runElement.Attribute( att.Name ) == null ) + { + runElement.Add( att ); + } } } } diff --git a/Xceed.Document.NET/Src/Paragraph.cs b/Xceed.Document.NET/Src/Paragraph.cs index 5f80950c..ec9e64f8 100644 --- a/Xceed.Document.NET/Src/Paragraph.cs +++ b/Xceed.Document.NET/Src/Paragraph.cs @@ -42,7 +42,7 @@ public class Paragraph : InsertBeforeOrAfter internal List _styles = new List(); internal const float DefaultSingleLineSpacing = 12f; - private static float DefaultLineSpacing = Paragraph.DefaultSingleLineSpacing; + internal static float DefaultLineSpacing = Paragraph.DefaultSingleLineSpacing; private static float DefaultLineSpacingAfter = 0f; private static float DefaultLineSpacingBefore = 0f; private static bool DefaultLineRuleAuto = false; @@ -1604,18 +1604,20 @@ public void Remove( bool trackChanges ) if( temp.Count() > 0 ) Xml.Add( CreateEdit( EditType.del, now, temp ) ); } - else { - // If this is the only Paragraph in the Cell then we cannot remove it. - if( Xml.Parent.Name.LocalName == "tc" && Xml.Parent.Elements( XName.Get( "p", Document.w.NamespaceName ) ).Count() == 1 ) - Xml.Value = string.Empty; - + // If this is the only Paragraph in the Cell(nothing else than a paragraph) then we cannot remove it. + if( ( this.Xml.Parent.Name.LocalName == "tc" ) + && ( this.Xml.Parent.Elements( XName.Get( "p", Document.w.NamespaceName ) ).Count() == 1 ) + && ( this.Xml.Parent.Elements( XName.Get( "altChunk", Document.w.NamespaceName ) ).Count() == 0 ) ) + { + this.Xml.Value = string.Empty; + } else { // Remove this paragraph from the document - Xml.Remove(); - Xml = null; + this.Xml.Remove(); + this.Xml = null; } } } @@ -2328,6 +2330,22 @@ select e.Attribute( XName.Get( "embed", "http://schemas.openxmlformats.org/offic + public Paragraph NextParagraph + { + get + { + return this.Document.GetNextParagraph( this ); + } + } + + public Paragraph PreviousParagraph + { + get + { + return this.Document.GetPreviousParagraph( this ); + } + } + /// /// Add an equation to a document. /// @@ -4244,7 +4262,7 @@ public void SetLineSpacing( LineSpacingType spacingType, float spacingFloat ) var spacingTypeAttribute = ( spacingType == LineSpacingType.Before ) ? "before" : ( spacingType == LineSpacingType.After ) ? "after" : "line"; - spacing.SetAttributeValue( XName.Get( spacingTypeAttribute, Document.w.NamespaceName ), (int)( spacingFloat * 20f ) ); + spacing.SetAttributeValue( XName.Get( spacingTypeAttribute, Document.w.NamespaceName ), ( int )( spacingFloat * 20f ) ); } /// @@ -4327,86 +4345,111 @@ public bool ValidateBookmark( string bookmarkName ) public IEnumerable GetBookmarks() { - return Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) - .Select( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) ) ) - .Select( x => new Bookmark - { - Name = x.Value, - Paragraph = this - } ); - } + var bookmarks = new List(); - public void InsertAtBookmark( string toInsert, string bookmarkName, Formatting formatting = null ) - { - var bookmark = Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) - .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value == bookmarkName ).SingleOrDefault(); - if( bookmark != null ) - { - var run = HelperFunctions.FormatInput( toInsert, ( formatting != null ) ? formatting.Xml : null ); - bookmark.AddBeforeSelf( run ); - _runs = this.Xml.Elements( XName.Get( "r", Document.w.NamespaceName ) ).ToList(); - HelperFunctions.RenumberIDs( Document ); - } - } - - /// - /// Paragraph that will be kept on the same page as the next paragraph. - /// - /// - /// - public Paragraph KeepWithNextParagraph( bool keepWithNextParagraph = true ) - { - var pPr = GetOrCreate_pPr(); - var keepNextElement = pPr.Element( XName.Get( "keepNext", Document.w.NamespaceName ) ); + var bookmarksStartXml = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ); + var bookmarksEndXml = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ); - if( keepNextElement == null && keepWithNextParagraph ) + foreach( var bookmarkStartXml in bookmarksStartXml ) { - pPr.Add( new XElement( XName.Get( "keepNext", Document.w.NamespaceName ) ) ); + bookmarks.Add( new Bookmark() + { + Name = bookmarkStartXml.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value, + Id = bookmarkStartXml.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value, + Paragraph = this + } ); } - if( !keepWithNextParagraph && keepNextElement != null ) + foreach( var bookmarkEndXml in bookmarksEndXml ) { - keepNextElement.Remove(); + var id = bookmarkEndXml.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + + // bookmarkStart is not part of this Paragraph, find it in Document. + if( bookmarks.Where( b => b.Id == id ).Count() == 0 ) + { + var bookmarkStart = this.Document.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "id", Document.w.NamespaceName ) )?.Value == id ) + .FirstOrDefault(); + + if( bookmarks != null ) + { + bookmarks.Add( new Bookmark() + { + Name = bookmarkStart.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value, + Id = id, + Paragraph = this + } ); + } + } } - return this; + return bookmarks; } - /// - /// Paragraph with lines that will stay together on the same page. - /// - /// - /// - public Paragraph KeepLinesTogether( bool keepLinesTogether = true ) + /// Inserts the provided text at a bookmark location in this Paragraph, using the specified formatting. + public void InsertAtBookmark( string toInsert, string bookmarkName, Formatting formatting = null ) { - var pPr = GetOrCreate_pPr(); - var keepLinesElement = pPr.Element( XName.Get( "keepLines", Document.w.NamespaceName ) ); + var bookmark = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value == bookmarkName ).SingleOrDefault(); + var refPosition = bookmark; - if( keepLinesElement == null && keepLinesTogether ) + // bookmarkStart is not part of this paragraph, look for it in Document. + if( bookmark == null ) { - pPr.Add( new XElement( XName.Get( "keepLines", Document.w.NamespaceName ) ) ); + var bookmarkStart = this.Document.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) )?.Value == bookmarkName ) + .FirstOrDefault(); + if( bookmarkStart != null ) + { + var bookmarkStartId = bookmarkStart.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + + bookmark = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value == bookmarkStartId ).SingleOrDefault(); + if( bookmark != null ) + { + refPosition = this.Xml.Element( XName.Get( "r", Document.w.NamespaceName ) ); + } + } } - if( !keepLinesTogether ) + if( refPosition != null ) { - keepLinesElement?.Remove(); + var run = HelperFunctions.FormatInput( toInsert, ( formatting != null ) ? formatting.Xml : null ); + refPosition.AddBeforeSelf( run ); + _runs = this.Xml.Elements( XName.Get( "r", Document.w.NamespaceName ) ).ToList(); + HelperFunctions.RenumberIDs( Document ); } - - return this; } + /// Replaces the text of the Bookmark in this Paragraph. Equivalent to document.Bookmarks[ "abc" ].SetText("new ABC"); public void ReplaceAtBookmark( string text, string bookmarkName, Formatting formatting = null ) { + string bookmarkStartId = null; + XNode nextNode = null; + var rList = new List(); var bookmarkStart = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value == bookmarkName ) .FirstOrDefault(); - if( bookmarkStart == null ) - return; + if( bookmarkStart != null ) + { + bookmarkStartId = bookmarkStart.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + nextNode = bookmarkStart.NextNode; + } + // bookmarkStart is not in paragraph, look for bookmarkEnd. + else + { + var bookmarkEnds = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ); + if( bookmarkEnds.Count() > 1 ) + throw new InvalidDataException("Unsupported exception: Paragraph do not contains the expected bookmarkStart and contains more than 1 bookmarkEnd."); + if( bookmarkEnds.Count() == 0 ) + throw new InvalidDataException( "Unsupported exception: Paragraph do not contains a bookmarkStart or a bookmarkEnd." ); - var bookmarkStartId = bookmarkStart.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + bookmarkStartId = bookmarkEnds.First().Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + nextNode = this.Xml.Element( XName.Get( "r", Document.w.NamespaceName ) ); + bookmarkStart = this.Xml.Element( XName.Get( "pPr", Document.w.NamespaceName ) ); + } - var nextNode = bookmarkStart.NextNode; XElement nextXElement = null; while( nextNode != null ) { @@ -4450,7 +4493,7 @@ public void ReplaceAtBookmark( string text, string bookmarkName, Formatting form { if( !tXElementFilled ) { - this.ReplaceAtBookmark_Core( text, tXElement, formatting ); + this.ReplaceAtBookmark_Core( text, r, formatting ); if( formatting != null ) { var rPr = r.Element( XName.Get( "rPr", Document.w.NamespaceName ) ); @@ -4468,23 +4511,77 @@ public void ReplaceAtBookmark( string text, string bookmarkName, Formatting form public void RemoveBookmark( string bookmarkName ) { - var bookmarkStart = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) + var bookmarkStartXml = this.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) ).Value == bookmarkName ) .FirstOrDefault(); - if( bookmarkStart == null ) + // bookmarkStart is not part of this paragraph, look for it in Document. + if( bookmarkStartXml == null ) + { + bookmarkStartXml = this.Document.Xml.Descendants( XName.Get( "bookmarkStart", Document.w.NamespaceName ) ) + .Where( x => x.Attribute( XName.Get( "name", Document.w.NamespaceName ) )?.Value == bookmarkName ) + .FirstOrDefault(); + } + + if( bookmarkStartXml == null ) return; - var bookmarkStartId = bookmarkStart.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; + var bookmarkStartId = bookmarkStartXml.Attribute( XName.Get( "id", Document.w.NamespaceName ) ).Value; - var bookmarkEnd = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ) + var bookmarkEndXml = this.Xml.Descendants( XName.Get( "bookmarkEnd", Document.w.NamespaceName ) ) .Where( x => x.Attribute( XName.Get( "id", Document.w.NamespaceName ) )?.Value == bookmarkStartId ) .FirstOrDefault(); - Debug.Assert( bookmarkEnd != null, "Can't find bookmark end."); + Debug.Assert( bookmarkEndXml != null, "Can't find bookmark end."); - bookmarkStart.Remove(); - bookmarkEnd.Remove(); + bookmarkStartXml.Remove(); + bookmarkEndXml.Remove(); } + /// + /// Paragraph that will be kept on the same page as the next paragraph. + /// + /// + /// + public Paragraph KeepWithNextParagraph( bool keepWithNextParagraph = true ) + { + var pPr = GetOrCreate_pPr(); + var keepNextElement = pPr.Element( XName.Get( "keepNext", Document.w.NamespaceName ) ); + + if( keepNextElement == null && keepWithNextParagraph ) + { + pPr.Add( new XElement( XName.Get( "keepNext", Document.w.NamespaceName ) ) ); + } + + if( !keepWithNextParagraph && keepNextElement != null ) + { + keepNextElement.Remove(); + } + + return this; + } + + /// + /// Paragraph with lines that will stay together on the same page. + /// + /// + /// + public Paragraph KeepLinesTogether( bool keepLinesTogether = true ) + { + var pPr = GetOrCreate_pPr(); + var keepLinesElement = pPr.Element( XName.Get( "keepLines", Document.w.NamespaceName ) ); + + if( keepLinesElement == null && keepLinesTogether ) + { + pPr.Add( new XElement( XName.Get( "keepLines", Document.w.NamespaceName ) ) ); + } + + if( !keepLinesTogether ) + { + keepLinesElement?.Remove(); + } + + return this; + } + [Obsolete( "Instead use : InsertHorizontalLine( HorizontalBorderPosition position, BorderStyle borderStyle, int size, int space, Color? color )" )] public void InsertHorizontalLine( HorizontalBorderPosition position = HorizontalBorderPosition.bottom, string lineType = "single", int size = 6, int space = 1, string color = "auto" ) { @@ -5136,6 +5233,23 @@ internal bool IsLineSpacingRuleAuto() return Paragraph.DefaultLineRuleAuto; } + internal bool IsLineSpacingRuleExactlyOrAtLeast() + { + var pPr = GetOrCreate_pPr(); + var spacing = pPr.Element( XName.Get( "spacing", Document.w.NamespaceName ) ); + + if( spacing != null ) + { + var lineRule = spacing.Attribute( XName.Get( "lineRule", Document.w.NamespaceName ) ); + if( lineRule != null ) + { + return ( (lineRule.Value == "exact") || ( lineRule.Value == "atLeast" ) ); + } + } + + return false; + } + internal void ClearMagicTextCache() { _magicText = null; diff --git a/Xceed.Document.NET/Src/Picture.cs b/Xceed.Document.NET/Src/Picture.cs index ce3de028..a057fb48 100644 --- a/Xceed.Document.NET/Src/Picture.cs +++ b/Xceed.Document.NET/Src/Picture.cs @@ -372,7 +372,8 @@ select a if( widthIndex >= 0 ) { var widthValueString = widthString.Substring( 0, widthIndex ); - _cx = long.Parse( widthValueString, CultureInfo.InvariantCulture ) * EmusInPixel; + var widthDouble = double.Parse( widthValueString, CultureInfo.InvariantCulture ) * EmusInPixel; + _cx = System.Convert.ToInt64( widthDouble ); } } } @@ -403,7 +404,8 @@ select a if( heightIndex >= 0 ) { var heightValueString = heightString.Substring( 0, heightIndex ); - _cy = long.Parse( heightValueString, CultureInfo.InvariantCulture ) * EmusInPixel; + var heightDouble = double.Parse( heightValueString, CultureInfo.InvariantCulture ) * EmusInPixel; + _cy = System.Convert.ToInt64( heightDouble ); } } } diff --git a/Xceed.Document.NET/Src/Section.cs b/Xceed.Document.NET/Src/Section.cs index de5bbbd4..346dabd8 100644 --- a/Xceed.Document.NET/Src/Section.cs +++ b/Xceed.Document.NET/Src/Section.cs @@ -856,8 +856,6 @@ private Section InsertSection( bool trackChanges, bool isPageBreak ) this.Document.SaveHeadersFooters(); var sctPr = new XElement( this.Xml ); - this.Xml.Elements( XName.Get( "headerReference", Document.w.NamespaceName ) ).Remove(); - this.Xml.Elements( XName.Get( "footerReference", Document.w.NamespaceName ) ).Remove(); if( !isPageBreak ) { sctPr.Add( new XElement( XName.Get( "type", Document.w.NamespaceName ), new XAttribute( Document.w + "val", "continuous" ) ) ); @@ -865,7 +863,7 @@ private Section InsertSection( bool trackChanges, bool isPageBreak ) if( isLastSection ) { - var currentSection = new XElement( XName.Get( "p", Document.w.NamespaceName ), new XElement( XName.Get( "pPr", Document.w.NamespaceName ), this.Xml ) ); + var currentSection = new XElement( XName.Get( "p", Document.w.NamespaceName ), new XElement( XName.Get( "pPr", Document.w.NamespaceName ), sctPr ) ); if( this.SectionParagraphs.Count > 0 ) { this.SectionParagraphs.Last().Xml.AddAfterSelf( currentSection ); diff --git a/Xceed.Document.NET/Src/Table.cs b/Xceed.Document.NET/Src/Table.cs index e6f3a249..722f29d3 100644 --- a/Xceed.Document.NET/Src/Table.cs +++ b/Xceed.Document.NET/Src/Table.cs @@ -981,7 +981,7 @@ internal Table( Document document, XElement xml, PackagePart packagePart ) var tblGrid = xml.Element( XName.Get( "tblGrid", Document.w.NamespaceName ) ); if( tblGrid == null ) { - this.SetColumnWidth(); + this.SetColumnWidth(0, -1, false); } var alignment = properties?.Element( XName.Get( "jc", Document.w.NamespaceName ) ); @@ -1513,22 +1513,30 @@ public void InsertColumn( int index, bool direction ) if( ( index < 0 ) || ( index >= colCount ) ) throw new NullReferenceException( "index should be greater or equal to 0 and smaller to this.ColumnCount." ); + var rows = this.Rows; + var firstRow = rows[ 0 ]; + + var newColumnWidth = direction + ? ( index < firstRow.Cells.Count - 1 ) ? firstRow.Cells[ index + 1 ].Width : firstRow.Cells[ index ].Width + : firstRow.Cells[ index ].Width; + if( this.RowCount > 0 ) { _cachedColumnCount = -1; - foreach( Row r in this.Rows ) + + foreach( var row in rows ) { - // create cell + // create cell (width will be set lower) var cell = HelperFunctions.CreateTableCell(); // insert cell - if( r.Cells.Count < colCount ) + if( row.Cells.Count < colCount ) { - int gridAfterValue = r.GridAfter; + int gridAfterValue = row.GridAfter; int currentPosition = 0; int posIndex = 0; - foreach( var rowCell in r.Cells ) + foreach( var rowCell in row.Cells ) { int gridSpanValue = ( rowCell.GridSpan != 0 ) ? rowCell.GridSpan - 1 : 0; @@ -1537,7 +1545,7 @@ public void InsertColumn( int index, bool direction ) && ( ( index - gridAfterValue ) <= ( currentPosition + gridSpanValue ) ) ) { var dir = ( direction && ( index == ( currentPosition + gridSpanValue ) ) ); - this.AddCellToRow( r, cell, posIndex, dir ); + this.AddCellToRow( row, cell, posIndex, dir ); break; } @@ -1547,9 +1555,15 @@ public void InsertColumn( int index, bool direction ) } else { - this.AddCellToRow( r, cell, index, direction ); + this.AddCellToRow( row, cell, index, direction ); } - } + } + + var newWidths = new List( colCount + 1 ); + this.ColumnWidths.ForEach( pWidth => newWidths.Add( Convert.ToSingle( pWidth ) ) ); + newWidths.Insert( index, Convert.ToSingle( newColumnWidth ) ); + + this.SetWidths( newWidths.ToArray(), false ); } } @@ -1582,13 +1596,13 @@ public override void InsertPageBreakBeforeSelf() base.InsertPageBreakBeforeSelf(); } - public void SetWidths( float[] widths ) + public void SetWidths( float[] widths, bool fixWidths = true ) { if( widths == null ) return; var totalTableWidth = widths.Sum(); - var availableWidth = this.Document.PageWidth - this.Document.MarginLeft - this.Document.MarginRight; + var availableWidth = this.Document.GetAvailableWidth(); // Using autoFit and total columns size exceed page size => use a percentage of the page. if( ( this.AutoFit != AutoFit.Fixed ) && ( totalTableWidth > availableWidth ) ) { @@ -1597,13 +1611,13 @@ public void SetWidths( float[] widths ) { newWidths.Add( pWidth / totalTableWidth * 100 ); } ); - this.SetWidthsPercentage( newWidths.ToArray(), availableWidth ); + this.SetWidthsPercentage( newWidths.ToArray(), Convert.ToSingle( availableWidth ) ); } else { for( int i = 0; i < widths.Length; ++i ) { - this.SetColumnWidth( i, widths[ i ] ); + this.SetColumnWidth( i, widths[ i ], fixWidths ); } } } @@ -1611,7 +1625,9 @@ public void SetWidths( float[] widths ) public void SetWidthsPercentage( float[] widthsPercentage, float? totalWidth = null ) { if( totalWidth == null ) - totalWidth = this.Document.PageWidth - this.Document.MarginLeft - this.Document.MarginRight; + { + totalWidth = Convert.ToSingle( this.Document.GetAvailableWidth() ); + } List widths = new List( widthsPercentage.Length ); widthsPercentage.ToList().ForEach( pWidth => @@ -1621,7 +1637,7 @@ public void SetWidthsPercentage( float[] widthsPercentage, float? totalWidth = n //Case 173653 : Using SetColumnWidth instead of SetWidths() to update gridCol in XML. for( int i = 0; i < widths.Count; ++i ) { - this.SetColumnWidth( i, widths[ i ] ); + this.SetColumnWidth( i, widths[ i ], false ); } } @@ -2327,7 +2343,7 @@ public Double GetColumnWidth( Int32 columnIndex ) return columnWidths[ columnIndex ]; } - public void SetColumnWidth( int columnIndex = 0, double width = -1 ) + public void SetColumnWidth( int columnIndex = 0, double width = -1, bool fixWidth = true ) { var columnWidths = this.ColumnWidths; if( columnWidths == null || ( columnIndex > columnWidths.Count - 1 ) ) @@ -2336,7 +2352,8 @@ public void SetColumnWidth( int columnIndex = 0, double width = -1 ) throw new Exception( "There is at least one row required to detect the existing columns." ); columnWidths = new List(); - foreach( Cell c in Rows[ Rows.Count - 1 ].Cells ) + var cells = this.Rows[0].Cells; + foreach( var c in cells ) { columnWidths.Add( c.Width ); } @@ -2344,7 +2361,7 @@ public void SetColumnWidth( int columnIndex = 0, double width = -1 ) // When some column are NaN, use a width based on the available page width. if( columnWidths.Contains( double.NaN ) ) { - var availablePageSpace = this.Document.PageWidth - this.Document.MarginLeft - this.Document.MarginRight; + var availablePageSpace = this.Document.GetAvailableWidth(); var knownWidth = columnWidths.Where( c => !double.IsNaN( c ) ); var columnSpaceUsed = knownWidth.Sum(); var availableSpace = availablePageSpace - columnSpaceUsed; @@ -2392,19 +2409,22 @@ public void SetColumnWidth( int columnIndex = 0, double width = -1 ) index += 1; } - // remove cell widths + // remove cell width if( width >= 0 ) { - foreach( Row row in this.Rows ) + foreach( var row in this.Rows ) { - foreach( Cell cell in row.Cells ) + if( columnIndex < row.Cells.Count ) { - cell.Width = -1; + row.Cells[ columnIndex ].Width = width; } } - // set AutoFit to Fixed - this.AutoFit = AutoFit.Fixed; + if( fixWidth ) + { + // set AutoFit to Fixed + this.AutoFit = AutoFit.Fixed; + } } } diff --git a/Xceed.Document.NET/Src/_BaseClasses.cs b/Xceed.Document.NET/Src/_BaseClasses.cs index c10ac031..d447a833 100644 --- a/Xceed.Document.NET/Src/_BaseClasses.cs +++ b/Xceed.Document.NET/Src/_BaseClasses.cs @@ -84,6 +84,15 @@ public DocumentElement( Document document, XElement xml ) } #endregion + + #region Internal Methods + + internal double GetAvailableWidth() + { + return Convert.ToDouble( this.Document.PageWidth - this.Document.MarginLeft - this.Document.MarginRight ); + } + + #endregion } /// @@ -250,7 +259,7 @@ public virtual Paragraph InsertParagraphAfterSelf( string text, bool trackChange public virtual Table InsertTableAfterSelf( int rowCount, int columnCount ) { - var newTable = HelperFunctions.CreateTable( rowCount, columnCount ); + var newTable = HelperFunctions.CreateTable( rowCount, columnCount, this.GetAvailableWidth() ); Xml.AddAfterSelf( newTable ); var newlyInserted = this.Xml.ElementsAfterSelf().First(); @@ -273,7 +282,7 @@ public virtual Table InsertTableAfterSelf( Table t ) public virtual Table InsertTableBeforeSelf( int rowCount, int columnCount ) { - var newTable = HelperFunctions.CreateTable( rowCount, columnCount ); + var newTable = HelperFunctions.CreateTable( rowCount, columnCount, this.GetAvailableWidth() ); this.Xml.AddBeforeSelf( newTable ); var newlyInserted = this.Xml.ElementsBeforeSelf().Last(); diff --git a/Xceed.Words.NET.Examples/Program.cs b/Xceed.Words.NET.Examples/Program.cs index 5ef46b7a..ff652a00 100644 --- a/Xceed.Words.NET.Examples/Program.cs +++ b/Xceed.Words.NET.Examples/Program.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to use the different features when using the API from the Xceed Words for .NET. @@ -112,6 +112,7 @@ private static void Main( string[] args ) //Protection ProtectionSample.AddPasswordProtection(); ProtectionSample.AddProtection(); + ProtectionSample.ChangePasswordProtection(); //Parallel ParallelSample.DoParallelActions(); @@ -123,7 +124,8 @@ private static void Main( string[] args ) MiscellaneousSample.MailMerge(); //PDF - PdfSample.ConvertToPDF(); + PdfSample.ConvertToPDFWithUninstalledFont(); + PdfSample.ConvertToPDF(); //Shape ShapeSample.AddShape(); @@ -135,6 +137,10 @@ private static void Main( string[] args ) CheckBoxSample.ModifyCheckBox(); CheckBoxSample.AddCheckBox(); + //Hyphenation + HyphenationSample.CreateHyphenation(); + HyphenationSample.UpdateHyphenation(); + Console.WriteLine( "\nDone running Examples of Xceed Words for .NET version " + versionNumber + ".\n" ); Console.WriteLine( "\nPress any key to exit." ); Console.ReadKey(); diff --git a/Xceed.Words.NET.Examples/Properties/AssemblyInfo.cs b/Xceed.Words.NET.Examples/Properties/AssemblyInfo.cs index cfa7144c..f8827635 100644 --- a/Xceed.Words.NET.Examples/Properties/AssemblyInfo.cs +++ b/Xceed.Words.NET.Examples/Properties/AssemblyInfo.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – AssemblyInfo -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to create docx files when using the API from the Xceed Words for .NET. @@ -20,7 +20,7 @@ [assembly: AssemblyCompany( "Xceed Software Inc." )] [assembly: AssemblyProduct( "Xceed Words for .NET" )] -[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2020" )] +[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2021" )] [assembly: AssemblyCulture( "" )] // Setting ComVisible to false makes the types in this assembly not visible @@ -47,5 +47,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion( "1.7.0.0" )] -[assembly: AssemblyFileVersion( "1.7.0.0" )] +[assembly: AssemblyVersion( "1.8.0.0" )] +[assembly: AssemblyFileVersion( "1.8.0.0" )] diff --git a/Xceed.Words.NET.Examples/Samples/Bookmark/BookmarkSample.cs b/Xceed.Words.NET.Examples/Samples/Bookmark/BookmarkSample.cs index 472fe52c..c78f266f 100644 --- a/Xceed.Words.NET.Examples/Samples/Bookmark/BookmarkSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Bookmark/BookmarkSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Bookmark Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to create or replace a bookmark when using the API from the Xceed Words for .NET. @@ -73,7 +73,7 @@ public static void InsertBookmarks() p2.Append( document.Bookmarks.Last().Name ); p2.Append( "\" but displayed as \"" + _displayedBookmarkName + "\"." ); - // Set a string to be displayed as the Bookmark in the second paragraph. + // Inserts the provided text at a bookmark location in this Paragraph. p2.InsertAtBookmark( _displayedBookmarkName, _bookmarkName ); document.Save(); diff --git a/Xceed.Words.NET.Examples/Samples/Bookmark/Output/InsertBookmarks.docx b/Xceed.Words.NET.Examples/Samples/Bookmark/Output/InsertBookmarks.docx index a659dff8ef342f030a155a78a5995b4ee2bfd97f..8a25cc90fc6bff259f871f99427e13b7245e8084 100644 GIT binary patch delta 505 zcmZ3evq*<8z?+#xgn@y9gMq_)Q_x1fuS^^uhTqD&Up8|yTQVA@CZ(BLCa0MjnkOZj zn3^UkDd^kT=m(|dB$j06=M`sU78Kh-3}J#Avbl_9GKVn8l<8b&7k>a69>B!FAj2Rt zSx;1UvL&y4ecoXO0k`!{H?H5%JC-Lp$=Cd@+fIhIgWIy|SS&KnU32ZfqAd~{_;gEb z$z)aI!;jCZ+ugfozB}A_v2u%r<>|uEDH4rS{d~(FRCxYccX;>PH2%#Vl}de+`!(V> zPJC>r`rpH2in4?t_w$3#`pOP=OzBTlh&v%}$guMCq=_5S9%R?6Sf@*8x%v~fQ2Lg5fYXL3=IW9%x|Wr<(bSlqkL|Gnp>m)B7V(a^ZrcYIFjEo+}3 z{5SLK-H1-p*xQ$u={cHC+O}%<(ukHRpI-03yz5GMRPO!kWu_rgSzfAtFDZrpPx{S? z8anY)|85TDo508d3ZTs|`F)`*D?vGCu-N1n5o>rHOr9@d2ob#^V#x^))5&6@ju7E! tQ7L9uK8DGOe8Q8vMR_2CvqhyC?@Zn%ss!QQ0djRGe-~9@^94mU0|0Ie!wLWZ delta 499 zcmZ3avrvaGz?+#xgn@y9gTckdEN~;=S0)Y+L+K)S(`IgFOGYC@BSRC5L=!Vpvm|p9 z(-bo$1${dk{h-vG#FEVXyyA?^f?_*}Axuz1HkYwX<`4#%GId2#`+K0_0Za@GG7K`4 z^+jbTTk^`+`yDnAa9f{rcHRw7pR9$;?runo{>s#6>$ga4TdK9g`D0DWg{(Ru3q>L} zyez8w^X%nh`+N7c|Gr+SbY9}oiyZFMgAEHp{rb1%Cwe~fJ5aaX_JK<9y^g~#lu!ES zfDOBRdREPdR-dSpTZ$HxKP&Qc~A=cBIu$dVKS7eaE>Ofe#l4 zpYAdH%ec&Nu6mC{pV5~YQ493-UU+XmVWQx_tJS%4PvX=|%l7G4h8HS)N%Jb3Y0YDK zaemnS=BYEXrldV}`>^a@!NCvHk_3ZKU9VqW`f~l}Rj%z#rah8Re6GYteR&oC#*Ps+ zaN?)_y}mh|ub+_x6hNC_@%utq)`D`(V6n-uBG&LYn7ly55F&b2#F7&prjx}*9U;Oo mqEd`5lgmXFA>27Y?(NCjMU^1jyFjkaaNxd&_9J%n@Wk%c8dkRrPH>dnrKIP@Dw||d*a*@01Ajo~1x8?4ioi_rr zwr+h@csVck%E1+T%nut&mVWPDQsuf;CTr*BCx1NURk>Ny1vENpKX@&lw2@aY{+uoN`mkH4l21?jA@#@Bm0|kqx~n_HZ#`SY7g1>acVcb*9%nw67ps{5 zotLsN{`L3blL;T+PK{5i;rn&X>eH{Q>>cXC8jm*4b0`&-rbWB=MzI%$D$rUs1c1r|4ZcMv=zE}LN@lNaA<^QAK`6v4A z)Ntmxc4P8k^V1$h-pk7$J*q4?yej6ZzMXHN^~Oim9?-Xp7B{xALM@6|2g~H-Tj*#c@5ZDKoP#VRM>zW!dfXM$q!*2({y1+OAg|O0Zg{MlVf?sCpQ@K zfR#<2U?|0yJbAUD9b@3+SBBn<;gijb)FD!dMpBH^C)XI+Fp5v!X=KMdUxQ)t0S%GK pe8y0{a>i1OTP9l?+cVwQp8Q{1Z1MzSEk^mtyN#9E%nTTS005c{FFgPN delta 679 zcmaEm{v>^a0w=GFjalI0n<~5hFf%ZyPS)i#5uN$GY1xXU3q2Z_yxkFh-}~(*S^dIg zo69&CFxIy^CiT9!apb~pml8=tv|PRd`(>JBB*xE`QhY`b8S{nZ=M!+jRpc(;V#Q*GZ{{kUGW{i(j3>!1D;N$=-w zvNBB#Ev&PCbSl4L-D|!%|6Yc4NTz$mf0}T_(B}L**Paz09X5NvIM)4c=AF5BceCn! zUv98GW{M(P_8Xs*4}YibTzc8M@UP8|#L#uGzDua)mpIxUIJ0?`Y@M8W`M>AS9`ips zbb|l!M3soM{CCy+c5Y=@_(ss+C12X*ZGRs+eLv0CSD3z}zP#nzCr%WJ^K0*ds_g~A5x5Y|#DNqz|HkfsYeT9Obp3}AGeoMNZ~ zRx!E9P>L&En1P`@zbHk&cygn$^yJfqQY@k33=EU=#pNddGT@mkY$V4RJ=w@e9ik=H zNQ!axsIgWci2G0b$e2!-yDKR93Q z>5}BWjkzS3CqgLtz$zsVZe}&fU-zCrUaVfful@~RzO#SafnDcb%u);V;mpVkSw4G~ zpPc-*FB|U9UGUt_XU8^aS|}BeyXnoZWX=&j z&bryVo^5aHq|d1>{{?uH)E}Nak;(A(KZEgeeOn8!b9c-hWS@%b4K0>pl~Q#Ny(}y? zd&>cvUT?)ss~Eg)WO-FdvE0~jv3m9UB*m~U9dE;P+CHISiTjq#V19r2_5SUq&$)G{ za_DJIxV`8IPisuD_qIE~s+VV5l%MRMVY}+dt3!GJUi{)G&DEI@l9rggw4`eI^L>!K4`bGJB)=YQDu;lm5z`S0a#|Gj--F?Ymu$=F90izFJSxs~qH z{P^Vca+&w#w}rnPY8PJj)~)@J=v%KlRrYqmk5ags3nofBwl6a)6R^w4b#_yXcVTV` zoF%wBrT#&+npM2}5B`f+O4T1GJTYnbR^QP1`MR8pTY94O2UWH8$5vVPGVv~6to6~e zXkt!R%W~GqiGc|&VZoO!2Q=~u*KYZxCzceF8mc65`Vp^xgx__M;s>=Af4^^eR9yb<*x6^GmklAZoF7~wS1%4W6dd*x-Oy1BNv^j?y7X)S^xjuwMpx@a0xcA zniTYM(Wytfb}XOvrsZ(-a_=1_ANyzAUj5_Ip>_XWeB%a(BPRnBG$1#}^G#-i1k*SE z1Sl&?P=*;IRwdHS0%lF-l(dEi_+%eRLx^ajq$N_w9+q^J2ZeL|)W6rg85tN#Sr{0E zfN_QZ0h5)b6v1kI|1WV72dYVCW?&FTC;+maPfnIn0;}1Z)+ln7iGd-Soq<6RMUD65 iB~l7tHP3S@J8gmXILI?Fh@q&-p8Qx!lkJBDNDu(FAkX;# delta 635 zcmbPeHpz@Hz?+#xgn@y9gTckdEN~;=2PO^><2d)1-J98%Eg1z8jg691Of5|klZ{hM zOiTOOZ(ZMX2GlRsLUdbq=hu(#?)L{fJv<^(WJVG8OW9|83Vs#wSdToaY%j z?WdZEsPDBSLb}`k&3mbJPVO(`W_Qo^I!~VUzq4lq1tgaU0~0hPH^=c!W`u;(SN;Sj zD^gH~86s9G(#-;9P3DlahKKlMZ%IRlXoI9BQqUffbc_cDbo|u6*S#4T7)n_f7=(b4 zh5&(l3=HM@MJf7urMXF|MVWc&dKI}j0p5&Ex(o}4pTe}t|o0Ly_SAJW$Olw)^g)PnsFS~d}bCYD`B)Bgmtap0G zwq>Q^x$j!b7O%g#;6dco6D-fQpFQWPuR5!;{By&9MXThf1Mcj}{bv6d(-h}f^GumD zWxZk8l)YB#mz#K-c=7F8xwD@IU;86s9AQp5sgP5vZd4Udh4;*Rt=9gPM zxq!DtYI6AND|6H)wq10*`s2jHfH~PGH*1}a3{7$g3pTo3z$R{9mH#zX=g5|X$UsBK zm6Ix`&Al%2S-`30@AqxbY8JXS7RF6G>h`2k@5ZXAO`>{ttYZ)FTx_58Zo!MIt#|%h zyeke3Wq1H3@=a!B0R{8sAN&bWR*awwGeoRLq=*H~n*2$^8Xg;yO(hK>qFIubh|pav Z=>!q|C}{&>7)sef7)4Un5XMF+F90;G#{d8T diff --git a/Xceed.Words.NET.Examples/Samples/Chart/Output/PieChart.docx b/Xceed.Words.NET.Examples/Samples/Chart/Output/PieChart.docx index 4a133dc802ed4dd2cddc3b78842ce669f734b850..1399af20fb053a8e0f6b73a999ae49242d33768c 100644 GIT binary patch delta 467 zcmX?abl!+Bz?+#xgn@y9gMq_)Q_x1f4@?{&MqGI9w#{tJmW%?47D*PVrm2=Dsg`CY z#;InL{aNH#KuR_jvP|XxD-OBM`gSr8uUoyN-(dp**Y!zf=UJ#JdIsLjyHOJTm8s9x zPf5snlk9@@Vscbo`^x8V zBG<2VO@H&MkHocDJiMLvMJ3K~p0o6!A08{G>+&5^FLM!=&b_PPWV5TS&&jTv?PcvO zu`9Zg^#x~DmVfT}uNbw~y3;?*k9pPy_8Gql-d$w2geKq7Y=D% zKXGN*CCSs;fooQ(Mn62X_Oj|6>u<`>__|_aUR;>gwOyOeSbxZjR%d%m@jpulxy6 zR-~W|GeoRXWr#dus! zJy6(slk9@@r1@;`!T5f$i zq@wFtV)OUiZw0F)FS}*zHeB%KNE_F7!#@8OmaB&poS(UEIB9r}-)PxI^OPyCbfgvL zTx$A}TF&kb!^i#vp+`&G8!meOVoPd0x%zWe*ybs17ahZY z{Lm;i=y_TcY?Qdw}(VUM23^I2L49Ywap3F|oYy!`ckTUzZ+ z@x?m&GX-ZA1y0$ZHZ5yu|97A8!f!YDXV_h8ZGODRPnt%$n>bZVeCg$(`bc5Yc_&mWa^(FYW{pb(OGzFj^&SA&g@Z)({4( Gq!$3$Be;10 diff --git a/Xceed.Words.NET.Examples/Samples/CheckBox/CheckBoxSample.cs b/Xceed.Words.NET.Examples/Samples/CheckBox/CheckBoxSample.cs index 62456914..4eef6252 100644 --- a/Xceed.Words.NET.Examples/Samples/CheckBox/CheckBoxSample.cs +++ b/Xceed.Words.NET.Examples/Samples/CheckBox/CheckBoxSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Section Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to insert sections when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Document/DocumentSample.cs b/Xceed.Words.NET.Examples/Samples/Document/DocumentSample.cs index f52dcb8a..46f3ae4e 100644 --- a/Xceed.Words.NET.Examples/Samples/Document/DocumentSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Document/DocumentSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Document Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to modify the content of a document when using the API from the Xceed Words for .NET. @@ -99,7 +99,7 @@ public static void ReplaceTextWithObjects() t.Design = TableDesign.DarkListAccent4; t.AutoFit = AutoFit.Window; t.Rows[ 0 ].Cells[ 0 ].Paragraphs[ 0 ].Append( "xceed.com" ); - t.Rows[ 0 ].Cells[ 1 ].Paragraphs[ 0 ].Append( "@copyright 2020" ); + t.Rows[ 0 ].Cells[ 1 ].Paragraphs[ 0 ].Append( "@copyright 2021" ); document.ReplaceTextWithObject( "", t ); // Save this document to disk. diff --git a/Xceed.Words.NET.Examples/Samples/Document/Output/AddCustomProperties.docx b/Xceed.Words.NET.Examples/Samples/Document/Output/AddCustomProperties.docx index a207ccf59e3fc0e0c2a7df90ae6807984dc2ed09..638b121c1b6f5c2efaeb2833bb613a93dfe078ae 100644 GIT binary patch delta 1690 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 diff --git a/Xceed.Words.NET.Examples/Samples/Document/Output/AppendDocument.docx b/Xceed.Words.NET.Examples/Samples/Document/Output/AppendDocument.docx index edfc90b24194209bdf19f01d17d4478ce5f977b9..d11888db3bcb735e08ae4378c264e786f579bd2c 100644 GIT binary patch delta 83 zcmbOgJu7;{XATy2?@d9QzjGYngs}DtNw7dzx5cWUvXSyuJYccO)3xg$3`rep2qQx0 KH-r(c>kI(jNE~he delta 83 zcmbOgJu7;{XATw@8?(U8-#LzOLRkBSBv>G<+hSEv*+_XS9DqM=hNO-)gb|_h K8^Q?Jbp`-}{u%ZF diff --git a/Xceed.Words.NET.Examples/Samples/Document/Output/ApplyTemplate.docx b/Xceed.Words.NET.Examples/Samples/Document/Output/ApplyTemplate.docx index d9ef1d4b3962468ac25a3a48c97f26af332aeb3e..fe0adbd7c62faa8198500b960a2841287e169f80 100644 GIT binary patch delta 1908 zcmZuxX;f2J5WZPtUm}Dp(hw2|5`?hGDu^HumMRbe22e08q9QvHB2qS4lttwhtO&@d z!2<`2C|DH%SEQg)MP&=Lr7E;q8_S}?5!x(|Q?PwM-uY(cyLY~M^Ja1`qgt9#Dt338hulZqVr&>n8t`L`h(enezdb4}SWI8u{z|!dc zmT3DFS^k|~?e~P5!8uQ>(%B>ux^%{I?>OD~dYUKxiT&581)}TEn5nF8{uYf^XTQpj z#_X$%chB7&U%m|G`^O*MuF*GfL6yliJxz(6cORAQttem>aDcu*V4gO-@qX_ovwE&2 zN1IXn$nl_p5!1J*`P|6sX{Cv?3QcbkySf}0*Uo;Y`PAyjwrfQ}Lf?HdcRS+KnX1FK zZ*xO4Fmu!CChxM-&l^u?)mFJE9f~-g_JL&=;!)TAl76JEPdCO=XI`065?ANnubO91 z-o5`>6@F`xlm4#v;mVA|nf>x9GxM|chgyo3>Z0pC_<0_$;Vr(ebJg}92i7p7uSUQM zUMMWcZX}x1a&G>~4PWx_e#0v;&~f0tilnLHb>U+R z1k5Y$MD}>+Ec=fZlyHD^%E^X1+}5*4<;>jh7-xncAaZofX$M=v#$rpg$}M=LkCDPG zlroL;y02NVnAAR$bvggWm57c^*ILf+xGzmV?ZkKMI?)&Hs+D`{6mz?J`^sD$Jnl9| zK4;@7#k(71n72LOq%y*5uZ(2c=leh+Z!n>?*rlL^a7Jy7;79Mba>5YTbEAtI30WBN zbl`yukdsUY)@E{FG8TYA902M-7esPXQWN6Xt-U&YtYlVT5^+>IG`@N?loVx>h7iOi zZ$;2qN+^Ps473qMpz5IH#KRR*|1bs;sU#R`G$*}+wO$u3MX9vg2;F|eCIqFMrXW!v z-3mceOIrkSHZG%T8ymzoXvam6@22JGF{fqJ?QDlcQLbt-(!5%pAxJi^mkWa0y-TE3 zw|e_tk@_IU-&%42I{Mp70ngu23aD(q(wr8T`{5zrOup;Dlp z)TRd#&>=MF6NuEDD6&tRz>?+oMUjm&gAW2pQoc}RGt8l45OSYs5CNTQ3B8u>Sdrbi z5f%m!C88Q%82XutHoS>E0BS2F0r0^Fb_bC>#LA7P9+&?mQhq@8bLENl0Hh@(N7462 zbE2Y?EzHv64t(AT?|~O6Xc44o+_Y&G+4BF$1;G=ireR``271y7=IoG)G>DbA?pXss zz&ZdlR*58Ufj4(hOvECEx%;2uL?UfO)!^zXXY0(h@kjT`MR6cX?t4Bf+FI99# xcNM>q0o~X%32C0pFK`!af;LS6)~+H6JYg9d>Cq)N0Uf&yK4P26kbT9he*j0hlnDR; delta 2331 zcmZuy3pkW%8~$b(WgK$|6T>hgLk=M#%B)?d4#qfai{DDaq-Y#-*llL;H;qB$Mf^GB zI60)82T8Ih(yF$DLrG4xC6(;{4%Ppe8P~t|+V8r)@4N5!xu5TS?(ey-=e<^oNT^51 zlJ|>=qoK9yTN?|vI$464_!?-i6qA(}B4;_8XsuB}5-GbDt$&spP$3RMbXhQ-g)Pr@d1~kteM`ESA%ecbaG91Mo+Rj30jO7?4xD{fx{D zElfSt`S}!KuJ&<@X5kOV)sr)_Xps*Yv^Hl8wof{lr>#lIpLV*R zTj5dAcP{YYAe)`!a~>tr!@2)$*qxXvbIJdnbX0t>dQ2)jZF~ej<=o{|p`U(~MByaR zKH5cA4nOS-6q_ai^|Kb?)XLt1kT=}9LjFyaloPiMWFop0wF$oR`=eRrCp6lbS2;#E z#uMg)Qk0c*N4*vwrH!rZMb0XBd1TI)zQ=IuY|K8^Bva!D&;M4n2_uES_iVx6Ijr+n zzFjza;%2MrwOys$d;hkvl)n8*i3ossGeA5bPrLmIkoB$b($(q6Z zb8ZoKNCKC`jz{Gr@-W;by6=@sf1t{O`a=3z`}x|PDJ~B{LTFr2=>RjiqdZhhvopXz zPPcpffn`a{@Jc^6uBd7(;!(f%Xne<&i#jG$4k=&}^PGM3l^^et{HJBKiSd)E#embJ zn$$8@igtRSAN`RPVT*51&W$YR<;n~$GCcdxS6qg{OIH3FXsbb zR!1JxYmX*Z0KZkjWz^vu`sf=3YqGsoQ3j!HnaYL~$N%LsfV+9OvyNxaDxVySwP$5_ zaPtu?nosp`$mSO-wTiM(kkn6gs>mH%3l)dOSVIdPT|iogNq@O4#%c;Zdt;Y)SWTF< zQun?Yd!<7>%Xjkrb0Y)MmV{CK^+1vpswuSD??OSJ|E?}{-C;5{q$)Ug40-fJV_6=% zM;uH4DB+t2-lw$88Q0vSe*1k zl{mR51-+|3G1DDJYDZ^_^WrZZs1Dph@0_^p@BLZ}9Xpm@V!Qf0uG^FNis)I&w3}-% z;@-couZHT?rrLj>aE`SV`=t$txcasYx9Zpv28J?-nV8q_udaS_gVQ8Z?#k%bUA?j zg?QuZwzZL`1W7=f1tYIvLZw|?FzLW0^%3F7V`%6jgs2AlM1;<2*^AIUoR0_@>Zpp4 zGhPj`d2KX$m*1sbzix9(VJ=(fw9euLhEsC1hDM$$Sb#U+&?N;VU5~0^lsY2HcaR-}(YrxcX zmmmS0aJ3SG%dR#;@XFQp?~~t*yc4(PSlnVJI08Nl9?L_JqTnQ1f0U^~;Ju0x$RkT@ zttq=Xy^ZJL;B)xis62`VJ!G74tKZ2OBuNuUxQV!d8%B(-1%Y;~nmlI0=G=tG8u$!nzQ=<)%2r@Z*(#{- z^v%~ZJ+RsU&c<%Ymev&rL-A-}MG=}=YxF;hiQ8fE4xyO|3I^$*2R>7-;}3 zKW71&J+J~tm6HUrArf{Z2|)@Q9NpdxK6z+4thHtP>`>+h*mB4w2!ea~my5Iqf@0_q zRO4fTN2q}jJB?yPL;l_Zmj{yw;P0`O__OT>vFSgF**{EN_y~$Tl#wm_z%@@{k@ypm zyZTTNf3j1TB!jJ5L>flljEs59Q$^EnqiF8$^;$V5gV1K(ug*F*pwgqhO)> m1`*8}M0)89|6#Eg23g|*I=n KH-urX>kI%5p&cs# delta 83 zcmewr^($(_XATw@8?(U8-#M0WLRj;KBv>G<-C|WxSxb2<9kI%3;T<6W delta 83 zcmewv^)qV2XATw@8?(U8-#Hd@LRj;JBv>Ga{@6J5OV`D4-oSLF&_}~1F--Q3j(pw_O&*`!OdV(x3e4&&J}_%OD_rEV}~%q zZwVI&K$xdr34dn;Gp8T>C~OU3v3?S^fk?Z45>{e{Ftfi3Z-cmXy6O+8{Pffx!qpHx JPksou002I%R$2f6 delta 231 zcmaFy$^XSC{|zQwEG{-?ftxM3Zt6o=qE=Iwz^vxAHtlO|7=f4xh?#+y1&CRJm<@>8 zftUk`If0l9h`E872Z(urm=B2gfmi^D1%X&-`&t{};AXI?+gT0>=L$iXrI&>7u|t^Q zw}cA>Ak5RRgukQh JLm005&H$U78!`X@ delta 83 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 delta 2749 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 diff --git a/Xceed.Words.NET.Examples/Samples/Equation/EquationSample.cs b/Xceed.Words.NET.Examples/Samples/Equation/EquationSample.cs index 9fa8c11d..d8edfdc0 100644 --- a/Xceed.Words.NET.Examples/Samples/Equation/EquationSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Equation/EquationSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Equation Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to insert an equation when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Equation/Output/EquationSample.docx b/Xceed.Words.NET.Examples/Samples/Equation/Output/EquationSample.docx index 8ec45f78dda91a611289fd8b4b80f001c0431828..7d2ac25ab957919ac36c20d58ec40f14dcf6864d 100644 GIT binary patch delta 458 zcmaE;^H7H`z?+#xgn@y9gMq_)Q_w~}Q)UhjV`(6R*=BEMOGcwq1M^f10~3oBL$frK zRP#h71${dk{h-vG#FEVXyyA?^f?_*}Axuz1Hg98@%mFs#tM!9dlLL7J>pPhXS1r4{ zAu;+Z(=j=9!Oq;9d>1xveBcqo$Q`P|DweZr&i&cTFV^hYoBw_NXP0?~M=svvJJrPK zxO$FU?)`(4&h$3?&8t4(x$KT$`$hLj?m2G~JWl3o^kyB1Ja(vZ%g&^j8L6idU#y(| z%JZ9t_OW*v5ylTDdG@LI|5vn1c5D4!@26{g>kIpgVyf8d?)9F7Qit%5TUoB5mJ*FM{>ed$3)h@cTpUp}V3_f+c zKK}Kb_{^zM_qlRhZ*v8Ho>ZH8v3viGS|-#mh@blRx;G;OLn#XbgAl{!1$?cHETC}R ztSR6NWmO5vF@wb>&k?bP2m0juB8CuA5m8G-Acl%MK}2VZ+CUh$MQtGr88KG?V3)d6 delta 458 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 B-CY0x delta 3319 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 diff --git a/Xceed.Words.NET.Examples/Samples/Hyperlink/HyperlinkSample.cs b/Xceed.Words.NET.Examples/Samples/Hyperlink/HyperlinkSample.cs index 0ce6c2e7..70303855 100644 --- a/Xceed.Words.NET.Examples/Samples/Hyperlink/HyperlinkSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Hyperlink/HyperlinkSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Hyperlink Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to insert hyperlinks when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Hyperlink/Output/Hyperlinks.docx b/Xceed.Words.NET.Examples/Samples/Hyperlink/Output/Hyperlinks.docx index 00dbe17ddd4026341085025cb3db2a14bfb1b3dd..9a1dad7624385746e6295b53f7cf8f24aee3388a 100644 GIT binary patch delta 1633 zcmZ9Mdo7$$~EZk3hUNK%h3vX~Sy%%wanA|*S;+(s+nAWxdb z5;B_0lzU+z6;F9wx?m+9(zA7W&Z$4XpYP{<&v|`5-}8B&_ov*HV~X$~fMrzx0DuBe z!d=f5x2%uhX$U*|I&;{coIZNRy!ODM+$Z~VQqp_o3p`bZlrZz?X^QB`AjG+Wf9yjN zp)B!gX-Z<_b#7o+hsJQzV$1e4CQ{v)w+>%#%77Z)N%Fc(t%?i^R8gMJfultVt-X-o zNb|*o(Kt4=Gh5CO-;;Rvkphnu5darv1$tnH`wa}eis?ft9ix5du>{sqz~E@DA&VKo zB2-^m%DBFhr@;tixSl|;ox=;uN$i*D6PB4;Q#UBdxYkp=H?{=n=&H0&~{y~~2 zTW$?_u&^%P?s8nCIm$?_U27gDm=UKE`{sB#!;mq4)Wnrz9B`70zp^Xey7#>eM8NNc z?0#58Khaq#T(0KVP1KQmFg!*7ywy?8Mp2*{#Jo6FL(LC|NRZnmA|qP;yh+QV@>z#_ z{#w;(G=Zo5fv|0^vqjBEKIaw2w9HYPxvGt_)aRk){4#1+0;59R>mSi=E5EOnPe2R- zWvL|HcTkvXtO?-}trzd0)zw})73_E9htORyHC~?w%)Dm zk_|E-uzrP`kGj{ip)zRcSoKT0i`4Pa+l?Sq!gxWcL(vzf#Isw1*jAbyw8)Fi9nUu= zLkOC)y4N3p1 z{-JxOFfTN(p>JYLXZRq+?fz~0&g=*IUE}BQs@iKOr;QY;dWOpt+Wv=(lds(R+`QKH zrf%H$40lKSO4wds*!>b z)h4s_8a))oYlff6L|5}&xyGu|E43QWKROVT_n71sydae92M?{^No)6@V-+v6=Btu2`vawu7;T`RZBF`=uZ zS?Af5t2m}eaVMQfYQn%=IOJIOw;M_9{Nj@gRK%2YVCmr2@RttGGa7QsAlJXaAVNlToY9B3yXaQm1f_f0(l@=o7VluuJB|_fUi6+O2^g7m zAh!jOTb#|uSLQ=dkz*-_b$hQc6dt5La!Y~J{-90lqsqI0Yu|fGxh5xlP!W4SrkCUW z;UOz0-;T4Iz1h&<7_OlxCmA+2|3PFs-(7XI3%4tG)^l^#)3J1)5d9jy#jp}*LsV|D zzZu92ulLT8G+V!qDt>2w&SFfzqxA8Fn@o~kfMw^3d(1>p<%_8qqc49&WMvtESy|V* zbJ|{9dsNb09S8cp31xn4!pb8`Owjise}WNzWG-+N_}jR@?MY?`(rTM@_)?{eKmZ^; ztG@~OGt`3tz&AV~IKs?S8a)Ug852MS_}PT{3b_u1W-cL7y8nwPslk&_T0cvCyPFgN z=BT1J{r3XCnO{T%2|<$u0QfJ2rxE}}p9=Rk3#EmS1Hyws15IN>f`8{#ZFI1*68^Oe z03d$hCt(0^aQmsy$bisDU$5A(fQZAUG0XwgwdL3u>b%7 delta 1575 zcmY+Edpy&77{`B`ZA>l8Y(zHXmN6-pl}jZw(`1rnnM-n+%w<>?=U7LiOF| zW$p?mmE1}pf}}pXc>`p4aCoBM1m6I~y^G3;+NUfQ5-6 z_0{92Gr`Fy6YkKi&A;QyxyYqaVO_ONyn549!VnfF)A0pVeWZ=fdX$usKhU3eRktq0 z=Xtdp4DzQ1S)?qbrgs8|YmX4vDddP$UoYfd%n@m!*?RCaLt_Q;C$yxUGUQ2BVK&^% zcI@6i^tQsu$I^d$o;J@oXE``LsI}!#Q?Pd9yhGI06mI%6HCo2BB`xBvtE0DbDw>vj z#au`sUdfHk*2{Y+NDK0qERk`>=k1=k)vWax(l%8vl9M=lGN6vB6qcCN8nH{0$)=|F z(a#qd*iQ+PdygF~Y0qWcE=`zC^QED1o>XHxp6^Hx(!ZQaI!7QDL-Q7@K%1x(>LKk(q-A#Aep|P8rkTPzQtm!>^SRdi)L4Nrvhr~EMC#- zk1@aS{!eG-Xu+(d>=1UEbuaiA zL19Pp$#5qBXt7+mMPb-N2B)XGt6QO>_Hf#!W1pOfgihmpLU(Z_EEoi^w7m(h)!mYFodkYOsQ&Mzd6JuOXFe7;fy2Uw3L25dtH#$+< zQ!H%04nOm-P8*p>aJD3A&QeW#2K=J33STD-&5F=Ny^Ek~b*1=izP=|5g*-%5jhb@H zk%x;|*drtazb*MxJbcH=&^&XzjxT%dolkIN55okP zTXEfsJivc*in*-6@1u=)$7dNz!t$i4Y3OIy>cA2zc-E0-3)-y9dGeLeTyWDr^Fe7a zyXlK-&#w*Oe5wR3=F*BEfR6%l}4=ig@cULa}9KVw{hjskBt2n zWU}O3Ul1Z^FC%sLJssBIKu{=8{**G7VPi$$+<{)T&)}lYcHYlQ_X*oRp=(j>pgZ0d z(*Q$-11MaA*txh{!!=0XBkD6EXNn3UFU;vhymopC#-!sp`80FT&4O^_^p|>&tj1#R zv?&qwVq1A_?PQ8)i^{$HYthJ43m=|m%y`qm?LO*0R8lfJhGAbEt74eQNSc` z0UuC*VByP-!Ii}EKWqVIPH4Eh#Y+3M&&|YmQ+O*`uTYe)l%Dk zVVV&DZyce>bHZ%Kt&y&&%l$U1WGDmxq< + /// Create a paragraph and set text hyphenation. + /// + public static void CreateHyphenation() + { + + + + + + + // This option is available when you buy Xceed Words for .NET from https://xceed.com/xceed-words-for-net/. + } + + /// + /// Update document hyphenation options. + /// + public static void UpdateHyphenation() + { + + + // This option is available when you buy Xceed Words for .NET from https://xceed.com/xceed-words-for-net/. + } + + #endregion + } +} diff --git a/Xceed.Words.NET.Examples/Samples/Hyphenation/Resources/HyphenatedDocument.docx b/Xceed.Words.NET.Examples/Samples/Hyphenation/Resources/HyphenatedDocument.docx new file mode 100644 index 0000000000000000000000000000000000000000..a2c8a66745accaa0e0e27c38cbf3fa2ab872d304 GIT binary patch literal 13314 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 bAG@@IG}ya&{Pr0E450g+a!@n=cK81PR88_R literal 0 HcmV?d00001 diff --git a/Xceed.Words.NET.Examples/Samples/Image/ImageSample.cs b/Xceed.Words.NET.Examples/Samples/Image/ImageSample.cs index f9d1da73..28df9a88 100644 --- a/Xceed.Words.NET.Examples/Samples/Image/ImageSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Image/ImageSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Image Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to create, copy or modify a picture when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Image/Output/AddPicture.docx b/Xceed.Words.NET.Examples/Samples/Image/Output/AddPicture.docx index 26716f926833692d9f5da69b58026a236293685c..9e6c4a35403ac74371b2eedbc33ca201d6af92b2 100644 GIT binary patch delta 2159 zcma)8c{tQtAOA6A7)vyk1{uo;V}{ucWzBMpWJ!i7Gt4Mi<3`93Q@3y})5_R0lr0%U z%Kj4BNeK6jbhV(mit5#J$?bja``cXPHiw>X7lt?AqWMXkOyB@_hx4sno(Zq zCV*kPl9|rD$Vpir_gvXpOGmF*4{-iz>y-90+egx=#xt3{dolmVx5QB_OUINtDfQ*JLvOX`A5 zuJK?$c4^;8giEbF{Ltl}x}FyL?UO`d{WEm5`c#U>%gl=eS&JE54+FCcMa61S+e-(p zKO!_dy*uNFtGV7^fTbUKn-i+pkafl2eqs!C2I39A?1%u5!wwC7W_DtJ6@(WuM!1u9 z?4PgK>xwfOoxFIK$~U_;&7NxR0<}uo>yxNOr(%eB4{ng7hTLIksx2nDSN`Q_yDZ0M zJ-TGcp5i1_@zycHK^4%yYBlN?&8}y(t*E`TvV<#_pX{SWKKge0n*W1N`LPvYK}44| ztIG49t59~aCgIEtjn`>>kU>5(Cg;iY#ZVOt&bEFQm*2r!#02l0|KrTjGU7K-l&zwz zlXe;&sZ-_<>jf^;-|x!Xm*mEKlTDbi&>ob!8xi8_#!gWy&NGse|Bc%QF4qvbHSZltQM~% z0ggl~v8-9O3)Cidp0a$PUkRouI@WNO^%>3 zeD&?fGlAp*t>~KKvuT3IP=XPV#pXznm%P*HkuqHqb#~48+<(hZJ zaV(d4CHfLHWI1Iq*4v4qvApi2xCR*|h8YPOp1njWRI50Y4j|Y~p-EPSmNHjCF$q;C z*g-jt+BG&*+sCeaEH8aMYLyKY8dPSi8h+TBi+G=Ridyt}uwK*R^|oiw^TWhGpY2^l93a63co$}d3!FG6`i_JqZyw0%Cg8S$jt50-ZyH#@6QGuUkY-7 z`ldCxmT4TU(fg{-Fcl1``q`_sHoS>X)sgtv`1|tVuxi(@NmbJ2W5lA^tohewKIzUW z7(vrS7GFF+I!D^{GpP+f+iP8QitBH=JN9NiyB zV9@Ybh6(4`wq0VITk0-u`trHHFcv}%L>25A6!sX32MohmH z2k#j@_70PDYi}+j0SdCAiw>ai-LM(sMh`CVEDf>WWI<<;!3wu8x@0Y$!k5j{TfpPiLZ$Cw%qy?RBS^hAoSgMPu+y2EAv-ATbd ztRkfm9Hr2+1TWtLje%%)xt6*c7|Z6%G6Em`L8^l)y^0*{Zy+!qLB@wjFAq?>UZ8NmYkVW*7(12y_(9m`Oz82_`rcjl>|M zhJe%@VygqhCPYk zA3Ea5Qk6`l!~x*wNk(v_5qfiVp@@j004VT-T-DN}IA<^bRGa_+x$i3cv7F`{q3+WB zpUgx6pcw>g-1eViyBxqVmQ&|6QKh$v@sJ7=;dB0=YHmR(FPI30gYeSYf|Lzd&0%`M zx8OxDnEjv<@K65#rjQ%_1Aox?@eSZCdcmBnN&k1&zpkYVMSR;PE6I&{RuljlJU7u_ Da5{#0 delta 2254 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 DxA+!2 delta 1766 zcma)-doEYZzQ{UTI@CbdgZYJVCLW&J|^{{H>(c|Py+InQ}M=Xu`eydDK#!8i10 zKw$_F2m}Z1b0r;&W^F$}FE(@$sp2O{1|qYTwalRmi?QXigd29GTJNpV%%aP}S{ucm zp2aZl3I5uOs<;GCj(v$uQ~sPu@3Jfu^nMs(&g2RT+cCJf^F!PcodTIS;pXw(qmd@2{>Z*MrCN9tZuc;)a;)vS!qC6+Xit_(kpa}!MePtZ*U=tk)E&t(uc!1Jaexbcc-qjosjn+kEYdd zhA$hT3@pOU>t}rDM9_#wF}W9OJd?SjBOe7<3j0zFFJIuk8XzGTG%9DHEPKkJEmsJc z{uYi{IBHZ%*Sh!ZJU@1RT8EvG*O(NVuBSmBaC{#S@c2V%-`mp)@BRx&x$Yf~faqpH z;0$dOce<=3PF_lw9De}dx8$fg+jRE?&z$Fq|K@ zQpmj}!ot#v3~Z~z)-?Vd5@3jY(#?Ts(QZubd8!oufLhE;fgG92xd-4HD!n{S!Y_j* z0r=6tx5Il~j*yB}vuI|xsQyl@+A=8oXJgRZo=S_Ts*rVk^>%cc$(GSHXlCD$eg#)%^S8sbM|udQC(& zDwdh`t1tex*v*{QLUcwT;d%i?MWW8Ng~4b;2iw(i37*rwR58<bXIHQf$$(=NpK}eI?lQYK^Y`G7 zs{2@Z?&XbY?HTp`Kj6&A#UBBQ?vHr$g!FS7uUoMlb4N1@Utc;r-CD`(JUs%5Kh?{& zjAlrMg-pDVCHs5Mkud*eJa5>%Tc)4?eEc*->X90!fibn~eDSsOvnwW^2>Th1VDJ96 z)pwi~{dKr#e}W5W11=8Ni<4#LFe=y}#xZ(NOf=QW*@5jujCQ5~FEn<+*7+mbq6xsa ztgGukG_tTjwVs!V5qI6(fZm*?oM2s32J+ixYbLCXKu(mns385YlKrZdQ!~POVYSfoY=iyo0=cctHx5fr3e-c-q7uDw$*&$D^<1V4-OVxT4EM6&K}3FLXw&&W>)7DjWye5{_)nQ8&{Wz86wS|7>SCLxn}TtQk4EukGro! zt@|}h%?Q}y8yZ^k0NTplO__A%E-`P{v7C7y{%iO|nU46x{fgkp zU$(Z^G|4NQ*zHr2l!f0Sw*@FBMB%T>dWVJsQFX90j~BAIX$&b};in$qKxo|leGTG9 zb{|oy?c{+aAQFPCHJ#%_qr?%@e>s*(alH09^dV_LmiH3-yQZGB)h(MChkVAk3}pa- zHwW6fE#$M(Gc<*6ya9Gd6O1E~LM4)%Nd(6Thdl(M1Id9vWjj#`R7bY66PXejNsM%q z@sLjD8*Xgu1)z>ZGF$g%-AG$72(*5-ZrJ-J2+NVLO#s3=EjN`N!b(x&;(@S=j3z?VO=h>S1`ADg VvuJ`a&RFb$FnTO4A&irjEdc&39%ldm diff --git a/Xceed.Words.NET.Examples/Samples/Line/LineSample.cs b/Xceed.Words.NET.Examples/Samples/Line/LineSample.cs index 304da1bb..5e2c63d6 100644 --- a/Xceed.Words.NET.Examples/Samples/Line/LineSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Line/LineSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Line Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to insert horizontal lines when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Line/Output/InsertHorizontalLine.docx b/Xceed.Words.NET.Examples/Samples/Line/Output/InsertHorizontalLine.docx index 5cef03ecb49daec7690fae2ee8a49c50224e72ce..6be31810fa9b8993ea5c82cdedb602ed5e570d4b 100644 GIT binary patch delta 490 zcmcbmb5n;ez?+#xgn@y9gMq_)Q_w~}J!TFNLw|o>*Jc-HOGW|HloWFd14|S0G&2(u z%aoMKy)1GpASIjEvrOjT1hF1piM;V{vNx~4=nac=RHcdpj$0lV7Fnu6?blGiS4X+x?bNeP)rn%rVPJHjk3HoxMJ{U0T7m z#Yn8qZMya`cI{w3XaDq-^HTb^q`aBeX3DHL^GU_5kM=J4XI6YTxccZK@A`&JpXHp& z6BhH>E)#pv&HrnTt`YBv#d!}8NUnDc*GjZHY&qTG#Z{Lncap4melD_KyN_Gj@Y)r( z54SunPKn7Z^WE5?`Sk7n^`+<5ZwZhHHM|mf^j$^hD}CLnkK()iA)&(r4V}&1e3Ka= zepeFkg|dnT<(R=@lc$PU!^3X!4G}|#D6gm`QXu(@I?98BEPm?W>)wnE45cg#3_`%* zM}V5i>qQm8YQ!uQOj&?xo-i>m2qP2#S;CXwiz`iMFxeAnzW@lg!L{XD6*+5K% Jtpyaf3;;R7r}Y2; delta 491 zcmcbqb4!OWz?+#xgn@y9gTckdEN~;A9y14+(aV2$vkS8&qd=-@vPoK!sexIFQKCtj zvH9d)7C9D>lFjQ`CUbCtSc?vXZ+So2o7Z2|LSFqy=-s><8`f4a9-mj^lH|Va@}gW0EcN6(8! znWe7{I2NS8{$e`YMQTF2?t=xZt)5Rk7A4MmIhC*Fo~!Rko#1A@xG&4EmM5wnGfkWG zIcTFz>WR(OU6nkFdH-wIX4fqZy)tL1@5#VT(?t7!EOpKQm-L+z5bhdmsA)0=)R5lOOB3( zQ1}5SQLjeU*?P~vKg%?c&wqdW@9McHjE|XAsV`h7Ay9IweDQ15GdJ&W+<3o@eNKp; zY^H>>QtA;^PUmwE=UrODzC|n4Zh^MwxkVuFU(OXV`ASGglix|GusMl?1OYf5x26C9 delta 481 zcmbPkG{cB5z?+#xgn@y9gTckdEN~;=TxJdsL-mKB@#f9UmW%?HhUOMVDHf@g#z`qA zrWR(C|FFohfRt>OW1Y;w31TrGPTx~98jn~ys# zzazN2u1lqV$BG5snN>?nX7Rbpa@#LFE&BTKieNrxZ}r@`lI|@jIlhM{F<$p6vhe>Q zzi9h5^B?t3&e|;Uu5ZZndCsUjp_xxtjrGeD=i-xMGufW(4BX&;dg8`eoN?h!pV>I} z&YU#+xRmq07yhf?A96Y~<@;4<<<^ZcU8a+_i*(Njy7%vQ)bu}2*{b1p64s__wrT{{ zWL{jo|3)1XB*2)U0rpb4jA<4#1H(aC1_mL9&FuVFm?434U&xmc!ZHw%gNRKI61Rp2 z?&PWBhG6;0r^GFhLXk(p5h5HYA;tJ+a*l)|ggX()y)=1^gpxcc#P_B(id3q}>$AwQfRt zvv0iL#x4_jN_L}sjY{Q_V{E^s{As(iqIyn<&K&pI+H1Kdds*_xe)Y0n$(MOD!uRkb z#_K*sHr0RX`7dsLyWr!&mz7Sl|1n&iaZcGy!ClnKhxdZG_!-sc6sZaBmk%s_7Bpj* zOYQ{j%1aI}&Q5t_GuPlr_rEQ_^mLB+th8AF&O1^{RbqXfrkLT7AR1RE1H*y5-Dz3$D(z_8hvubUAPIEVOsp)6rRIcBifWK$7q zc;HU15HW;^t`)IF3dQ##j`E-|g&A4O!oVN|j2{G$pX@KH2v#FzpOd~3U? delta 523 zcmeyP{Y#rKz?+#xgn@y9gTckdEN~;=1tty<&?%YEExro%`J@05>pIQ4O5Iv zEDcj8>$AwQfRtI z;lIguVe`fZ9x;sEp&G1WIlJbx@BjJbw0!>i-G^7tJz;#zq)I&@)KKBYlkEV<5{U!d}9};Lx&_Iiy`uDmwBLhPz%Vu-FPDV)J9O3tcvP1>tn89L`%|)!? zfjhZM#1JC7Uc?e96hDeM%7elbVJHKG5HNlaKz4GVs3KU6n1zBV3((>xObiUd2n9ga kmdO)EmB4EDrZtLO1N&cvx)!Fx);lE;4vKniDoUT~RKW3jGyYmwatWH@th|SpZV}<_JRTm7ZE-}f! z+dXURoa=LDPAiPPre+>o)csa*noE6Dt$A3|g+jL8Yg4{YD)lY)-pFD({d)cK(v|DC z{+hLFUiqblq>|4|UDy3P`c4=Ua!k;Wi=X=U`sVk%{fv;nY2x>VvMvkAF@wb>e-*Zd zh3#Z>5hI9Tu81X4Ag&j2lm`VV$TV+828L1=1_mKu>>$AH$^4>NzedWhvIWw$j{vM?^OSv<4*{Tz2~B-b$&n$8Y~G`)|efq{Z&bxoaP07%F5;y}UO! zd&c6*h{JW;Z67Ekzv76sXPxAhvtnU);jI9vkoLtqGiP5|)>T+H#jthX(#awEn_N#x zYOjnpdQd;jvu`@*f9H~8U%2MandQFaBfkOfN23IWqAB~1Mljo2uU~&t=VF7+Ybn0f zdy-Uzn>vleTf-b)+@12q#_Yvq*ZQbhaj~RXuZv<|?0FE>vB%`Q2)9J?t$)9xuK#iB z4&SvRY|X_OqlJ~9m%8TvOZv_U2|Ffe*u_uX{F-+nBP4Jd_ zJK0pk2qKs*Vu=)pYegL8K|vZn_3w3WMh1pb76t|(VC*2k-O0S7ieNQj77C^;Ks8U8 q7#M^R3V^JV$-bgWU^RQw8bz)G<)hgd7z9z&9G%=Js>1dZtPudGwYP)- diff --git a/Xceed.Words.NET.Examples/Samples/Margin/Output/SetDirection.docx b/Xceed.Words.NET.Examples/Samples/Margin/Output/SetDirection.docx index 5a78610823bee52ccc46f294e3533e89550b7295..e6631d8d1bdf32948b384985514cfb73a05aaf91 100644 GIT binary patch delta 523 zcmdn3y;qwrz?+#xgn@y9gMq_)Q_x1fiA)?I1`mJG;mymLEExriEQ}2-3{1?-j1v=0 zjLeNEe_)nl0V&xm#4?$K6T~`H<5~TF@;V;>dJB1T-@v9;UF z`QXGIOk%47xO8rmSnfCXU;MM8`u@B4W$xf83N+*#e{_N8;~i6dUgcRLi@);$$om7df2JTt0jd&&Xb$#eCD z|F&n$UKUo_A zKY3nha@j>67um1f$L(zx7?K%gsI~7+sZ%5JJu;@& zW`3N#|3)nnB*d7YAr?RN?{#lR28L1=1_q(cKY802A%WA(?+ayJ5s+gBi%tF}Yz+_G z$(AC95YaplOQcZTAmS(w3R4twf$@U?4<-wUDuUIBStyvY0PTLl#K0hoPyl3=PYw`O e0;}1Z)+llnC?Czvz#xdC=EUTQqAF}Jz#0L=ptY6& delta 551 zcmdn1y<3|vz?+#xgn@y9gTckdEN~;=L?#XpqsRFD_sz?hEExq-Qc{hQ3=++flMGW# zEYgf7e_)nl0V&xm#4?$K6U0(j{6qZhpVMBCOytP z_FtfR>*8be?F+=)?fx?^)10s7lghqeZ1AxGO(6ujg1NCkKft$%E|Jo7O0D6(}Fg&cGmuqUPA-$)YN3 H&%hc1oNmHc diff --git a/Xceed.Words.NET.Examples/Samples/Miscellaneous/MiscellaneousSample.cs b/Xceed.Words.NET.Examples/Samples/Miscellaneous/MiscellaneousSample.cs index dd4ef17a..62ee1532 100644 --- a/Xceed.Words.NET.Examples/Samples/Miscellaneous/MiscellaneousSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Miscellaneous/MiscellaneousSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Miscellaneous Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to create docs file by using the most common features of the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/CompanyReport.docx b/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/CompanyReport.docx index 46c5a305010e106e9d7b46eaa841fd56b09ea23b..b47fe53ebf2ddfbf530e467425814e4cc123ce2f 100644 GIT binary patch delta 4959 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 delta 4930 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 RHOe-!aGwj4diy8lzW_|yhwK0V diff --git a/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/CreateInvoice.docx b/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/CreateInvoice.docx index 63a74813c441b606e40ff25fa01c5bc7b2517e2b..b7ac2de3b9152a83a97c625a8d6d56a1138b6dfa 100644 GIT binary patch delta 4388 zcma)=WmMD)x5j5^7#O-+VrU$x0Rd?#=@JBKX;4B+{(|%{fHcy12oK=^f}}8XH%NC$ zcPRIq>st4|AK$&d{PtSUTF+kl+q3VpaqhEms?P8T2{gXwd8vnvD58Ji!NGvcn+`Uz zu*&?r)RCO?#Oj~iD6?*5Q#t|TRGJF~n*$2%-ni9H!F%najAPr&{xO)0;ZXfe=cg61H|$DaI9 z14A+3!0VVy=P54~Oxs@5*#o|50c_Lbk6-v-Aq$)shL&}!6G4ta@Ggd!>LUg}{6{sG zd|vukdtpuH=6P1eu$~SioNf+6*;dQc*%RE88alE$_FX#Md4C`-HFH?&2hZ`H%t1IA zPGWQec%_S6FlwB~5gO`)e%qh{Rj%X2rS)Ou#sZ7M3g~c~T@K00jkwr{3BortivbO>5{06C~C>clR5eXdOGN5{X{~-!$Aba(a0sZ)A^_fZG~cGk`jBznp%wkf^Lz$E0lA}hwLMqsLOhvCrBCvAWjtbu#<)}SYK<+)B@r}B>YwHU}|K8t-VzZG33r7*By>` zl1<{IK3_0GO{Esa)JDv+HPHu-w^o39JbZmb_O6d)?CS!Xc?zY;&X;`9ji^No7ee zW}vT}t)`oYSsCOv32<}T1QSy*9U|x~l2v|wo+H%$k>l${WytWsMoU+P3L?z+W@U@S zeANx&Y-JtNM)tU=QprNrTsZrHRy%ID_j`(KK8yE624lt02#mA#IW@@$PGVl9;$(&z z>afRThLAer&W;+oiCnta2b6)a7%IFhy za|Iz5LrCnoy|N69k`krTv;5T!(AQn0X5J(k!Lt~kuW2R7sVj~$5rjC0m=`?D<%-FO zw_2yul;ykxL|O)9iMAEbp6=m+_gn-YVW3f?|Ph&>89XC=yva9!Fw$w8LvFVQ%*93wX2yH2vIT!nI43 zO5mta(@g!jbpL~2>jcho7AfN^`D{>4mnEz57f-|igMCn=+?3pp_3kqG=e%Mg=Nf!N zX2bI)G%ce8SeR*uOoH1vqcofY-taV!IzujHyv<83Bg8(sF1A^XX1Vh;@_7b~ohPMz z0p}Y5N5*8k(5rMTVR)$E>PnodK-hYRVH6=>r9OEjZRWyb$NCk;rJmSYTc3=`RyCs% zriY3Ep^@h(w-5!NutHv%$q1U0u|WR0bp)+&|H_23N9U0^_AgENFE)K&maqyeFVc^5zx8Dh!E z!O$%niI^1bZN?4ZRTfakoYm68zy z&gWXgKSQFM0!!{wZtd0kWMTjYS<&Pop$o*~I!ibIoLR}_*$vAjP5Yu}!KWmSth(n7 z^=PS`F$zvrT2F8A`Q#!f#x}M9@*h2mgksjGD;NnVik$!<# z{=)ex(HBS2i(`tAo>+mVTo5(L;)25X8fz3J^LzWs&_imI;nwnEr=Es*; zJ;mIOp@gfYG(k_9;KJF7J8R{7hA*3>wFV2tRAN?$AqOXz5IruXq2Cu&wZ%aB`w*wv z*as-LqRFTt)vDs$p1C4bRp+L4d3|?@Z+}&&KOW^ABKI4Y1p!kHi4{@gEBCk4ty%HL zgrSJL)q+iZx^m$3d9R>SJ#dws%U#|ZU7J&R<_(0EGgriI3ILi`_rie_)_OV z$!)%;2iT9mA}hk^8^#sjn(oiaIY-Rq)OTOfHY+;6Dl(F+%v$rZH9rDca6TO)+VIL- zGUZcF!4d72S?;N~+vzk&aN>sU?_A2>%lM9J`;V^L`nZ-2tbPbM)P7M~=0+(b;4?sd z_qvTF%cY^w|7_={cehv~hq*6_#DrAUbiL#5U?Z_b0RfuGm@l-H^?f` zc!Z%>xaL~b4pyw>>((iqYQx6hAfm~Y!>#&>J7mA??!{I3DVuH4)?n`1i%r(LdxUK@ z-oespT5TBVydqCzS${G-1vm4*KlD|ouaGd?N32tf@VomVd^HAVU%Cw;Pu3=QDeiCO zAPciH5~=skNRNTLJ_ypAD0WC7axi8$Ymk{`Lp}PPb-gkjj{@205qSCILHZ1T!uKO6 zG^RDC2&ez{4JpMu^Vt;MTP5|@{>IkHQimNK+6a?LbBorX!s(GKmJFAp#>Iq{FE$gu z)=!ai`zm|8`!fbgxy4`gYM5XfQMb#4vx>iDE#JD>ggF7HrtAXGong%#*RC=l&czu? zFK2`Ii>Jzzi^&~y$>r@f*Jh>-tA8{>-E;A5m!1v#lPKB>#M)G%`lB_^S{{v7Nd5e# z6qWqjmY>mO5ortoGJTi6-JMt5O{!gqUn!$muV2hYF#4GZ)NQz?>?mY63%oJ+yzWrf zu?k=MWad zzRN(zj$yX!xg$!m3D?W^=ACf3cQTNfw)sj70mRe~{HTo1={cdBxdnT!%PgDkausc< z%e)xw{EUS|8h^^f6{w#`o#!0SGULT)N%G}?qqG`mw9iwV4PeoZ@Q-;@El}q42~R3? zjow}#zo)Wph+V@^(I(F@V7kmS&+s2rm|;#-N8V0QBIK@GywnlktJxMcIn~lBFyXfY z4*Zz5&T5w$w67t_3Z54glINxyP0#yZdQNDp@(LVs@783LtRTyUZM4MquV?f?zic%- zrX5)r$1hMp=H=a1yOT^* zBnYqIY1N7EE3;pza-23UX$*{t9QGUn0{y~;H;F8A_`N|Nr@Z>?u73@jWvC2~b&@45 z=(aOQ71>w@8s3Bs(67$C-&O5c)!2F`P^okqvbp@xG`^=#EdsFu4X5PciFgXh8B6xM z8SMVba9x~Kb|B@}~Kx z5EJQTo4XRKJ_#;+OTIdOGGW-e=)J>o+xt?su|sz2!sE>q zj(2Tk?k&VoNFiyQ>liS475+kAI3($T>NR-@6S1B&|8H6?!3YjY`qle$T0PoAK%cN# z=DrOhk9SyIGfreF6_oHIxpkr3KfN>Rj`^hq>0+&*nJiDfrxOzI+gwVodw0}yN&xBR z`!{)5{Z5o9BPSRE)b0_wwA9@whG&Dna*a2xVa-gHORUJm&w^h?3_3wt%IQU=sZqq>$A74Y7~KDdQc1wgf5-$1 mZu&!Xq+njz|7IT{54Tr38n}4>8j}ChemEe|5fS*G>3;yB3?IV) delta 4388 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 delta 2489 zcmZ`*2{hDe8~=}GtW(ykL$>5`{VQ9x(GjzTyhM>q92~!j+R}W7U(>}F4%^NB{liLVO4YPpP3_M12#LLroZ17z- z9A#@GVe{?G-Q#c9v!B@0)aubbBzou_Q-Qg}McdM?i}qW; z`=pC-%6dvi67$vkR%k|?mYuZ-gMR&oXIUpeqCF{$N*8iaCxx)&+=g1ZT{|auh!}uc z!uoIsHp}3VY6hBex5)Vhy+{kJ8Xt7UI%iDLr;Zb29^+gjDg~8dsv1_No@YC&zmrB2e3@uBv)%IYhH#_bU~Flhg`x8xqF~%GdbuiJa^x#d zJ5z-J9kYKl=75TM8s|68K&58$!4!6-WTZ{+8w<& zF}94@Tt*q?9QnPW&dxnEYa*-5%n-+p+N>~P7o_nV+JyCErZ+XkrRvbNYrmX@iq9Wo z`rJ|uL1n1q2M$fnTQ*SNG9x``4jk>Af=$M~W{V4|em?y{NJ49ud#RYcJ-ke~NND9( z2nFB%5kM11^?~%j*&Cv%?(ZD)T3A+yp2)hI3>hJ{gn8At)Lrg-h5{o~^hV#Z?2`@A z3$OAQ!+)^y5)PL>x@s=6 za*acdL~Lu-t5wN%aOr!@J-awaxv{I|(4=?AJySo?%FQd6GC;CPHAWqimgITyCd04S zkLIP^G&AxAn^tU_B!zYA_WN5ai0J;AR zAy=25xGg}0rqtHWJz~vwOW)G*T=N5n^X*1H^LHNfoZ)XsUzV$gBDT#_y2_dUV&|*X z0&pX~k?|KgMRU_GE%hkalXh3lcV!DAMphn}AWAp1d{zx6@fn-H7c51_4{-R_L+efa zH5TS8t=B(x8pwtaTC=o1_TfMOV0vs}h@ApcdRO|HN@}ayzTn^%K2z^T_Uli9<*_ zuc>8UWNkK0**8_jt<4%*P+H0vVrCk5ED7Iv9E)j*%MJr8@ukg3pWpK7{evP_y=_>h%AFSJ^NTFAGHm9rN%hzj*}`fL`qjIB$hNPF-J zY{|l^(ca^pi=SuK(f8wu^BN(F&pcX-XBJavjdx{Sm{+2j^WgL>$0 zfC$PN${Q1oN4yYr%_@bM(OJCL4_H>1z7i8pbc;S(M|@G2pXB|iCGisl*drCe@1z3k zlgcJ>p*aRe^ucNC6*YU!^jj_7=-Uhg|S9}UQd%RP<%O@!)uqO%K(I5t;LB)_1 zlModpiIb0pk+08b`)7qrb=&I1h%>aKXI1Qc>0I6uc%qJVmZtR7T5=N)T4IgS^>Bc* z%Fa)E7+J4>E%h-Z>a^8Z5x7Zk@@rr6#fj8aUzs%Rp3KaVjf?;cU>N$bk<>HwpwGW+12WS_&1+*?W@Y2s;dbr zyzF5ST~@yay)Zpun?r!I)m^fZu*igBTMgwJv!CfC62a`a$)Ka>eO`ySVHlJW@B7p2 z!!Tr7VBgWUN`a?YpR~*{U!P45-YrjH))eQA+$OpNX==bmS9h`%tEe4?dP?umyiVEa zDbdxWt1%nsh$qJ$U)U~PI1pkQtoz#z6UT^{VA!*$a7oomFY*TL;5dVL4fcj5TFOh1J{B= zytM;x-UO_+p|`Q2m#&vL%s|)J3#M;uWCAlWFz|+5fn#x34E1ovo<>Gm!GZWRkc50( zv3z~8JZQ$1|L^I8kwgX=?ces=hS5U?>F&E`?2x>|*qt)9jyQW diff --git a/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/MailMerge/Acceptance_155285.docx b/Xceed.Words.NET.Examples/Samples/Miscellaneous/Output/MailMerge/Acceptance_155285.docx index 95446afc4d91ed839e44b6db209e3698c9e0eeb7..29a974c1c79bc27510815f81c77955b1b319e5a0 100644 GIT binary patch delta 85 zcmdnBi*eU3#trtIEF9jOf;KyI))+xphpq3jLs(0kL---AKS7ERvB`>22f;#r- delta 85 zcmdnBi*eU3#trtIEG{-?ft#H22f;#r- delta 85 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 diff --git a/Xceed.Words.NET.Examples/Samples/Paragraph/Output/ForceMultiParagraphsOnSinglePage.docx b/Xceed.Words.NET.Examples/Samples/Paragraph/Output/ForceMultiParagraphsOnSinglePage.docx index 65c56d08e3c0149204370726126eb4f0d59ae623..a2141e25d9283691cd80e1d386abd8319bb5d48d 100644 GIT binary patch delta 460 zcmbQHJ6)GAz?+#xgn@y9gMr<9Q_x1fY-SD+V~gwetj&$gmW%?4=H{u1NhXO&7RHGt ziOJ@ZPqE0cfRt>0!!ntJ6U5q3{q*Ad$sN4@^%l8rR9s7Uzii9B%5Cw@qSNEei83x* zY3{xwq8kEQgAxudJNmxmLZpQw znG_${g|C-8TH{ktfl)z9lY2Q(ehJ6<6*Wc8+*kF^%czoF^lhq>EW=;3` z%*3&G_N2MT*=l#a@L&D@kkc9?x6h#mcRuR6x?|_^hyxOrzumvS>zR1e9*5wKrHQA~ z4lhZIkNWaVzid7v#F(HV7C-gxb#F!nhEf&=2BFPY_}UmDffFa-3uUbrlw$^qO};2% z4G-MOBBF*6QBP4zq)_Y@b%Y3C5S3!wHTkuuB7`d-CdC*ySzAmA!VLs+7fsF)Q(-#< HiaiDZ7$UvL delta 481 zcmbQPJ584_z?+#xgn@y9gTdLxEN~-VHZuo^A#|W?_U1-rOGW_`Q)BZ~6SE|9OT$zX z6C;bsrzKuR{hVVTUq30C~q=F7Xu9lZYaHwyQKl_7${HRa4YP68EzF{T*bV1t*i%VqL7{BDiR-aXy$o6EXXu*RS%UD-$UZ(kJPB<6G z-r18Pm$Aj}dEvkM{UI-%)n3cI?}kK$R$kmx-Brn>nD@VSZFb$#scF9qS4SVU{50pJ zzHZfL@!kHA0Aqp%Sp3w#*S#4T7)n_f7=#!$U*l_Kgal5!fG?D_K~RnvEH?R)h&4QL zCyR<2LPWhpEs;X8N7NA_d{I=2ap&YWqKXi%pqLb6z+@dUC3#SY?@enIxyr=A5Y5iO UAP9^-1XwsZS4@TNASg;100|SW_W%F@ diff --git a/Xceed.Words.NET.Examples/Samples/Paragraph/Output/ForceParagraphOnSinglePage.docx b/Xceed.Words.NET.Examples/Samples/Paragraph/Output/ForceParagraphOnSinglePage.docx index 84ed170dbbced69781480f13fb4416c33170fdd7..e5b22f898d469c16d1b688899088971a4e414027 100644 GIT binary patch delta 474 zcmZ3iyF`~Sz?+#xgn@y9gMr<9Q_x1f3T6%v>+VA`xXhr}N1A`2M%;XKCvXl4lYSweEyc^=X`(<11 zRqh|gKRb@}mNIud*S>(hqv-r!-A{l zzHD2Y*mw4@)VJMl1=%Ho-Cz9DoM4jV%p2Qtx$V*dYnjv&cUsIsrJlP>2ET~5^8Bk4 zy@WM+&M#HwyqQl*W`3}Dxo)!eSbg*5&mCs}7?&x=vGF+gUD_^@y+Hrm>})e{69xZe zZON)zA9P8p&D88(#o+XQS<3Ukh5q7yGrz`0bl9#7Upi@$w&LeY9an9SG98<-?f<@O zru#1hvAHg_xE#?jsr!$2_q{(y-w8v4j|m!l@l*d^_hw{ZC}m+_5MtQ;h_96q5>(j& zzEIX4K{;ly*yMX6*6^U7tSD*-5e*Zy{e Wh$%t1aX{|+$(3R%Z0A97$p8QbCb_Zz delta 474 zcmZ3YyI7Ymz?+#xgn@y9gTdLxEN~-V1v3YTG4=mx{mp&MmW%=^7UrpD#>r+Ti56)l zi6%yqud~RpfRt?h$ugNk7{n^*QAvFVG$VkCfkB2rX7WZ+*~xo&HR~1gJOVD~-Po|U zit)Cjy5L9mZOmVCbS#9z4>*Z>HL}jud;a}dripz1``dq4&pc_|W?^~TG15RGW9n;l z>yiyBwU-anZMS`(6ZEd*@e}2f%4TH-%bvW~?9FmfPI_o_E9Rn}#Ka;AwpXoHLd=(< zk7Y?+G8?O^&Nh%Js&pL2X{Np{>N~6hM%#Ug1aD_kL(3;@n6N;PM9e4*Rr>B z-JZ66YRaTSy{!yR>zAd7D;qxP{$D%DHQXWxtq)=BcJ{QW+A?&s{a zt3;l*Wrtp$wb}RcQdj+dN#8jkp~nObz4)nruX{5xFqE<|FbFZoY<|Mm!Uzef906Y_ zYpM&C-VO`Fd!Suz@#rKTn)8JQ;~8YZWj z7#kZYDd^kT=m(|dB$j06=M`sU78Kh-3}J#Ave}$vGKVn8l$lod=Di0R9>B!FAj2Rt z`JIUD{9hpVHXqmg zHM7)BKJpvzel$vAD4MeGa0Ih$^!oL8buKp8yq4lyv3int|DMciI~~q7Uf8WUvoh<# za+mt3T7I#lIpM97e6*e{ogjKISSO+9<*)Z!*8Oe07Bywj6yL2;ran)8Y3o;g)-Rin z8aVM&|6boL#@Elt0t%qbEBSq)tX~3h%wVy}G9uRSIG7wSVh9nPB4Wu257WulL>wW) u(xOt#tb7cU75RiGdyDcw1fxZz80Snb6IFt6=K#5HCvO*3VdDiwH3I;=55sK$ delta 499 zcmaE){ZN}Pz?+#xgn@y9gTdLxEN~;=HYN@bV|s%A^37+MEE$c=EzMHX(oBtvOn|^R z(LhN--_AxqC^aXsBr`v+I3u&5*bZU{6V#B+<}8yrgh8e_mcIS*4rq7)69a<`gUsaj zBC?Zz@yOTv9X1efSf6xu-i<~RmC(z1H#V%TYV5T2QxdwpY3{Uny{zt!xFS|KX>Lfk z{PfQ~o8D)S-_~xfp6gboBF~mBb;6jjr)Nu+K`e9em2%NH+h*JLN(8&VU>A>&GF;eb z=eGTs&53zxJTpsEf?T8R6MYuG-{JhTN%mv4qSw3WJUh}h)gQijvA!ehwd1A9Q$M?? z{bPKlIM1Ey0N)GiF5VB5zrLDuR*3h;=B$MNRcl*fwsKu{ZuB_t^+qwLH6?-J5#lF5cz4JDJ^D=;HEiOi z{=M$KS%R;Rkp&b$n^*DsLRr5BpL-5bj(c_s!%TqAF}Wph#u_07c-uHvj+t diff --git a/Xceed.Words.NET.Examples/Samples/Paragraph/Output/SimpleFormattedParagraphs.docx b/Xceed.Words.NET.Examples/Samples/Paragraph/Output/SimpleFormattedParagraphs.docx index 34e7ee577f3e538fda224ff34f19209323c4d96c..7c3f0497b71b6a0c905f66517b775c79af168945 100644 GIT binary patch delta 474 zcmdn2ze%4jz?+#xgn@y9gMr<9Q_x1fS{4ov=EExqXlG73mEKJM|Em90k zEDe$;-(i(w0V&!1k97`*Fo;#j^62e*pcw&73=A?1GLsL8$xc4SCs%*a@2~-nL%r&! zxyxGDEzG#7x4U5OH|ET&?V`CtsxK4nA8Yh~B+ilHBwO%c)8tg^y2?#|{{7l^Z=a8{ z^&bLE)4d3j-{OyLd?ujtvaVT=XP7 zK3FHA=jHeNx2>*=M=jkKJyqj~miQ~ra Wl_1WM7_Oru*_8F;vG+mH|6d!p+2$;<)1lR>fkl~Vt6jvtNC4FkYcg%tq{X= z{#wf}l$V74@+|czKF0Djn=Pi^_~c8Q$MqfOW;i}>zI?jH>>uMY#d+>L4t}S~C9)Uj zpW8k?XIh4X+-<48O{aF=JmJQn#uYZr;lz5hl%6C@~^pg|cwb@NmHiHwk-suJ{t zvQ7)hF@wb>zZJEH2lZqFF++%Gs+c7wJWMAq7juLNzY&vSyf&F#ToJ<65tm}jo$M~I V1mWfax%(z}h^w&O69vWt0{~j{vswTE diff --git a/Xceed.Words.NET.Examples/Samples/Paragraph/Output/TextActions.docx b/Xceed.Words.NET.Examples/Samples/Paragraph/Output/TextActions.docx index 2550c0041191d907f5672f95e2c716982cb832e1..d8cd3a382a13087b0b2b3680da0062ad24ce9695 100644 GIT binary patch delta 1463 zcmaE>`$ktNz?+#xgn@y9gMr<9Q;?a3Y3f8F>-xL?w+#g9=WqFcu+j$6jOOCux+$g@y7KMkyYKh?DYUcOdD3_j%hH`9 z!t3vI+b}hqoYDRBNc4;)*55kJLXMbBW>UMywWVBWZ+&@8+s2e`nHEJ2rxyjCSFX%Z z`ciu~=)}r*^(UEFgoIZXWo=mftj_Q1*F`UkW{O|=AbEaA-|~IZ=0hx&bg*#?Go?UX63OkIPS&PEq}INnlNKstIm9*q?zfj zD^oY}N3F@|{CHwB*NQ1xdQ(ysnD)&JJJNfkZbLis+7901c3N-hlh&D@)D)LCe3bad z{D$q3b#tG&5pmOx*vX+lqTGtsMk<*_+Q)BUm2@i%V! zY#%GC$?^9;|NrCb&H3{J=Ds=<9Q#wVaQd{HT{<}{+y06OYcOAZ!zWeyg1_3Gz1PL& z?SWMyRi{2^XPf?eajhh1*@6w{0;j}AXQ$Q|-9IH^bfxRKFu!wSW8{pGq?CRB=g;}o zpL@cT?YdM~bs5`5wu1}q^YZQb`!TdYgwHKe;LiuMu7w-4byhBlIVRJ6^VQb_PHQ=% zZx5?#?uEdv?2y?WAlLm&vx*uaXV6-F5LQUTz&Pah>{$SqEs(0n9b-)+t06}1;Gta2=%e7o6+butGhh*jJ+N#Wh(d%Ujo-hPJ- z1lraoot<}s<#}Mpc4@Pm)o};<3xy`$nD~~#R+_u-i0FoZ)}Vxg%T8DRnC-v+&&O~3 z?(X+ft~@5d{+{KI7!QZl+p`a>7`-={>%J+!&D>}7wD$&ovC7ZRZl+&To>hA-epfhY z;|JqiHXH4HjGh{mluY~OS?1w=EKBMd&yM<(Nslv+{TJA~wfPwP`stjpznFcJt$HOI zWl~=la4yidn^C;|go#4G+X2U|UzcgU{&mjd+{{pi7gwj;G1BC*yf{DXe)H6b?1`Z( z1Ol(e+&pV~RB73i_5b}|--&;o8WL=}P4o1!hsQqY>sEc#FPjf3#+abRSp3w#*EcKi z_cKBQXRClOl*J|_$IJmM=qBrknu9r@0G^yJY6w<6d4Z@UQb;}$b&LmT02%4c$iPs_ z!oVN|jv5%j&(FY6o?n!rpI4fjlvJ}jofCN2sR1OOE_fFJ+> delta 1435 zcmaE(`&L&dz?+#xgn@y9gTdLxEb#Vof%6lEtm~uwZySiz&EN7r!L@ox?`+&~CbXkw--d0+owY9e9TzTF;8F{%_am&aCGpCcD z1}`o*G(6D~EHdMKX7;w1IZ0zjIczTu03q4ruccSwUB6DtZrJUTj((Vp@VwT*^e@!+v*L&XNmZn*eX$J|1bNE zU6Q%q=S601IW-649(LX4`Vju%b5Evpf|YO+r)}uTOWSML_uPFRv)ew{s4r(pS40-0 zaGrzax+xbf))mUcZKx3{IKz6O&LU>>wfVc|8tWhSXS?~k>|%$3`Ra>;yf&M6t~}m< zw)WJC8O-t1_d=yfroqDBo1EDxzU&ZK$|)6iO4!^=RMX&R=!-q3Yd!x7~tE?VGkHX}l5gUbQ2j^FY$JI@^K(?L)`R zWC~>>(o8-yfBRr|tSR)|yEVryEVg-S^L)q7#wQOIBp!%4Hzd2M#9s_ADY5!fu}#{< zS=^(%esTJ7Wh)tW->EUzPj2Q8-xrqg@WFw-k3$06-tPUF@x~}2`RK(czcQDiukb`Xx^~r0c6Z*YDSNNZJ-hb(CF>m#H+CwR=zW~L{YB@a z`CB|>W=$y2({X2ZtKNRZ!v3n>s{34rz9u*Fmwx6G`Og+02+WjRz)Z;i&XmfFu7BNp zo!OF6AkE0q$UM=~*uvP{%)~s^VzL6O91AGlZgygw%)tp_J+a%o=KbV*ysq_*d50AQ zT-P_`)OomsdHbGCKoZAwY2*z@zzb;$CP7MjjeQ-9XwcX7jifxTOs+tk-T=ZyKs>=R_yKf&PE z>Kl&JX3VKEnVuDzAz>@sSzdEg`m%(hX?o0tO=df1PMW=(`N*Uf{;S^~b6T@?i`k;0E^T@jBudg@*<lqRFKUStk`F~4AVC1eS#`?* diff --git a/Xceed.Words.NET.Examples/Samples/Paragraph/ParagraphSample.cs b/Xceed.Words.NET.Examples/Samples/Paragraph/ParagraphSample.cs index c958a651..4997f037 100644 --- a/Xceed.Words.NET.Examples/Samples/Paragraph/ParagraphSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Paragraph/ParagraphSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Paragraph Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to create, format and position paragraphs when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Samples/Parallel/Output/OutputDoc1.docx b/Xceed.Words.NET.Examples/Samples/Parallel/Output/OutputDoc1.docx index 4fbe0f5b6e533aec0830364faf0c789bd0e0045f..12c5cf822ae9c1ca34084598fe41e94c9a137b42 100644 GIT binary patch delta 2161 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 H{YUk0rOtgA diff --git a/Xceed.Words.NET.Examples/Samples/Parallel/Output/OutputDoc3.docx b/Xceed.Words.NET.Examples/Samples/Parallel/Output/OutputDoc3.docx index f06a8e5578e3f2a2f60f13d117cb3b16491da176..d105e11fd65f5f979575d73e0858dcc132dd6228 100644 GIT binary patch delta 1991 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 uui*Zv(NwYx;n(o15^8Lk_f|q}oAv + /// Load a document with uninstalled font and convert it to PDF. + /// + public static void ConvertToPDFWithUninstalledFont() + { + + + // This option is available when you buy Xceed Words for .NET from https://xceed.com/xceed-words-for-net/. + } + #endregion } } diff --git a/Xceed.Words.NET.Examples/Samples/Pdf/Resources/DocumentToConvertWithUninstalledFont.docx b/Xceed.Words.NET.Examples/Samples/Pdf/Resources/DocumentToConvertWithUninstalledFont.docx new file mode 100644 index 0000000000000000000000000000000000000000..a75540ab059bc4ce3f74f32f93b35f1622b92738 GIT binary patch literal 11969 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 literal 0 HcmV?d00001 diff --git a/Xceed.Words.NET.Examples/Samples/Pdf/Resources/The Bugatten.ttf b/Xceed.Words.NET.Examples/Samples/Pdf/Resources/The Bugatten.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ba18c9f4e9eed9838b866e1c252dd4bf816ece89 GIT binary patch literal 86348 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�QlweDSo+x&5TbQ;+Kn~At*lM@U1{N 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 delta 1340 zcmbQEJ6o48z?+#xgn@y9gTckdEN~;=4JHl{qr>*tq|NV`EExq-3=J%e&COF&(~Oc# zEXGWSPtXR?NI=`JJ+ZEU|Jp7TCutezEe;*O7*Z_nq+T`RxH&KI>?*;g^~ z`S&~PCF=`LrX0WQ^Iy>_nQaMs`)L=me~ix*=ecnm=sQ&|BK<)B-1g^r(=rao-Dcyv zv}NiwsrMTk8Y_8w;(br*O;(#P^f&XXZA53MRBEb;*wzrIso|pBBFVe{S+6awUpsY? z(NdkIlbi$|O&8n$LwvVCB;c5!0T(~@?{)9Z7JPk-kgz$$@5{&u3Z+JdF2B6V3WBcn z=T#+`R1zQERb29NndVH68RnCw%bzm%+ieu zJ8CA?$XC16H)$-J$GP{RV9vK&?zxf+pJlFJsNCaPF8X|J`9bc~8QMoDDQ7?2a$?&0 zx$P0`@40u@zda}6`Pj2Neb&jPt6n9m{CjE}XVJU=j1W)d|Lm{qH}BNc{`~g$b^Gs& zKkvU=+SJ2*T8S_4*W=5@MmKA>^{-y^r|si+@8Z(^-i?MlmX(3^UJUWUI|@H9m^b}` z>8c&oPL z#8Sg_*O#wiA01FSk&~sYf2=n@=Jzr7_*{iI!t8IJdAIj6Uwb^4{mq`kYK*f>ZkQxo z=9|r$6Q(b5!>`SFXQQgvzN(tF7U9-jb|wGn!vpk%ucd$cw!!|^&M@{Jk=kar&b>6& zk=@_?kUiX3=|Zto|K!a5yt5Qm%wBaT(Btq5OS>?6ZlNaudk;phd^j=8dhz=6QSa@} zBxG#bdt!HP*|pt@>DN+24u2~?#d1iW-D&NuKfx8>`2)NenRFQtMcS$6nY$-4F)&QN vFJcTY+9peh8iF(GWPedhL>V?g)CnSbP1FX$5EHXS%EmEbR&2*WMl%2aBfelE diff --git a/Xceed.Words.NET.Examples/Samples/Protection/Output/AddProtection.docx b/Xceed.Words.NET.Examples/Samples/Protection/Output/AddProtection.docx index 960456551c34b837ab60800aee94104d0b34db67..c3b25cadb18cd304718cd0b12cd6252f9b20444e 100644 GIT binary patch delta 460 zcmbQJGg*f(z?+#xgn@y9gMq_)Q_x1f6HFW+Mwl-P-{yNvmW%=>MwX^VCMm|IMixdU ziAHIY)mh|NKuR`yvP|aS1hL%iRl2;N{FKMP{zjqGqp;H5iHEnnVvR}vB-ojI)6e_- zu_on0R-KTAA`u&27S-j?bNl@9+rFE7{gf>i@;93bed=L!T%2n>!|#yHZFa`pZ`1l0 zcdb{9bibNVbWH2jbe%KkU5ltRL(%+A1Us87wvKCr)uVf6e@Q&a@1NdD5KKS6Ww`W;(qmRn@*o z;Y*%Z+PuCOmtE_lYQ@EpeCIyj^UUkPDlN;^?=-~>j&1q-ee1fPOU1<3ta1&u;fh^X z@^7hY{=cN(oRAP>f`(Z9)W6rg85tN#Sr{0EHXHD@F+u`o7r!r*#Vu&d3>KU0BVr8? z+{yhSh7i#sB9=&@$R_Ft5%w09Vicd8CaMVGb_2QVCNC3Jf^g3Ox&J3W7gb@i1H~Q# E0EcO@yZ`_I delta 474 zcmbQNGf{^xz?+#xgn@y9gTckdEN~;=2__B@LoL$e&E|VdmW%>MCW$GDNk---#wLa) z7ADD))mh|NKuR`yvP|X>2C-&6ynp&F(2M{k1_l`hnaK*GvXgmuHR>%g=WJQ|s_bxE z?p1D{a~7Q*Ij74S=Jm3=KjMm5;iS1C;qucz_iTEfJ$_qTUNP70n~xpOH4lwVG7^%h zw-1&GJzMeKtl-A`K9eLL*@f~k37JP&IBR?IPFDul`brqRKCz^0Tiu}hphR$YNeM@Mf64o!)0&xuP;5R zza{D-hf{3QQtgY6o_Tl2|2_Io7!rC+(9nyY`uDmwBLhPz3j>1?gUn_Vz7|GEQ0?LO zg|c`BZJEJhll?@j;XyrlqKF|x^q7bxCp=6ibBH=ZgndP&7)2*%h$=$3y+H1o$ty&a UAl!36?%&BTMOD~rKyk?c06EpP0RR91 diff --git a/Xceed.Words.NET.Examples/Samples/Protection/Output/UpdatedPasswordProtected.docx b/Xceed.Words.NET.Examples/Samples/Protection/Output/UpdatedPasswordProtected.docx new file mode 100644 index 0000000000000000000000000000000000000000..5a514b7494e868ccd0a25f5e89860efcf5668939 GIT binary patch literal 5800 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 literal 0 HcmV?d00001 diff --git a/Xceed.Words.NET.Examples/Samples/Protection/ProtectionSample.cs b/Xceed.Words.NET.Examples/Samples/Protection/ProtectionSample.cs index 385f3662..c7a583ed 100644 --- a/Xceed.Words.NET.Examples/Samples/Protection/ProtectionSample.cs +++ b/Xceed.Words.NET.Examples/Samples/Protection/ProtectionSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Protection Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to add protection to a docx file when using the API from the Xceed Words for .NET. @@ -20,6 +20,7 @@ public class ProtectionSample { #region Private Members + private const string ProtectionSampleResourceDirectory = Program.SampleDirectory + @"Protection\Resources\"; private const string ProtectionSampleOutputDirectory = Program.SampleDirectory + @"Protection\Output\"; #endregion @@ -65,7 +66,7 @@ public static void AddPasswordProtection() document.AddPasswordProtection( EditRestrictions.readOnly, "xceed" ); // Save this document to disk. - document.Save(); + document.Save( "xceed" ); Console.WriteLine( "\tCreated: AddPasswordProtection.docx\n" ); } } @@ -101,6 +102,35 @@ public static void AddProtection() } } + /// + /// Load and change a document password protection. + /// + public static void ChangePasswordProtection() + { + Console.WriteLine( "\tChangePasswordProtection()" ); + + // Load a password protected document. + using( var document = DocX.Load( ProtectionSample.ProtectionSampleResourceDirectory + @"PasswordProtected.docx" ) ) + { + // Check if the document is password protected. + if( document.IsPasswordProtected) + { + // Remove existing password protection. + document.RemovePasswordProtection( "xceed" ); + + // Set the document as read only and add a new password to unlock it. + document.AddPasswordProtection( EditRestrictions.readOnly, "words" ); + } + + // Replace displayed text in document. + document.ReplaceText( "xceed", "words" ); + + // Save this document to disk. + document.SaveAs( ProtectionSample.ProtectionSampleOutputDirectory + @"UpdatedPasswordProtected.docx", "words" ); + Console.WriteLine( "\tCreated: UpdatedPasswordProtected.docx\n" ); + } + } + #endregion } } diff --git a/Xceed.Words.NET.Examples/Samples/Protection/Resources/PasswordProtected.docx b/Xceed.Words.NET.Examples/Samples/Protection/Resources/PasswordProtected.docx new file mode 100644 index 0000000000000000000000000000000000000000..12a7a6b1dafec4f78a4dca2cfd574713e3875638 GIT binary patch literal 5789 zcmbVQ2RIz<+8$PkE`&svRU=p>y4495K}b=fthRQQU3C#5TJ#nqAxhLJ(Gn#@7ZNpk zjUIyNHTXB@eECoEo$vhLx&E1J=DMcb_sqQSGtYBBw=N7sZ~*{-b3oi(553O7l-gK) z0C+|O0OtW_z{APa8e;8a<%Wc#FoK>)NA}E10B`yaz`rl423=8OLe%xQS7h$URT8V; zxd+P%qO*kENbE%&15tC-Z^Br-$nWkg%e;=Ku0aOv#d)6ArySa>)*deva9+1iaHxC{ z@1hl^YhtUvmb7zkyDxy|l@`2kK$Cx21E@2vyYDf~nX(w7$qS=aQgl^8SRhkX&Tl9g zkhj&)lSWpH)0Oi+@ih?M{;C^YRqS8`=Y!eb=+kDN?x$C?GRlghw=~c|UHdXo6QikO7`s8^zTP_+_VzO|m%`5OlKhg6#|%TCWeY?& z9V$8;vZ?`vHD#f_(D(yVd=?cp7j2Rxsaj1wZbPapvz~W7(6$Kyd)AeS_bFt1M0~-7 z8xk$s0SqvgRFcLZ9XIzaTgc$m{ZWSfz$Y%`9NJB;SDk0LT_Pm7TwgzD9=v`_@JhQW zb=%7u-w$P0pey@uhZvBIOw$3a?J2eFafbOp$C&TB}(gs z4G?9$gi_Y!MT&iaBna_;a;z*96b1<{#1%(cOXhH286pi933Oy`rHI$IW3vVdd0*$soEN<@|D57Z=;4|A^BcvAr8R?97J;06#V|Tx^@W!X42N!5{no zE2_WMzLS;z5&7Z$CVkUBem*)`!Ez zg{_6*qBf$!QrE=A#K7zjIa$bWUo7`yxGwbNQ3Q_RUY{=OBXcINk=U>y5f;u5$7#m}IeR(I&Yg^hy|-RzCT>AZ6fjlzfUL zJ#@dQHNyLC7N%B>CtYv`zdNV#%jmR;_BmY^q@-X~ zWR57`s{0IcjQ1mcB3(aPsfG zIYj?XTZ7L?gV9Js+DL=QNW-@xPOBo0s6;UA_*UVh621UcH9Xw+=(rJ8~%K}xIS>7%axZ?1{xle9`?u!t1}NL2l7xF3hN+|=b9OnN%wXM zBk8RuUwTqy&vLLHO!*3E>*?BEEI&*T3K`sX4qk|gFy%X;lXMr*E7@w6ZYzTEOYfRK zCF*DKT{NcO9!ye0TT1yiHZUAAE%|k3_g#B5QK^;Xpl~mlDP+@I&9M0%d9M(Yp;EDx zPsZ!=bHDK}@@{p;6-sM7*!Z{X=HoQF!vIP5AFSTn{eqEv&|)Y0YBV(EV70M>SZ9 zw;$$NOyNIMEe-^)jRBmm5#MkH9K_n0R7xakfCV;m*DP*Ne`4I|UCl@fLQw&n1yH~< zZx8sKF$Vg43{8Uq_dNFie~WPt5QhByvVVvJ6~I~mUA2T#bt}Cg251IZfj>wU$Fu(n zB;aYcr`z*q==A>^+Bow6guadxnkiopOl+XC*mr&&@Id~1`VQk94fQ zi%dGTQTs7zItXWRF2(gs!%v@J+gNy9)O&71EtSamS=4P|18rfn*J8>^&g{m6{=?x{ z1*w)Rk#l;FZ`f>_5$K&J>wH(hF>C;DEW?d zugZaq|IoHsZe(L#HI6>52N~40V1f*yhz~cmXvPy{PNS=7B5lTu@eTGui1nU@YDOv@ z=yL0=nsJ4s(dk5gz~?Jp8sbmwT&)t@_DyoXeIP}%O`mz&L8YWZ&^x>I%l76nQkyt? z+);XG&sEwk$>!V6TUTj=u;~#_Kalx%hscA$q1F=Cii1RDdilqpm5k>RMd5d3?9RVD z23zJjA3Rnm9u75eGMztC3^&0-z&&9GeFGmn>6n~vPrYkND$?UH&T<=NBo;6}seAug zZ}nuMY<>8B&2&xSF|h!`3IZ>3YkrqmSp8)vG4I>6jWwfO0lTrnzKYSBoUXtj%vqfs zqhh(f#bnlqOto9IVEquWm=Rk=@ou9cV$ugs|?6aInZdXF)@)MUbohzEzLf%jP7?zRy zA40hTs7qDMRpKogtK`G|pjuPehDSx5q()zNT@z2uz=>dEMez=qna3qnq0{HyNSW|O zD#4LE*qg$Osi&`cb!GSzWE`%J>D@=<7IA$DX6ywRdyV@1-5VGWT0e|Yh-HGVWxmNg z?;9;vw!KguoP`3^Chgz@kxjB;|A($yold z{nCg&T|SV%0a1}U{8hXDXfvI#4C`!WMBMJnU3{bRD#KbOw*rS?zt}~4@ZKZF;=#qE zqg!>M_p@}iseDRUpOu)FzO-keGM9gsVcPd~8E+CY*-D5^a|}cp>xmWktS;KVP_No+ zdf=zIN7~X=@mxc(dbUY)rN&%+hK<$bzFCq?lo+OIjtpyx-p;mq9)56+Pb}1(dWfEh z(jgyD1ME2D6+W6w)R7b1dG})7iyDWK_}h2hT$>#|g2F+u+EFIt9|^~W?wpTK0=Oss3OLe{2ZhG;Jq69#XL5L5u^k$v#J(L z2Ac`Heal1oqf3(<*@`%>n7bj|h84TPm)|Nm_vA8SC6oVlYZ86kVfY%)@7m5h z@njf=lhJMj06_C|5K(SOOSmge691jN%TCZnHM3I(?I(H@hx-PY8XCe|yE9`83bFVB zrID64)c0zueOsH;~{Xt4WRac8KjuWfb7kQ7?Q zl#(iP&V%_!b9-*oiU%8|KHMY*^#Dw7p76ZD=(HyonUS`x-qJwzTCTrlrfZc=GU=t) zRx@wnecN53C|J1rjEab&+`1wE-L(Py?>13t!b?dx>5o#-MG|SnDe*jaH9R&~H;^sq zH<}e>*~Q~CbZGX2gDnh_xm>UvcwR*WRR|Ral?5pKi2jOHf4@S@Zhl+rx4HZQbzGI*(RLk+DmRE`nF}6og94E$mv< zeZ9EEktY~+e?k~Y+!B^hoTyYzSfbZP@PNnnqZuvRc6yvR#2awaGfe7iQJ~IyaYeae zS765*V=%FH=-pUmdO;!_r6i`5J73t>VpT~tc~PC=c#82$CIi%X9`Vt%vkw68@97lN zmLMgc&JDhqC#O6MmaEq;Ll1o(;x;)?^|sSdhL_bX2fHS9LwoH)emcx8#-DnI)M*OVim%v#{4%`l9@}AO7zH%JRG?9t8pbCtM%%zjg>3j=|uf{BOIM z)LX{rS@8>g-?VT|Oo_lImr0q{TbYLmt6a-DyC{z_iBTH0K-AR^>aDL>YyReDm)F-1@QTeFeU^5f&wVQZ?)L8L@KYD(TLOKz1_{pS7~$1ty<-4;_%- zrKC-L%0F@$6AJXjNpkN5D{K1d3OZaD?lY$(l~!V^C}8;dmh6^>_F6E6L4-&r{NrNw z_9euO?`2BJq*Uu&$@L8rz0w3Xbi_#Avvv~OnXQxD5!5$U)zk0G*xd+uGqp!%zM^a! z!yik@EvXGN3fRj9&X%7ZtO*{Lzr`LP&f4WbYV+tVelFsAu=CuWA_&5bFc3W^q^nLO z^^_qEW-!$Y*WqRYY85gh^WizD9S^%tuTw<^o=02 z?e-$Z+BZvjW4)EOxKsEAd#F!uT5NKsO_`-~OlZ-UZ!$FTrE!Iu*C5oIv8LPAOf}cn z0;Bgxx9B#q8fZ3^ZeEbR*37WmqU7Y1w^0$G5E6I)^1R!OR90Wuv~$Y{De1zAP$3V2 zR%8v=*UK%eF~vu@Z9G1{-6X!-rPw$Gf9AJ}!a)-IlGr15q2-e25$(Cs1|!(cy72+k zQz{C)c)5E6`1hxlK9Q>q>t?B!O+f&&BZp-9>$@v?1Z1bHa+6&P*QstiF6MmB;%+xyiDuiJrT%e52ek1U_KeIf zhGb3zi=AMbH2J_WQA|g>x;RhrIBL9cBk(2f;+HFApFBkz1I5p+a3ioZ{UVG};fA>Z zm+lTYZs_ny_pR9MEZluMd0YR|lkW}TeosxwQSb9grSx8%6b__qY{&NIy*|4zbxNTN z!^0N<{*#mWXS4F(Y>t1z|C3qtD|`Z%Tz|2Sem?iFZI54pFkG?x$8-N>g8T&kwK(|| zJWKuu_&-RMpG-erp$avFD1X?>#2ahDlC5{_&s(0N;3WmzhosRS=n>enb~LWnaQEbp*g#WJ{dU+00002fcjNt ztg;_^PLl%wmTW2P3J9+`MaJgauMem)@#HPfOTtQ~$xm}DppXOOHj!fX_~{IN=E~lR znT)+qseoBp*?y16@Zt9TtqHTz*Q*St4u@nRnzg!?(lV={emUJR%ZIF`DRmiGwydb+ z;%L(@8W|aUjFeg;Vt=vSmtD4TNROW`RHVa`3=@;KSUJO{h~QUZW~pWTj6)ePjao7{o?3$OghVLCExPuL;*wGFT9U@nPDs-dt*H1B7SwJ<%53+?GOcpg zJ}XEbidL~wL&!yx6T4UDEcHN+FFP}Sa=~)rU5%=a^}sOew%|*!wsqHhs;ogo=y0iP zl{U6akkv#Tfo1MC@ke9qQ=ed+?PG86w7d=>sbA3^HBr&@g@wJVWFe4$;aa$Ztd;vK zhmMRpuy-y9H{JwC^S-dzk72fFl&#U!5+=Ea5eFGvwj11!vG)(JN{RW44LH%he+?UG zzDnytyDuXeXvZoa;qR<-qkpVzE}yf7WoF2R23IVNSoFUJY%6?x1~`6zehS?((}p%W z85e%_u_Az%opz87g=7N}R?uLH8}5jOtIoH89()eN+~pMNUsGcNH^fxQf9eo(PZP9@W4NzXEqC zqnR7xB}Oi={_;Y3gQHnh@We|XF53_on+{_@oA`)A;1vy4`nYQPO@|CowyRVTW0GoF z_w?sZ7()uh#e3Yr((JR8K~hnMeBjE^E%q6w==vEvXxwUDu_rt z&<#lgbG49N6z}tkUJ*uMf)8(sKQp|4;<6&*ZC}9_w2Gf`=bKc*r4Opu#>q|v0fp+O z9@}w)TvVYbTh+-f#nztcRYjoS%bMl0ZPNM9IjbF-Z11C)&$hm6)f9Tx2?fi-8%8Ks zUz9$n1SOq`G0bZjz?Z)iM29;4w10&xOEN%(STdS#HiCG zT7}WD1PSfVT!*WtnfL>sAN zHA}+?kSmceNS=@wvoM^4ll5-ZGzyvwo~`OpY{t~8S2FhCp~&%tYMHmnITw-Uu97GZgAx7t zCgYndZS1SIr$_HITftCiy)csLl_rB4>8Y|)@2`$62Bgt7;M=*IQOF=kpA5eFy9$aB=ko#%@u~;5hDQr+^JAmObUo} zeWP|M#;6MBfH>wNip%PH4S#H*FZHfvm za&DxT+)Xd2DNm2+>$61(6DphG?=AzwYJD;jPKc+~O?GamWuNzck9bXZ0bO|OqETwY zem2)7-S%p7BQVKW;|lN0$a-ity@v1CO!~Te1jCA%R@Bla5VFZ+4bWoFg)pcP7TRg6 ztATgnff4-Qu7|p~h4xPZES{5;L&ydk$li8P-tVTYJ+A_o3CWE+^}lMm#SA8+JE|!U zL0rR|Sko$$7^^&D%9U7A?HSNMRlc7jbzxl036ZrRmuUu*)#u{R==5r`Tkst)jr{va z^$eYz+){VHZy8AJO`ZvGVYbv$a`SRf`Li^IW?Ej+JGmuD>N38?b^_^qy|$AitiMuHuslzgGUC%h2O%i^p~J8Ps-#HrC8w zLm3lw?fUq8Q(fs$Wp@z7hkoe2vjU4#w_&3L*-KW8gJA^hLzc-MTX4B4k~>EJT8O{1c#?J(d^k zLHRl99BO^7FS6fc`($STXvZBSPLsi>RgVEVCm#5;t+7tlLs;1qm0n zovs;&uK3pmRG8n~v=^R=Lxv8-g*%3fbm}45>?@w+S_Q(h|JKUUKzb~Z{fp|ca3Ukm zQ7s%qMlN?qu}9)5X80GH`)TLQp33qyS#XDhPM&s`;?kQ|zKx%03g^=nDd^4fYDTSk z?q-n6k13a5jrFsSXS!M^Q479e6U3_Ou%K#6!DKbeVprT=G`~8SZ+QO&aI8<5js=W2 zWY(6bC>D|!ivo+txC^hps)h>1>_0P1hPgx|mhx;o5i#3$f|D+B(P@>Y4htl!zL<9T zprZGfV_u1esE`-O3b8U<403QR38l5Fi{(03*Lzs6{yfVdtA%w~S9%aO$ZBP;2fD=H z32?0zkAJP?L$8C$S5#S>qvM*i9EcTXDt~Z=S+6$BeGI>mH^pDsZMagF5!q_niqO^o zmZz$_lUh{z>)+v4gZeQLoK)$cX(?9Ut`=I*)my0eMy*ZRkyF@fYQ;Vn&$Wtw>~a?i z+&z477g{@T4*>IPKoS*F3`d%t41UNqez9_5eQ&*Kj{dKuv$3|Zq#R~uatpL7VRqV0 z^wZT}W)qJa`_KJ=$BbMoNB=I7jutWifDynA@VgCnl)QEOwl@?mhf-q|w1Tzsu|(mi z2n=%}+1U7yh^LXmxFjC}iG-4Z%vSWYUg$yy64)H31Oef8pvB?{PZ;ThD+8W&E&rQ$HBeuWa7Zzd7%@u9`T z9IZp#5H!bhk_eoBbY+{5^NsDj8C+jw4nauxUwx{PG)j!yj0L%gpYD`rl6U}N7EH@= z`;5n{Jzqj}@JbNH!4t8D856HUUj_1vI8Ei9+WTE1D3C?*o(X?wn zV(hnG92QaiN+~m%N!6*hR!xbzekbOxz5lc^$q;Uz18x1PZS4~KL^7Z_?eAZZEEjeS>m*_AQvXy-)UwZ4q7T0>TQ8!n3iF z$P+0LK;T^Gr5GdeAOgL{P7KbZzO3ZRb&ZP5!EF-rAeOjvIgPBz>=*cN=cprv#n>HP zyodaRlI&~`mCss5_db$b+*i&d4UVi{zh}m)SCLzwTM%3(7AUevof?e0+Yq!&V`y4A zUG#WSLz5*|O#dpGQK3BL7n?Em9D&>}%@5{#UI^M!nj0pL7vkl;`xF8WM9y$II&5}2 zK8HVzy>D_wQq%-?a|q4|VuaS5HB>la$ylLp0U-_a-bl7}6l^K4v)TLj6^@|Yrh zE;M3@>V3nk4l~kPG`f726^%%jd70xVG#V7FkwR zI2KKA8te8hFNdO?pwS|uieCa`uC0?Qh+SV~kfq)G6oR;w5aG|0RMWzRB3By=^_P`S z0e%8F7=TUU&YOo=#}3v{jB0;fdAr|pI3u=w;&*!J9N!HeX{Py~no;;S%@7j)Uo-z_ z&4@iX5p*-eC@OXJk#lyc_)?j2?qainG%j&-rwjr3ofOUHsfB+rvU3L~bVGXfLug`*ef zcwhR@+a1(27pKh;rtI@rkP#37D1`w44FCE0_&7@e_~E!--T`h7#G|0|0l(SpWb4 delta 2168 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 TaOVTLA13b-RbdkV#U%p(9f-F# delta 460 zcmaE={Y0BDz?+#xgn@y9gTckdEN~;=P9_cz!)Jk!!RGT!mW%?H2FA%I<|anQ$!5tW zsix+WC0OKGKuR`Su}tRR1hEXZzessE`5KQ`ecSq^v-2#n-JN(j_bRu=Ig8E? z`Au`3&L3-1E@agSStt^*;boEBzh{^A>-X%<|Gqv=DV?XVB#c4ZOCe+GYq#6nGbY#F zI8e9U_K`~Py^g~#lu!ESh!`w+BCpw-<)EDW(B_uSMLmg`MUqvomR3!(4T_t_%j?Z{ z$LQqCM<46$U6y}c@!{mkn+tsF8!~;Sb1F}m%wwy@_~mHpyIZI zq|hKxwU0GB(Z{wwx!#vMOwe|Usc=G!XQ&{v^VUA?Mf-AIF-{Hj^_e+!kICtonNS;;PJgJB`~f zW(5>D@3xGTWNY#^Xqzk)eLJ1&a`Yi_K~`OZr^_BUum1nB)=#D_`pl6BkDVJX^qX^>po%+4Wur4jGxZZk5RYt~1R)=;e~z6CdiR{79aea!%1& z^~Z9DWeFLomeaTWIx(SVbNn5Z)H(mx2&QW{Kgf%i&LrxxxW}+jWc8D2Pamw9Fv+^t ztyz=lF<(ti_TSz$kA0++wfnguBu{YZZAnbm^f~4%d?WSG!8exKlYZWA`m^wqjS9=R zdjEuGXQRSsKI7j~Q~b=_wt3(4{JGTez~lJB?4M^R7jFG%a@dIR`pVYJ{oNT)tTr$+ zyh#c;sru&N-rt{pzuPOjYR&JahSmA~9Y>d6-LUiaJE^FEY3FTcJ}8;7?4`xr2Pbnr zS!zRH{5oKd#I@^66YQS97GnA-{;rXm;|b5}Y{3&Vy+62e zF5y3an)^xp2Yt2ry+Vy&9#&R1&PlA*Ws;2VboljQ&mMn2I$ozx{nC zHvdMk=UeZSZrZHB1Ejb(mt0nsh}Mi(`fsajS94**-Dk;nKgol#F&8i!12Zx(8|P(v zc5D`Av1Al5GDu5FGc>kLHApivF-|s|9K$Nd0#dTMj`bG@Cx|7mw>Rqj?51pc&i0i1+mXu_dOKr{A51&hC+_^eUh&mBX;s_IooAN(kxzK{Csm34O~*F% zcxLl{agi9?k!E^qnxI&|`uYdht{LUiW5XVAy|w+wU=bQ$l$ukluLmLnycwBv z8AKRh7D`0=_iW{0V2CPUVBm-80n>?-W5wj;;jsb~3t(bkkU>!sKY5mzHdqbJ;iW7L z3_>VsmP~#krU+IeW}#rp0(9ULpgF=QYOE)#h%14;JK0NIim_*Ms<;Z<8c~oM0NIGC ATL1t6 delta 1538 zcmZWpc{J1u6#k8w=?$q7vt)^(u`g4WL588CglCkzL6#XyMun*?y&i*-MnwG*;ZRxA zOvXO;WXaJX%af)lGM1MpdXZ4(C3W6;=lyf<{q8;Y+a0s#9OmdFx@j1y&|34JWw!azpnUA<8{rzr?5qWW%zIbl~FU2YT_*h=9~ zJziefN~oCS4A0lYl}wSM0JG!0(#T25+z5GCiJLi)j;hp}9z*Q53Gilj=y_y`0%cWC zUG9?1i0`?(Ww3vBIhEY#>3qgM!$fWqdnD#yE-gbs7FkKCP1;?T&!@1fknZbfzNL50A%CgzpQ z*K$%psx`{2V#@PWf#E%S^_pFxnXjXr?`>u&#=i`y4-CcUxFmT=EJ(9FWCPUFjP~N* zI8G@JN9G5HsHAoi>s3)N`+h$p)n*+g*%@}2equHI(L&O^`+l3vj&;*fGjCOzpR(J+ zuH51;FQ9M>4i?#>F7p{InN{3U^O7+vnHdF2?dD_s3lDozVE8;C(*PzLZ_}eFZS7>>`Fen#blNX`rf~Yw z+Q?wasi{{b{`lG@rx&{;JoF2UE!sK;_^L5zY=~WbgI-<7`A^3VpVu$%*J)MO-KQFN zwhHQ}JLxb%Hfk5nN!JKt_GOEq>#Uag#%ka@tLK6QvXwBHIYh?Pm}u%x3@|sP85=_?4mX6@=V+G?LEue*dkJA^`wOfD(8Wvje=fbtlWZjNX&`oSma#8{R-` zt9c7oI-j$@J;L9@`e|qUP9|K>^$v>4n?4;Anrrv*!>4A8#usdo-{t&BiSBraO>v{L z7s1zl>On$VOk}%#(aUX#%&YiRzLxJnMsu-oDTJGxkk>z%^r5x;MqA&Yd#R>iCwIHB zj~DpR1kC9*T4N=?Ns&ieMO9PJP9t}vOp|D^)7S4j#>X~)zD*FQ4aSm!A&+~vU*d#N zYI8E`p?gD%CNM%;7xpV-(TmDXFA2DCl&jc0nf1{#$<|RjR2($qhl2_#ucs>0gH(AOH|v*?>%fY@Et|o70adOI8`WzVbN zgJLvh4+I7PKBogto*@{lTZ#ijLLWc@KL>1gcTTQG0Dwmr03g4A?57C>oiWNP|9{EP z`nnGRlQFvAw*nh53eXB90Jb9Kz!{A6MsgLS0I>%#ShWpE!YV+rz~8X=P4(#Y_J06r CXQR#l diff --git a/Xceed.Words.NET.Examples/Samples/Table/Output/CreateTableFromTemplate.docx b/Xceed.Words.NET.Examples/Samples/Table/Output/CreateTableFromTemplate.docx index 75bf9dea59efe730c91b05ed5005aa6278d8a9b1..76cb0c75a1fedfcd2e99e3d6091e647bd794e60f 100644 GIT binary patch delta 1656 zcmV-;28a2#Y`ko+APETwOR`c!H7|0MlPL)we^28$6nrcP??N`s~wVK#d2&W1oe6 z(`neIK|;(tKb-Z=g_s_9O(Pa4^blns>6TC5()z#!nn7LaNnE@ ze-ZU8E5>sYptuqEn6sEoMFX?IV$-RQiM3?hvs~M;)u)IvOyU^q4N>@jVl#!qkGr9H z94$dv0=6tXM_iD{HHPzQkhXPdbvJ?BHvqv7U8f2aY_h~662jt?@c;=J@|hJNe!qy0 z0Xag#pZL@lD*&}S84QEy@UWLc9OuqRf0bV1O!_a=;JesOR4&uVDvK5;6ntP|JolqK zJi%MhU~!&-JUq9Fhk%-SYB{a<<FXyWpEOL?lG6v5O03o0%s8 z^24>^H&Ig{*J-~Fz}*1o#N>4l?G(a_SHZe8meK5eQNHGE5v|eu_o3Z{_c>Phf4U8( z*;35l_g7BY?|6g-018xTH2MZl0%VnS;+3~0_1=B?CcHHwU74_dr; z+c$0d#I>8}(ALwb5tozg%l5_aJfFNIQ?#IBb7fSRO7Rm5Bc2b{#6K7`9uV!D7;2wz z)3C|{yriL~;vbn#(=N-W%ft97e}OZrj3~!NpQOR9JFe3yr62~MeM*fx8A4;qSzz3e zAc7W4q_`;UAX8Plc_N%IMy?X3+{5QUyN+X@cPcqjnJic;uZ#*)d(V-{W(fRkQOS_o zofm?(RbY{=%G#sky}4E;%|em&~+kCV!|JYIrzFVp3d1ae-E#zxPxV3 zFq8e5uMGOawkM3;%Ol)az}XM%_#W(EmPd#JVDS4jyFmE9XtJPm6?$tG>mz5?z>me- zn%;}8Xvd}}CbTFC!wn}VbSzfTs?*)6zJ1MoZ=+d(RE8 z?bf-{nEE^xw+sLrIix5Zf2|jXj4pz(u%1mM$;E!VfH$>#^j9)+w%H$|NS^647p`xA zA70)5{r$_$_^y<6R+W@QT@p~noWTrulMvAC*qsflRf&^*OQg=0e3R~$nozUjwz?-- z=G>`5I&a$D6T4DK0#`F!;7VuSacYH+Fj|{ufZEDu*WxcHluRG0K4QD^B>wdqVkc5pW^ra3b$kTQ3AGCY@olecH>ldn;372W^?&nma+x>n*ay6U9x(wM@GAGst@;v6p}Hb`fy)2>FUdS{atd+tm}4PGvP-@v*G@PcCQBc z9fKE0N`94Oe_y%oxw|8Csc`Y(^2}|Am|!t_=GX9BJs5-1Q>JF)A4$?Uoo-WIDV)P+ z=QMdbG44Zn`X)u87h`pQ(JHHdMbaC=BB|AEDU<$e4mwWDQEp9`5G+_PQ!*9n(VQTU zfX^qkGCpNY6o#{fP{Zmq8qBD?%937ZQo^Nmk70R-96(z0Lo)IOo~yDjOS~pzstGwv zFI>ux*~R$5zq8a1Fa`t&OR`e42o;V81PDvAQnQ*Ip$`NIOR`e4KP(;x2?$HFQbRQ_ za+H&1GgJcE4wLW>7b{Rp0Rk-m6aWSQ2mlC6vQog7eCQqo004*#000pH0000000000 z00000|C9bRJ^@UVJv2)JQj>`^Cm#q)vQq3OjbG6V007m0000jF000000000000000 zk(19fJOPiB3^hIhA(KlrA_NFavQm?AH5vgnlZ-V#0W*`#H9-M$lMXf`29h!W0002f C!4|dv delta 1691 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 Gi~a)01!6Y< delta 1991 zcma)-c|6qX7stN_V{0<@u`k)OYsNA|jJ0fGlzqvJLAET(nwb!FD_sT`WhZM2QCv%w zEJL}Cv9A|*N(@<}^713MKYp*@Kfl-WdY$LI&-2G~p68s`=hPXO84K80Ff#E10Kf_u z>uTEWfB8o0WC8&8Q~?bF%*}35^GhrIfK#kJAw!i_tPcWViLhJCVTc}cFv-O6IZ-Z> z1=`yb`)_j36AfjfY9mSyW;0q=hOO_XU4U0YNDE3qqD9(8@qG{O^*iY{>>KE(Ja{YB z<;ot-uUc_W9};&+zmeyiW@(`iz$BGu=JUeEv5F$CUQ!^VnT#RWGCXdg$}|!`n_;lG z^slfOXR^C!dOw-KQ%pa}*K}XBsWNfCr!6n|fzmgP%DhZNo_QHPBJxc+nsLAcUpJQJ zOYQ)lwd_c*D9u>U06#WS_S#M3sZSfb5w^o0nB5cBccDL_sEL|QNwdLS-H{5=s6Io}QE7H*(rhEKP#8#RQ}oOB5^Dt!XYwF+yYS+;Nfa|mk< zdZV96QEDbB2!*sH{wXbFCR=Tmukkh|YNv9q_s6IT@>%#PnLkkZoBrOb9mo)az$+mj zNZAU%ee9qY9D`lCVjnQ&;S6YULKOGipU)y%b#b9o-tnvsD} z)6RNst2jc<7WJkN$24oX{E9L2tt-U#+V3AJIn~qv+X>tCvC6cbR=UoyijLGjm z*MA{zRp_7fAu?D_nZ|`M`;cV&WgL^Bt^KUIMq-`NMWHF+C6yBBWr9$aMv{Bno4YBI#5{B`P4m&KTafGZ4-Iuh zJ6H}q1o^ZWn6dU-fMYMybILgaLJ%XXqJ$#eGdC;$p3VoQSN13o^^~jzO$X=nPv5q= zyl+?)D^qp;!gAMcV%T7Iv)2=yWKogj^h{iY)O8eVsy$0?!3HcmMt*8npV+;Ou(z{d zXQ5r~fh>&+H#d?3CYRNU4I2fTRAz)5FgdQMFwn=~Qwvs%Wh2Z_ zG*r+lt|=tMvzcW$TG!gEtwffO20sM3;=_gK^s;K-&+u*dj&Ck>zF(Q^Rf%pLVKe%p zSPLo$1=5r7Yn>Nzhv>6-t(wfB13{Bdq2mVhI9IDZ&z}5gJtiOLXFOjy{qpz$@g1F8 z9|yrQFAd&1E!P|bjm6Y-v6PthQe2%QqDEi;8Ry_=5JG!O$5A7ERZ88AR zd!JG893GOT39c*Cmg5lrHO!JNg-fyrehhbPX}LN=Q;Kuhw6*c3;+OT1OO30 zgfuH5N)qG}Bj{XWREH)#$2QIFtWM6dkYyo|z;up1_3zM$NHr~Ckz(C zP9SD;_MVS6zex^<36b4>e1>Ka6#1w+$c&-ARF+67KZZBWu5;}vLe%u3ifpw14*WF~ z-q?U4HX>DxQ@-V4#fzeIc{!S-#AW23+Ug`Qt!)6VmSHT zLmtO}Jr_O^#-A}#3`|5$Q_~ZvjfX3HVX-)6ggR1NSsSi_P}aa}A-xf5YH$s#mP&At z4++gIQa=e(VS)VD$RhDcoMZhNIjS$oT7n-1VFmz?P<%j`s>-pov0wlx1H8bmjL<`x zXQ4-J5gr2ooIktcmx(3iONfd8Z~cFrAMYciX$i%X+&LtL7_3RMl9DHAafCFIx1`hw zJ~%={QkkU02@XgKSz%!S5OF=!OEnPhb@6}4e?|84=u!C AGXMYp diff --git a/Xceed.Words.NET.Examples/Samples/Table/Output/MergeCells.docx b/Xceed.Words.NET.Examples/Samples/Table/Output/MergeCells.docx index 0686b70e5757f37ac93a850b59f9d9422f551c73..7cd041101dc548ed9ba3ae4d144e21961e3d5917 100644 GIT binary patch delta 1314 zcmdm>yI)r#z?+#xgn@y9gMq_)Q_w^6rPfcG7#R5YCrTLCzYUM}zil8=H-F22fv07QS+_b(Y83kx;a(mVZz-Sqc0c6MQX{(kSX z#MZ6|nflC+2hiy9$h~9yIlQspx%j1%VOLa z4qnY*y%qF2ZHh|Qlr6{VS7}R~a*X7NOy>38>5-+AKi#*zW7ol5v%=S0n!Tj`Lg1T3 zmX@hCPZX_6U6%wbx^OI2rE8JW75;o^sge$1 z`)?gtm3A=i?i*p<=@q=s1C7NqbW`qmIIaj%uq{6&X6Rb2a=~GX-0y%2iF#v$m4!#6 zCI0>RbNfbY$J@zi3%5z%e8wa{p(~c@2}6BQ(#m9w=Ne5-^SW!2pO;>0Xx7Jhg=uQooGt6#J$}X$&6Dj@`TX@6=M}#d&IaVn zy}Ea@|JCHPAvZgZUzzN!C2rEBE%kIteW0(hlVtEQ7i(wt<5K5m%J2C+=j@lZivmx$ z=NbR<4BM&B_DlMLV<*p>Hpfkw59WLf>Rx*?T``ZD>DBy&6B_RtuwC&HH}GREUhtA3 z^{&q8UpE;oIXw4mTWr?$+(-NDIG;RQsiC;`r)=KAJ=gO@-vwt@G5Jh4 z?Y~g(&!up)$ZEn&?_+BY+627Zy@}`1bH(}lIDS4)xK=$Y^3uHD`>THae|vGC(dIY& zcc0$#zVr0oKl5Y%FZuj2{yd*I@RHf&hs(d0ZNI1W|g z2a40%ZLCbNJd~p=a*S*KgWv z*mFd!P3%LC=kMCv0;jS9U%f5T+amV0>}wt2*jBhrvuJPKC9~gYQgWLnzX#<4E?_PI z<^y0Z(0ZQ1p~c9s*@D@OQNSX_+#og0$kHUy(846yG4D=68H;jF7;o5b%YvP72B~^Pv_llfQ}>a==1*vYx1zl>svYLwr$cPO-io zhz#&%WYT32VSw2p5$WHvm4ksHs(^uk9~@6GV*cbhQ8{^dEC7WAfaRAAOd3qjoxEFA s8|ME4CQ28I*76D5r6pN8Mfzic2-@BXO1#U;q8THRXBw%hR{> zc3%rw74^Y$j@&|vMRPh9Jv;5W=hD*z8F#PbxCAwexksW`J=*;8w)yhedjwLh2CP$V zc%T*EyzSDivy)vWc9})g%XUsH3Yg|(7I8RCZ!+8I*`d}7i!wK^6E|J`)l5>UM5tPV zF;Vrr?U4m5J4L*v+}iPEkxsVLU+sz$&X267bNkU~fSx~T3T_t0NUrd=}Ii-s)oDXvmD7jqh{C`x8PFOCtmfCJUG|GWMPeJmFy9!)SV1bx(Se<%Ps) zZ8~;3{@-f0GAqA(x$tD^eRTnyyh8Q|y1&2LEJ>^4stM!mzreiGr_APGQ?K>2Jx6U? z z0`p6!Biq^@-#DM1=M;VJ{hh!|U-tfNy75GGjsLNmH!j?+-~6Y?mq$0@fuFl_bzY>t z_TJliE!P&^d@HG2eXHxyA)dPT7jEQuE0*N%j>+8ZYJXIjp8hM+?_WL?KE-3M z7IpSz=vq!01?!gwZ%jPD?1b-1PxEE7Qh%__{>K1H_*}q*&j3#NCDSawX)!V|fG{_M z3`2ZTYR={$W=%!`b5lcuG-CtPBqJj;6LUkO$=xh+ETFuyc`eH?4o(m&X2vdyx05&U z`q%%syrp#YuDcr&qrWm8lT;V%%)QBXVe`fZ9x;sGAsVb=IlJcEpS}EI&7QsQ`PM&n zm}j``o;B;9B!>%<_rI(QHAt;if4JekY~h8SB}>-vcTN$UE>dFIuDkSPiN&jspAG9m z*7Pqvr`n^-d&}mf*vf<)*T-`hulp2PvH#(}7=2rMPyP2asf$nT512gt+`xIl^SIb% zreBYei%*8NvOQTCSm4qvBVKmW=j`jP0uC?EPPt=Zm!u>9H}h-kjLx-7(y}*-TvNDK zRUEvr#d7-F{p(9lp5L-$YFj=}w8zQUZS|QKSMR@3&jcwin4slF{M5hKy@5ei%EG`P z#2~ZzKVJ(YByidVe4(rxf^y7!sD;a97E!|pkPvFHgJT0qC^IvFBcWJd4;U520p5&E zx(p%=FpDK3{d=}@Ffc?FFfi~V>tmQSxmQ$99v&?~xd32+CWE48!sJt;+F&)P9za%f xd9sL@B3O->g@P#y(34Mq<_IGzVaS>sBBliP@8l{mDaPHCr;4et-3Aq>3;=h-KRW;b diff --git a/Xceed.Words.NET.Examples/Samples/Table/Output/TextDirectionTable.docx b/Xceed.Words.NET.Examples/Samples/Table/Output/TextDirectionTable.docx index 22187184b86ccc3ae9386a96cf6d9e22f41a0a5d..ce308c46dbdc62360e06c3b206d0d2a0e9cfdba8 100644 GIT binary patch delta 1385 zcmaE0aLYgs{_Hk;!ML^%(E%*AtLxm2+cQ zyXKhOqHrUnR-v6{YRMCy_XOCRh zf|+Xmx7^pkH;g*B2lP*}UbJ>Xq%P}1uf{LeG^3A5%$?xCd@*XyqeF)2^^ZL}Bd;C` zS^xTe(f7vN>Svuw8%uT`NMG{k0%K8|t>%U+id%{W9GvxCw{0)py=wWhV*RrVvV0Ec z+~_M@r)d(?Bk(6!Y4LAQhdl>tgoIwOYOS@%^1XZftmQU|GUK&X_F{5Qw&s^uTCYXe zTL1Lfd+p4WxfMRPwF|6e?-+S@WVq53d?|K2ydIhB4E8P4H%(r?{LE3MP}%jyodIdfOsI?~+umZN$}$?2sRqNd!Pb@`7& zbikaM+TVnhnmu%S;nw^#YwcU1y$@PNX05)Y()H`CdsW4nS=k3RZ0x#c?5og_Qo@k@ zIVbqZJ?6mQ3I>;-ZM6Q&3d&Dh!2ATvQNa8(q437V&6Aid83j_44b2iwER51D%#2J@ zOid@>W|3n7DcSs&#hZ&0#M)z6ru1QQAisb84bRCIZoa!;w&h;sw)pl$S;%_RT&MHL znv@G!bwU=3L~M9jRF^-`?eoWP`|j@dQ?^|Ex!Kfo2`6)tTcqubb#1C!_(k88-&XE3 zI>L9Kf3tewksngO1fIEj?R`}^$!??Ztcc9Dvr{@2zJ8%|b@Q7EX+2Y~td%S{t+M=d z&ws^R+hprS?f&&$&%&d8KKL%1c_u`} z$My44*ZhA;-#H;A4->THiJ$uSx;G;OLn#Xb!{)gH?TnDX(Gc>5vMPn;nE6o4sL4yk z3^`!IJo%oOm{ldP?20c+%_-K`1CasVj7+)=A`CD~Ui<%8#0HF=xM~IlesCngh!>Of z#O37Su>cefU}9j9fk}gD^U2xb+F)l*o+U2DSUY*ExFUpm3&<6j{8d~D!j+bgVoaTE MCZWRCDhARC0J>XYod5s; delta 1439 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 diff --git a/Xceed.Words.NET.Examples/Samples/TableOfContent/Output/InsertTableOfContentWithReference.docx b/Xceed.Words.NET.Examples/Samples/TableOfContent/Output/InsertTableOfContentWithReference.docx index 3c0b5d3f2bb09abaebd5779a39ee1f6e40bc42c5..bb2bc7098ececf264efb43f72974e607f968e7b6 100644 GIT binary patch delta 1142 zcmca+^vH-Wz?+#xgn@y9gMq_)Q_x1fI#v!4qd7P*bMq8dOGbfYqcjV%#KaU!GYd-- zOY`K(ciH4vKuR|MXLI1>1hK*_rRKk%>>=PZiHO-fr6FbGq!|q0(FY z6`hyEws=lma$sLC^ZXX?koA&m{)03Z$-~L_p--_?e%$gT-rv{{08f-fC z^4>O~XBqFLZoJ>dE@iMxeBtZm2QGE+3hk0u&imZ4)FkP|9T&6Gp3ln1ru>@bzhd47 z)wpMsNB>S@tiSG4X5;@wev$FA@GlRp*i7oJZ>a2e-pI5;`PZ~XEdL(u*%z|eh56eG zRhcU*wE{VG4O%y4G<=+`d9%`HqQCUt%&&JNI<7iB-lf^1$HTRERlcT}#<4HI-{;1@ z;?~``E}Utl))iaM#4FRq_V4Pxs}2b}CTQ5jPyM^OOK<`sByi+}eHnQ{fupbOvh)EH z14G^93Xza{r8B%LsmK5R>PxveY1Sd$s!h+&&UQa{=;GPC#_9L^GMtx2{JQA+qT1z& zP;j8$-&=o8G3aF3C)RmV`_ROh1+%g< zQxes8KIzoqnl<^|@%Kt!F0Ee^>M2m-C>|upxX&r8PiMw1p1yj;?3vf+a7Z6XwBR>M zJaMSi*L7-P)}Q*T2O=#e-rcEEHplXw9asFscX3%YT@`1)&SF@a>ethFs_2=XN9$z6 zH>OtZ*OkwjTxxIRFgf>mLFxV_Pwv?Tx;zhHdr{3%%RfhaGSk&F{~RK-mNMPrJGipD z;>1bqC4qUJexj!yuHz4i5YwHhocz=E7W>JmZ6R%m42rjJ8?Dmz}82VmExzIrHAV;D;HKjbfAc3tX})o^vwgiMfp7wnjHgd!A<< z4J!k)gLo9bwUpePFV*+s*Bs$z&py9glD47a--6V&ZcFyMy_$SriNF0UzvEURH{4In zy?rI}S9@E-N;!k9#{KU~;{OF6on6_c5-DkQXK_vRp;{I{?Ij)A^RJpp`mAW3?mX+A zjZ&Z$pWx*AEBV9R3}b(J_+PqOuxh5?Y;pH_6N0wzo<5cF(l{#2EbEa@gv86-?3C0y zKObEam#C< z_v0_?o(jIZ*7dQBv$Acev%%I6g@Gc)U-o=?Two^CtjF<7E!&#wrG)PC&d_AX9-XFz zQXZ_zYcEUJR$edr{!~QHx9UOU{Sw~WZtydf*0s!})`-uPm delta 1131 zcmaE4bj^q_z?+#xgn@y9gTckdEN~-V9V-WjVR+lCVe=GLOGbfI!!*;B)FdMl^E68n z(^S*RciH4vKuR|MXLI1>1hKTk&&9o)>>=P<@9lTkK)_*r(%E@8copSCwo9Aktd2V% z*+04CNM8>7i<=PzD(f0rwWcs}o5h}cfA(^Q-MxF;e_zi`IsfGFgEcL_Y7G-zm$TpY zj99dDW#azZav33pr7d+cn7x(FJYFQvd2h*oQ`)8ou#{{`k6GGA&woT?=KpW(BBzcOor`%~*Kp !f6X~7#Cv1$w1NY- zm+1sbii8F#C>hk5s_ypD{aJExe%SrisWS|{%zfjYuR6iKCwsl7n8vX!f4^@%_jBqr zfvaxYeO*&yMRzUL*RA^~zS|!XbWG5oi=X=U`sN($P4>2@`3_qZ(5_sRVD_8 z=*g8LA@yo!cvVu5|NYe`78Mk{!_oiJp32WhA}x09tbTUpws7tW5pVll9JT!&F-cmd zmd4*qDtcOdOsP?Da+A(qWy61W-`+MiZ$BcC-I!)GK|pQdf$K_!Kc^L>sLgp6B^7zY zQ?F8~yXo1I>L0N!alfLoLxoskFSLfZG_0R6OPPC_Ub9(!itgtw;lySOp688fJdqX~ zZU&{!k@_ERT97yQ#J?D!>T@#h1zOj8d{;2FbKUc-qO{?Xk@_)*RLf%aC5KK*e3P1c z?W>1z@0UUarryss8F%$Hcb0pIT(q3R_)E^|KJ)XVOB_Tu+XqaGTG_DO{lisPnjDCNLn42* zw>7MkGtg?>|E@ItU*OT#m2E1Kl2-Q?*MuLcWbxbXA$Z+xwYJfW0B-a4D|ahh7L~{- zso4k1ujxtJ^=0C`C95BX7|*?C-e;q@G(&jW)QgwWx7@k4qHl9T;*#>-iBk)ocT30L z`6b2twDe)a-My3Fi;34u-Ihy~G|(#B5O*iLSA3FTrNWQo_w|gtT8Xbtt-JlVaM$%s zt-H4-?WuK|m-te^NB2*R$Wa+v{l6A-c#kjOZrXS9RG*WT+u@bTS0e^+?SYV!eId>n+FoD5u4@{)*<;GY5Dx@-pc%AhP-7 zx#HIFY(DvcxFI;rP8OB0M9Rna|5diP)=r8~P diff --git a/Xceed.Words.NET.Examples/Samples/TableOfContent/TableOfContentSample.cs b/Xceed.Words.NET.Examples/Samples/TableOfContent/TableOfContentSample.cs index 20dd4905..714cf606 100644 --- a/Xceed.Words.NET.Examples/Samples/TableOfContent/TableOfContentSample.cs +++ b/Xceed.Words.NET.Examples/Samples/TableOfContent/TableOfContentSample.cs @@ -1,6 +1,6 @@ /*************************************************************************************** Xceed Words for .NET – Xceed.Words.NET.Examples – Table of content Sample Application -Copyright (c) 2009-2020 - Xceed Software Inc. +Copyright (c) 2009-2021 - Xceed Software Inc. This application demonstrates how to insert a table of content when using the API from the Xceed Words for .NET. diff --git a/Xceed.Words.NET.Examples/Xceed.Words.NET.Examples.csproj b/Xceed.Words.NET.Examples/Xceed.Words.NET.Examples.csproj index 51b11467..aa753a11 100644 --- a/Xceed.Words.NET.Examples/Xceed.Words.NET.Examples.csproj +++ b/Xceed.Words.NET.Examples/Xceed.Words.NET.Examples.csproj @@ -55,6 +55,7 @@ + @@ -80,8 +81,10 @@ + + @@ -89,6 +92,8 @@ + + diff --git a/Xceed.Words.NET/DocX.cs b/Xceed.Words.NET/DocX.cs index 273f46d4..b695e064 100644 --- a/Xceed.Words.NET/DocX.cs +++ b/Xceed.Words.NET/DocX.cs @@ -18,6 +18,9 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at using System.Collections.Generic; using System.IO; using System.IO.Packaging; +using System.Linq; +using System.Security.Cryptography; +using System.Text; using System.Xml.Linq; using Xceed.Document.NET; @@ -38,9 +41,9 @@ internal DocX( Xceed.Document.NET.Document document, XElement xml ) if( !DocX.IsCommercialLicenseRead ) { Console.WriteLine( "===================================================================\n" - + "Thank you for using Xceed's DocX library. \n" + + "Thank you for using Xceed's DocX library.\n" + "Please note that this software is used for non-commercial use only.\n" - + "To obtain a commercial license, please visit www.xceed.com. \n" + + "To obtain a commercial license, please visit www.xceed.com.\n" + "===================================================================" ); DocX.IsCommercialLicenseRead = true; @@ -253,30 +256,30 @@ public static DocX Load( string filename ) #region Overrides - public override void SaveAs( Stream stream ) + public override void SaveAs( Stream stream, string password = "" ) { 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 ); + initialDoc.SaveAs( stream, password ); return; } - base.SaveAs( stream ); + base.SaveAs( stream, password ); } - public override void SaveAs( string filename ) + public override void SaveAs( string filename, string password = "" ) { 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 ); + initialDoc.SaveAs( filename, password ); return; } - base.SaveAs( filename ); + base.SaveAs( filename, password ); } /// @@ -301,8 +304,10 @@ public override void SaveAs( string filename ) /// Bug found and fixed by krugs525 on August 12 2009. /// Use TFS compare to see exact code change. /// --> - public override void Save() + public override void Save( string password = "" ) { + ValidatePasswordProtection( password ); + if( this.IsPackageClosed( _package ) ) { // When package is closed (already saved), reload the package and restart Save(); @@ -317,7 +322,7 @@ public override void Save() _mainDoc.Save( tw, SaveOptions.None ); } - if( ( _settings == null ) || !this.isProtected ) + if( ( _settings == null ) ) { using( TextReader textReader = new StreamReader( _settingsPart.GetStream() ) ) { @@ -330,57 +335,57 @@ public override void Save() // Save the settings document. using( TextWriter tw = new StreamWriter( new PackagePartStream( _settingsPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _settings.Save( tw, SaveOptions.None ); - } + { + _settings.Save( tw, SaveOptions.None ); + } - if( _endnotesPart != null ) + if( _endnotesPart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _endnotesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _endnotesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _endnotes.Save( tw, SaveOptions.None ); - } + _endnotes.Save( tw, SaveOptions.None ); } + } - if( _footnotesPart != null ) + if( _footnotesPart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _footnotesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _footnotesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _footnotes.Save( tw, SaveOptions.None ); - } + _footnotes.Save( tw, SaveOptions.None ); } + } - if( _stylesPart != null ) + if( _stylesPart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _stylesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _stylesPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _styles.Save( tw, SaveOptions.None ); - } + _styles.Save( tw, SaveOptions.None ); } + } - if( _stylesWithEffectsPart != null ) + if( _stylesWithEffectsPart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _stylesWithEffectsPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _stylesWithEffectsPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _stylesWithEffects.Save( tw, SaveOptions.None ); - } + _stylesWithEffects.Save( tw, SaveOptions.None ); } + } - if( _numberingPart != null ) + if( _numberingPart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _numberingPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _numberingPart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _numbering.Save( tw, SaveOptions.None ); - } + _numbering.Save( tw, SaveOptions.None ); } + } - if( _fontTablePart != null ) + if( _fontTablePart != null ) + { + using( TextWriter tw = new StreamWriter( new PackagePartStream( _fontTablePart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) { - using( TextWriter tw = new StreamWriter( new PackagePartStream( _fontTablePart.GetStream( FileMode.Create, FileAccess.Write ) ) ) ) - { - _fontTable.Save( tw, SaveOptions.None ); - } + _fontTable.Save( tw, SaveOptions.None ); } + } // Close the document so that it can be saved in .NETStandard. _package.Close(); @@ -398,7 +403,7 @@ public override void Save() HelperFunctions.CopyStream( _memoryStream, fs ); } else - fs.Write( _memoryStream.ToArray(), 0, (int)_memoryStream.Length ); + fs.Write( _memoryStream.ToArray(), 0, ( int )_memoryStream.Length ); } } else if( _stream.CanSeek ) //Check if stream can be seeked to support System.Web.HttpResponseStream. @@ -571,6 +576,36 @@ protected internal override void SaveHeadersFooters() } } + internal void ValidatePasswordProtection( string password ) + { + if( !string.IsNullOrEmpty( password ) ) + { + if( this.IsPasswordProtected ) + { + if( _settings == null ) + throw new NullReferenceException(); + + var documentProtection = _settings.Descendants( XName.Get( "documentProtection", w.NamespaceName ) ).FirstOrDefault(); + + var salt = documentProtection.Attribute( XName.Get( "salt", w.NamespaceName ) ); + var hash = documentProtection.Attribute( XName.Get( "hash", w.NamespaceName ) ); + + if( hash != null && salt != null ) + { + var encryption = new Encryption(); + var keyValues = encryption.Decrypt( password, salt.Value ); + if( hash.Value != keyValues ) + throw new UnauthorizedAccessException( "Invalid password." ); + } + } + } + else + { + if( this.IsPasswordProtected ) + throw new UnauthorizedAccessException( "The document is password protected, please set the document password in the Save()/SaveAs() method." ); + } + } + #endregion #region Private Method diff --git a/Xceed.Words.NET/Properties/AssemblyInfo.cs b/Xceed.Words.NET/Properties/AssemblyInfo.cs index 733afff1..41eb255e 100644 --- a/Xceed.Words.NET/Properties/AssemblyInfo.cs +++ b/Xceed.Words.NET/Properties/AssemblyInfo.cs @@ -27,7 +27,7 @@ COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at [assembly: AssemblyCompany( "Xceed Software Inc." )] [assembly: AssemblyProduct( "Xceed Words for .NET" )] -[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2020" )] +[assembly: AssemblyCopyright( "Copyright (C) Xceed Software Inc. 2009-2021" )] [assembly: AssemblyCulture("")] diff --git a/Xceed.Words.NET/Xceed.Words.NET.csproj b/Xceed.Words.NET/Xceed.Words.NET.csproj index e9a4d6f9..2dd97ece 100644 --- a/Xceed.Words.NET/Xceed.Words.NET.csproj +++ b/Xceed.Words.NET/Xceed.Words.NET.csproj @@ -12,6 +12,8 @@ v4.0 512 + false + false true