Browse Source

Reduce time for creating of (WPF)FixedDocument(4 Pages Report) form 11 to 1 sec by removing PrintDialog

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
b54d83c712
  1. 34
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/WPF/WPFReportPreview.cs
  2. 4
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs
  3. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs
  4. 6
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  5. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs
  6. 69
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs
  7. 18
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs

34
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() protected override void LoadFromPrimary()
{ {
Stopwatch sw = new Stopwatch(); // Stopwatch sw = new Stopwatch();
sw.Start(); // sw.Start();
Console.WriteLine("-----------------"); // Console.WriteLine("--------Stopwatch start---------");
Console.WriteLine("Stop start"); // Console.WriteLine("");
Pages.Clear(); Pages.Clear();
ReportModel model = designerLoader.CreateRenderableModel(); ReportModel model = designerLoader.CreateRenderableModel();
@ -52,15 +52,19 @@ namespace ICSharpCode.Reports.Addin.Project.WPF
collectCmd.Run(); collectCmd.Run();
switch (model.DataModel) switch (model.DataModel)
{ {
case GlobalEnums.PushPullModel.FormSheet : { case GlobalEnums.PushPullModel.FormSheet :
{
exportRunner.RunReport(model,(ReportParameters)null); exportRunner.RunReport(model,(ReportParameters)null);
break; break;
} }
case GlobalEnums.PushPullModel.PullData:{ case GlobalEnums.PushPullModel.PullData:
{
// Console.WriteLine("call runreport {0}",sw.Elapsed);
exportRunner.RunReport(model,(ReportParameters)null); exportRunner.RunReport(model,(ReportParameters)null);
// Console.WriteLine("back from runreport {0}",sw.Elapsed);
break; break;
} }
case GlobalEnums.PushPullModel.PushData: case GlobalEnums.PushPullModel.PushData:
{ {
var cmd = new DataSetFromXsdCommand(); var cmd = new DataSetFromXsdCommand();
cmd.Run(); cmd.Run();
@ -71,14 +75,18 @@ namespace ICSharpCode.Reports.Addin.Project.WPF
default: default:
throw new InvalidReportModelException(); 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); 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); viewer.SetBinding(previewViewModel);
Console.WriteLine ("after setbinding {0}",sw.Elapsed);
sw.Stop(); // Console.WriteLine ("after setbinding {0}",sw.Elapsed);
Console.WriteLine("---------------");
// sw.Stop();
// Console.WriteLine("-----end ----------");
} }

4
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseItems/BaseSection.cs

@ -137,9 +137,9 @@ namespace ICSharpCode.Reports.Core
public Size MeasureOverride (Size availableSize) public Size MeasureOverride (Size availableSize)
{ {
Size resultSize = new Size(0,0); Size resultSize = new Size(0,0);
Console.WriteLine("MeasureOverride"); // Console.WriteLine("MeasureOverride");
foreach (var item in Items) { 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.Width = Math.Max(resultSize.Width, item.Size.Width);
resultSize.Height = Math.Max(resultSize.Height, item.Size.Height); resultSize.Height = Math.Max(resultSize.Height, item.Size.Height);
} }

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Collections/Collections.cs

@ -65,7 +65,7 @@ namespace ICSharpCode.Reports.Core{
get { return (List<BaseReportItem>)base.Items; } get { return (List<BaseReportItem>)base.Items; }
} }
public void Sort(IComparer<BaseReportItem> comparer) private void Sort(IComparer<BaseReportItem> comparer)
{ {
InnerList.Sort(comparer); InnerList.Sort(comparer);
} }

6
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); Rectangle desiredRectangle = LayoutHelper.CalculateSectionLayout(this.Graphics,section);
LayoutHelper.FixSectionLayout(desiredRectangle,section); LayoutHelper.FixSectionLayout(desiredRectangle,section);
section.Items.SortByLocation();
GapList gapCalculator = new GapList(); GapList gapCalculator = new GapList();
gapCalculator.CalculateGapList(section); gapCalculator.CalculateGapList(section);
int i = 0; int i = 0;
@ -116,10 +116,10 @@ namespace ICSharpCode.Reports.Core.Exporter
LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer); LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
/* /*
* */ * */
Console.WriteLine("--"); // Console.WriteLine("--");
section.Items.ForEach(delegate(BaseReportItem aitem) section.Items.ForEach(delegate(BaseReportItem aitem)
{ {
Console.WriteLine(item.Location); // Console.WriteLine(item.Location);
}); });
var h = section.Items.FindHighestElement(); var h = section.Items.FindHighestElement();
section.MeasureOverride(section.Size); section.MeasureOverride(section.Size);

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs

