From 8e2cbe7ed98502037bb4e5d79f2e2491f2e59688 Mon Sep 17 00:00:00 2001 From: Ivan Lyagin Date: Mon, 24 Jun 2024 23:13:57 +0300 Subject: [PATCH] Added an example for a pilot article. --- Examples/ApiExamples/ApiExamples/ExShape.cs | 1 - .../ApiExamples/LinqTemp/ExReportingEngine.cs | 74 ++++++++++++++++++ .../Golds/LINQ/Column Chart Report Gold.docx | Bin 0 -> 13198 bytes Examples/Data/LINQ/Column Chart Data.json | 27 +++++++ Examples/Data/LINQ/Column Chart Template.docx | Bin 0 -> 26233 bytes 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 Examples/ApiExamples/ApiExamples/LinqTemp/ExReportingEngine.cs create mode 100644 Examples/Data/Golds/LINQ/Column Chart Report Gold.docx create mode 100644 Examples/Data/LINQ/Column Chart Data.json create mode 100644 Examples/Data/LINQ/Column Chart Template.docx diff --git a/Examples/ApiExamples/ApiExamples/ExShape.cs b/Examples/ApiExamples/ApiExamples/ExShape.cs index dfa4676fc..971833cc8 100644 --- a/Examples/ApiExamples/ApiExamples/ExShape.cs +++ b/Examples/ApiExamples/ApiExamples/ExShape.cs @@ -25,7 +25,6 @@ using HorizontalAlignment = Aspose.Words.Drawing.HorizontalAlignment; using TextBox = Aspose.Words.Drawing.TextBox; using Aspose.Words.Themes; -using Aspose.Words.Forms2; namespace ApiExamples { diff --git a/Examples/ApiExamples/ApiExamples/LinqTemp/ExReportingEngine.cs b/Examples/ApiExamples/ApiExamples/LinqTemp/ExReportingEngine.cs new file mode 100644 index 000000000..3032e69be --- /dev/null +++ b/Examples/ApiExamples/ApiExamples/LinqTemp/ExReportingEngine.cs @@ -0,0 +1,74 @@ +// Copyright (c) 2001-2024 Aspose Pty Ltd. All Rights Reserved. +// +// This file is part of Aspose.Words. The source code in this file +// is only intended as a supplement to the documentation, and is provided +// "as is", without warranty of any kind, either expressed or implied. +////////////////////////////////////////////////////////////////////////// + +using Aspose.Words; +using Aspose.Words.Reporting; +using NUnit.Framework; +using System; +using System.IO; + +namespace ApiExamples.LinqTemp +{ + [TestFixture] + public class ExReportingEngine : ApiExampleBase + { + [Test] + public void BuildingColumnChart() + { + //ExStart:BuildingColumnChart + //GistId:a9bfce4e06620c7bb2f1f0af6d166f0e + // Open the template document. + Document doc = new Document(MyLinqDir + "Column Chart Template.docx"); + + // Open the data source file. + JsonDataSource dataSource = new JsonDataSource(MyLinqDir + "Column Chart Data.json"); + + // Build a report. The name of the data source should match the one used in the template. + ReportingEngine engine = new ReportingEngine(); + engine.BuildReport(doc, dataSource, "items"); + + // Save the report. + doc.Save(ArtifactsDir + "Column Chart Report.docx"); + //ExEnd:BuildingColumnChart + + // Test the report. + CompareDocs("Column Chart Report.docx", "Column Chart Report Gold.docx"); + } + + /// + /// A helper method asserting that two files are equal. + /// + /// The name of a file within . + /// The name of a file within . + private static void CompareDocs(string artifactFileName, string linqGoldFileName) + { + string artifactPath = ArtifactsDir + artifactFileName; + string linqGoldPath = LinqGoldsDir + linqGoldFileName; + + if (!File.Exists(linqGoldPath)) + File.Copy(artifactPath, linqGoldPath); + else + Assert.IsTrue(DocumentHelper.CompareDocs(artifactPath, linqGoldPath)); + } + + /// + /// Gets the path to the directory with template and data files used by this class. Ends with a back slash. + /// + private static string MyLinqDir { get; } + + /// + /// Gets the path to the directory with previously generated reports used by this class. Ends with a back slash. + /// + private static string LinqGoldsDir { get; } + + static ExReportingEngine() + { + MyLinqDir = new Uri(new Uri(MyDir), @"LINQ/").LocalPath; + LinqGoldsDir = new Uri(new Uri(GoldsDir), @"LINQ/").LocalPath; + } + } +} diff --git a/Examples/Data/Golds/LINQ/Column Chart Report Gold.docx b/Examples/Data/Golds/LINQ/Column Chart Report Gold.docx new file mode 100644 index 0000000000000000000000000000000000000000..b74714f4c122111786b20cfa40f6f0eb2f934b9b GIT binary patch literal 13198 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 literal 0 HcmV?d00001 diff --git a/Examples/Data/LINQ/Column Chart Data.json b/Examples/Data/LINQ/Column Chart Data.json new file mode 100644 index 000000000..7c4b16cfb --- /dev/null +++ b/Examples/Data/LINQ/Column Chart Data.json @@ -0,0 +1,27 @@ +[ + { + "department": "Sales", + "revenue": 50000, + "expenses": 30000 + }, + { + "department": "Marketing", + "revenue": 40000, + "expenses": 25000 + }, + { + "department": "Finance", + "revenue": 30000, + "expenses": 20000 + }, + { + "department": "Operations", + "revenue": 35000, + "expenses": 22000 + }, + { + "department": "Human Resources", + "revenue": 25000, + "expenses": 15000 + } +] \ No newline at end of file diff --git a/Examples/Data/LINQ/Column Chart Template.docx b/Examples/Data/LINQ/Column Chart Template.docx new file mode 100644 index 0000000000000000000000000000000000000000..a36bc0c2387bee4c3ba8371133165367ae5dec62 GIT binary patch literal 26233 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�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 M