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 @@ -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 @@ -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 @@ -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 ----------");
}

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

@ -137,9 +137,9 @@ namespace ICSharpCode.Reports.Core @@ -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);
}

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

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

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

@ -57,26 +57,21 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -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 @@ -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)
{

69
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs

@ -83,7 +83,7 @@ namespace ICSharpCode.Reports.Core.WPF @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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;}

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

@ -8,6 +8,7 @@ @@ -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 @@ -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 @@ -42,9 +54,7 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer
set {
this.document = value;
OnNotifyPropertyChanged ("Document");
}
}
}

Loading…
Cancel
Save