@ -57,26 +57,21 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
// 827/1169 // 827/1169
// A4 paper is 210mm x 297mm // A4 paper is 210mm x 297mm
//8.2 inch x 11.6 inch //8.2 inch x 11.6 inch
//1240 px x 1754 px //1240 px x 1754 px
/* /*
iTextSharp uses a default of 72 pixels per inch. iTextSharp uses a default of 72 pixels per inch.
792 would be 11", or the height of a standard Letter size paper." + 792 would be 11", or the height of a standard Letter size paper." +
595 would be 8.264", 595 would be 8.264",
which is the standard width of A4 size paper. which is the standard width of A4 size paper.
Using 595 x 792 as the page size would be a cheap and dirty way 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 to ensure that you could print on either A4 or Letter
without anything getting cut off. 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); docCreator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height);
document.DocumentPaginator.PageSize = docCreator.PageSize; document.DocumentPaginator.PageSize = docCreator.PageSize;
} }
@ -84,7 +79,6 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
public override void RenderOutput() public override void RenderOutput()
{ {
base.RenderOutput(); base.RenderOutput();
Console.WriteLine("FixedDocumentRenderer - RenderOutput");
foreach (var page in pages) foreach (var page in pages)
{ {

69
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 = CreateBorder(column.StyleDecorator as BaseStyleDecorator);
border.Child = t; border.Child = t;
element = border; element = border;
} }
else else
{ {
element = t; element = t;
@ -101,7 +101,7 @@ namespace ICSharpCode.Reports.Core.WPF
return element; return element;
} }
#region GraphicsElement (Line etc) #region GraphicsElement (Line etc)
System.Windows.Controls.Border CreateBorder( BaseStyleDecorator column) System.Windows.Controls.Border CreateBorder( BaseStyleDecorator column)
@ -139,13 +139,15 @@ namespace ICSharpCode.Reports.Core.WPF
#endregion #endregion
#region Container #region Container
UIElement CreateGraphicsContainer(ExportGraphicContainer graphicContainer) 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) { if (ss != null) {
var circle = new System.Windows.Shapes.Ellipse(); var circle = new System.Windows.Shapes.Ellipse();
@ -155,16 +157,29 @@ namespace ICSharpCode.Reports.Core.WPF
circle.Stroke = ConvertBrush(decorator.ForeColor); circle.Stroke = ConvertBrush(decorator.ForeColor);
shape = circle; shape = circle;
} }
else else
{ {
var border = CreateBorder(decorator as BaseStyleDecorator); 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; RectangleShape rs = decorator.Shape as RectangleShape;
border.CornerRadius = new CornerRadius(rs.CornerRadius); border.CornerRadius = new CornerRadius(rs.CornerRadius);
border.BorderThickness = new Thickness(decorator.Thickness); border.BorderThickness = new Thickness(decorator.Thickness);
border.BorderBrush = ConvertBrush(decorator.ForeColor); border.BorderBrush = ConvertBrush(decorator.ForeColor);
shape = border; 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; return shape;
} }
@ -172,22 +187,34 @@ namespace ICSharpCode.Reports.Core.WPF
private UIElement CreateContainer(ExportContainer container) private UIElement CreateContainer(ExportContainer container)
{ {
var canvas = new Canvas(); Canvas canvas = CreateCanvas(container);
SetDimension(canvas,container.StyleDecorator);
canvas.Background = ConvertBrush(container.StyleDecorator.BackColor);
foreach (var exportElement in container.Items) { AddItemsToCanvas(ref canvas, container);
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.Measure(PageSize); canvas.Measure(PageSize);
canvas.Arrange(new Rect(new System.Windows.Point(), PageSize)); canvas.Arrange(new Rect(new System.Windows.Point(), PageSize));
canvas.UpdateLayout(); canvas.UpdateLayout();
return canvas; 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 #endregion
@ -263,7 +290,7 @@ namespace ICSharpCode.Reports.Core.WPF
{ {
if (brushConverter.IsValid(color.Name)) { if (brushConverter.IsValid(color.Name)) {
return brushConverter.ConvertFromString(color.Name) as SolidColorBrush; return brushConverter.ConvertFromString(color.Name) as SolidColorBrush;
} else } else
{ {
Console.WriteLine("FixedDocumentCreator"); Console.WriteLine("FixedDocumentCreator");
Console.WriteLine("\tcan't convert {0} to valid Color",color.Name); 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.Width = decorator.DisplayRectangle.Width;
element.Height = decorator.DisplayRectangle.Height; 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.Measure(pageSize);
page.Arrange(new Rect(new System.Windows.Point(), pageSize)); page.Arrange(new Rect(new System.Windows.Point(), pageSize));
page.UpdateLayout(); page.UpdateLayout();
} }
public System.Windows.Size PageSize {get;set;} public System.Windows.Size PageSize {get;set;}

18
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WpfReportViewer/PreviewViewModel.cs

@ -8,6 +8,7 @@
*/ */
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Documents; using System.Windows.Documents;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer; using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
@ -25,13 +26,24 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer
public PreviewViewModel(ReportSettings reportSettings, PagesCollection pages) public PreviewViewModel(ReportSettings reportSettings, PagesCollection pages)
{ {
this.Pages = pages; this.Pages = pages;
// Stopwatch s = new Stopwatch();
// s.Start();
// Console.WriteLine("-------------");
FixedDocumentRenderer renderer = FixedDocumentRenderer.CreateInstance(reportSettings,Pages); FixedDocumentRenderer renderer = FixedDocumentRenderer.CreateInstance(reportSettings,Pages);
// Console.WriteLine("\tfinish render {0}",s.Elapsed);
// Console.WriteLine("-------------");
//
renderer.Start(); renderer.Start();
// Console.WriteLine("\tfinsih start {0}",s.Elapsed);
renderer.RenderOutput(); renderer.RenderOutput();
// Console.WriteLine("\tfinish renderoutput {0}",s.Elapsed);
renderer.End(); renderer.End();
// Console.WriteLine("\tfinish end {0}",s.Elapsed);
this.Document = renderer.Document; this.Document = renderer.Document;
// Console.WriteLine("\tfinish document {0}",s.Elapsed);
// s.Stop();
} }
public PagesCollection Pages {get;private set;} public PagesCollection Pages {get;private set;}
@ -42,9 +54,7 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer
set { set {
this.document = value; this.document = value;
OnNotifyPropertyChanged ("Document"); OnNotifyPropertyChanged ("Document");
} }
} }

Loading…
Cancel
Save