From b54d83c712a016a6bd9a4cad0619cf09b5f4f02f Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Tue, 5 Jul 2011 20:47:39 +0200 Subject: [PATCH] Reduce time for creating of (WPF)FixedDocument(4 Pages Report) form 11 to 1 sec by removing PrintDialog --- .../Project/WPF/WPFReportPreview.cs | 34 +++++---- .../Project/BaseItems/BaseSection.cs | 4 +- .../Project/Collections/Collections.cs | 2 +- .../Project/Exporter/BasePager.cs | 6 +- .../ExportRenderer/FixedDocumentRenderer.cs | 24 +++---- .../Project/WPF/FixedDocumentCreator.cs | 69 +++++++++++++------ .../WpfReportViewer/PreviewViewModel.cs | 18 +++-- 7 files changed, 97 insertions(+), 60 deletions(-) diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs index 521d004ef9..3fc12c299f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs @@ -41,10 +41,10 @@ namespace ICSharpCode.Reports.Addin.Project.WPF protected override void LoadFromPrimary() { - Stopwatch sw = new Stopwatch(); - sw.Start(); - Console.WriteLine("-----------------"); - Console.WriteLine("Stop start"); +// Stopwatch sw = new Stopwatch(); +// sw.Start(); +// Console.WriteLine("--------Stopwatch start---------"); +// Console.WriteLine(""); Pages.Clear(); ReportModel model = designerLoader.CreateRenderableModel(); @@ -52,15 +52,19 @@ namespace ICSharpCode.Reports.Addin.Project.WPF collectCmd.Run(); switch (model.DataModel) { - case GlobalEnums.PushPullModel.FormSheet : { + case GlobalEnums.PushPullModel.FormSheet : + { exportRunner.RunReport(model,(ReportParameters)null); break; } - case GlobalEnums.PushPullModel.PullData:{ + case GlobalEnums.PushPullModel.PullData: + { +// Console.WriteLine("call runreport {0}",sw.Elapsed); exportRunner.RunReport(model,(ReportParameters)null); +// Console.WriteLine("back from runreport {0}",sw.Elapsed); break; } - case GlobalEnums.PushPullModel.PushData: + case GlobalEnums.PushPullModel.PushData: { var cmd = new DataSetFromXsdCommand(); cmd.Run(); @@ -71,14 +75,18 @@ namespace ICSharpCode.Reports.Addin.Project.WPF default: throw new InvalidReportModelException(); } - Console.WriteLine (" after create {0}",sw.Elapsed); - +// Console.WriteLine ("finsh create {0}",sw.Elapsed); +// Console.WriteLine ("strat viewmodel"); PreviewViewModel previewViewModel = new PreviewViewModel (model.ReportSettings,exportRunner.Pages); - Console.WriteLine (" after init model {0}",sw.Elapsed); +// Console.WriteLine ("back from viewmodel"); +// Console.WriteLine ("after init model {0}",sw.Elapsed); + viewer.SetBinding(previewViewModel); - Console.WriteLine ("after setbinding {0}",sw.Elapsed); - sw.Stop(); - Console.WriteLine("---------------"); + +// Console.WriteLine ("after setbinding {0}",sw.Elapsed); + +// sw.Stop(); +// Console.WriteLine("-----end ----------"); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs index 7429b1bb0f..63056c51a4 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs @@ -137,9 +137,9 @@ namespace ICSharpCode.Reports.Core public Size MeasureOverride (Size availableSize) { Size resultSize = new Size(0,0); - Console.WriteLine("MeasureOverride"); +// Console.WriteLine("MeasureOverride"); foreach (var item in Items) { - Console.WriteLine("{0} - {1}",item.Location,item.Size); +// Console.WriteLine("{0} - {1}",item.Location,item.Size); resultSize.Width = Math.Max(resultSize.Width, item.Size.Width); resultSize.Height = Math.Max(resultSize.Height, item.Size.Height); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs index 1a7a94eddc..63661cd755 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs @@ -65,7 +65,7 @@ namespace ICSharpCode.Reports.Core{ get { return (List)base.Items; } } - public void Sort(IComparer comparer) + private void Sort(IComparer comparer) { InnerList.Sort(comparer); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs index c36cc5355c..a70a899f1b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.Reports.Core.Exporter Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section); LayoutHelper.FixSectionLayout(desiredRectangle,section); - + section.Items.SortByLocation(); GapList gapCalculator = new GapList(); gapCalculator.CalculateGapList(section); int i = 0; @@ -116,10 +116,10 @@ namespace ICSharpCode.Reports.Core.Exporter LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer); /* * */ - Console.WriteLine("--"); +// Console.WriteLine("--"); section.Items.ForEach(delegate(BaseReportItem aitem) { - Console.WriteLine(item.Location); +// Console.WriteLine(item.Location); }); var h = section.Items.FindHighestElement(); section.MeasureOverride(section.Size); diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs index 47ffe44f24..0afb8ceff9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs @@ -57,26 +57,21 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer // 827/1169 -// A4 paper is 210mm x 297mm -//8.2 inch x 11.6 inch -//1240 px x 1754 px -/* - iTextSharp uses a default of 72 pixels per inch. +// A4 paper is 210mm x 297mm + //8.2 inch x 11.6 inch + //1240 px x 1754 px + /* + iTextSharp uses a default of 72 pixels per inch. 792 would be 11", or the height of a standard Letter size paper." + 595 would be 8.264", which is the standard width of A4 size paper. - Using 595 x 792 as the page size would be a cheap and dirty way - to ensure that you could print on either A4 or Letter + Using 595 x 792 as the page size would be a cheap and dirty way + to ensure that you could print on either A4 or Letter without anything getting cut off. – -*/ - PrintDialog printDialog = new PrintDialog(); - var w = printDialog.PrintableAreaHeight; - var h = printDialog.PrintableAreaWidth; - Console.WriteLine(new System.Windows.Size(w,h)); - + */ + docCreator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height); document.DocumentPaginator.PageSize = docCreator.PageSize; - } @@ -84,7 +79,6 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer public override void RenderOutput() { base.RenderOutput(); - Console.WriteLine("FixedDocumentRenderer - RenderOutput"); foreach (var page in pages) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs index f0299db1a4..a4663bca17 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs @@ -83,7 +83,7 @@ namespace ICSharpCode.Reports.Core.WPF border = CreateBorder(column.StyleDecorator as BaseStyleDecorator); border.Child = t; element = border; - } + } else { element = t; @@ -101,7 +101,7 @@ namespace ICSharpCode.Reports.Core.WPF return element; } - + #region GraphicsElement (Line etc) System.Windows.Controls.Border CreateBorder( BaseStyleDecorator column) @@ -139,13 +139,15 @@ namespace ICSharpCode.Reports.Core.WPF #endregion - #region Container - UIElement CreateGraphicsContainer(ExportGraphicContainer graphicContainer) + #region Container + UIElement CreateGraphicsContainer(ExportGraphicContainer container) { - IGraphicStyleDecorator decorator = graphicContainer.StyleDecorator as IGraphicStyleDecorator; - UIElement shape = null; - var ss = decorator.Shape as EllipseShape; + + IGraphicStyleDecorator decorator = container.StyleDecorator as IGraphicStyleDecorator; + + UIElement shape = null; + var ss = decorator.Shape as EllipseShape; if (ss != null) { var circle = new System.Windows.Shapes.Ellipse(); @@ -155,16 +157,29 @@ namespace ICSharpCode.Reports.Core.WPF circle.Stroke = ConvertBrush(decorator.ForeColor); shape = circle; } - else + else { var border = CreateBorder(decorator as BaseStyleDecorator); - SetDimension(border,decorator); +// SetDimension(border,decorator); + border.Width = decorator.DisplayRectangle.Width + 2; + border.Height = decorator.DisplayRectangle.Height + 2; RectangleShape rs = decorator.Shape as RectangleShape; border.CornerRadius = new CornerRadius(rs.CornerRadius); border.BorderThickness = new Thickness(decorator.Thickness); border.BorderBrush = ConvertBrush(decorator.ForeColor); shape = border; + + var canvas = CreateCanvas(container); + canvas.Width = decorator.DisplayRectangle.Width -1; + canvas.Height = decorator.DisplayRectangle.Height -1; + + AddItemsToCanvas(ref canvas, container); + border.Child = canvas; +// border.Measure(container.StyleDecorator.Size); +// border.Arrange(new Rect(new System.Windows.Point(), container.StyleDecorator.Size)); + border.UpdateLayout(); } + return shape; } @@ -172,22 +187,34 @@ namespace ICSharpCode.Reports.Core.WPF private UIElement CreateContainer(ExportContainer container) { - var canvas = new Canvas(); - SetDimension(canvas,container.StyleDecorator); - canvas.Background = ConvertBrush(container.StyleDecorator.BackColor); + Canvas canvas = CreateCanvas(container); - foreach (var exportElement in container.Items) { - var uiElement = ItemFactory (exportElement); - Canvas.SetLeft(uiElement,exportElement.StyleDecorator.Location.X - container.StyleDecorator.Location.X); - Canvas.SetTop(uiElement,exportElement.StyleDecorator.Location.Y - container.StyleDecorator.Location.Y); - canvas.Children.Add(uiElement); - } + AddItemsToCanvas(ref canvas, container); canvas.Measure(PageSize); canvas.Arrange(new Rect(new System.Windows.Point(), PageSize)); canvas.UpdateLayout(); return canvas; } + + + void AddItemsToCanvas(ref Canvas canvas, ExportContainer container) + { + foreach (var exportElement in container.Items) { + var uiElement = ItemFactory(exportElement); + Canvas.SetLeft(uiElement, exportElement.StyleDecorator.Location.X - container.StyleDecorator.Location.X); + Canvas.SetTop(uiElement, exportElement.StyleDecorator.Location.Y - container.StyleDecorator.Location.Y); + canvas.Children.Add(uiElement); + } + } + + Canvas CreateCanvas(ExportContainer container) + { + var canvas = new Canvas(); + SetDimension(canvas, container.StyleDecorator); + canvas.Background = ConvertBrush(container.StyleDecorator.BackColor); + return canvas; + } #endregion @@ -263,7 +290,7 @@ namespace ICSharpCode.Reports.Core.WPF { if (brushConverter.IsValid(color.Name)) { return brushConverter.ConvertFromString(color.Name) as SolidColorBrush; - } else + } else { Console.WriteLine("FixedDocumentCreator"); Console.WriteLine("\tcan't convert {0} to valid Color",color.Name); @@ -308,8 +335,6 @@ namespace ICSharpCode.Reports.Core.WPF { element.Width = decorator.DisplayRectangle.Width; element.Height = decorator.DisplayRectangle.Height; -// element.MaxHeight = decorator.DisplayRectangle.Height; -// element.MaxWidth = decorator.DisplayRectangle.Width; } @@ -318,7 +343,7 @@ namespace ICSharpCode.Reports.Core.WPF page.Measure(pageSize); page.Arrange(new Rect(new System.Windows.Point(), pageSize)); page.UpdateLayout(); - } + } public System.Windows.Size PageSize {get;set;} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs index c8a43c1b59..92bda7dca1 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs @@ -8,6 +8,7 @@ */ using System; using System.ComponentModel; +using System.Diagnostics; using System.Windows.Documents; using ICSharpCode.Reports.Core.Exporter.ExportRenderer; @@ -25,13 +26,24 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer public PreviewViewModel(ReportSettings reportSettings, PagesCollection pages) { this.Pages = pages; +// Stopwatch s = new Stopwatch(); +// s.Start(); +// Console.WriteLine("-------------"); FixedDocumentRenderer renderer = FixedDocumentRenderer.CreateInstance(reportSettings,Pages); +// Console.WriteLine("\tfinish render {0}",s.Elapsed); +// Console.WriteLine("-------------"); +// renderer.Start(); +// Console.WriteLine("\tfinsih start {0}",s.Elapsed); + renderer.RenderOutput(); +// Console.WriteLine("\tfinish renderoutput {0}",s.Elapsed); renderer.End(); +// Console.WriteLine("\tfinish end {0}",s.Elapsed); this.Document = renderer.Document; - +// Console.WriteLine("\tfinish document {0}",s.Elapsed); +// s.Stop(); } public PagesCollection Pages {get;private set;} @@ -42,9 +54,7 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer set { this.document = value; OnNotifyPropertyChanged ("Document"); - } - - + } }