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. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/ExportRenderer/FixedDocumentRenderer.cs
  6. 55
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/WPF/FixedDocumentCreator.cs
  7. 16
      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);

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

@ -58,9 +58,9 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -58,9 +58,9 @@ 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
/*
//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",
@ -68,15 +68,10 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer @@ -68,15 +68,10 @@ namespace ICSharpCode.Reports.Core.Exporter.ExportRenderer
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)
{

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

@ -140,12 +140,14 @@ namespace ICSharpCode.Reports.Core.WPF @@ -140,12 +140,14 @@ namespace ICSharpCode.Reports.Core.WPF
#endregion
#region Container
UIElement CreateGraphicsContainer(ExportGraphicContainer graphicContainer)
UIElement CreateGraphicsContainer(ExportGraphicContainer container)
{
IGraphicStyleDecorator decorator = graphicContainer.StyleDecorator as IGraphicStyleDecorator;
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();
@ -158,13 +160,26 @@ namespace ICSharpCode.Reports.Core.WPF @@ -158,13 +160,26 @@ namespace ICSharpCode.Reports.Core.WPF
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,16 +187,9 @@ namespace ICSharpCode.Reports.Core.WPF @@ -172,16 +187,9 @@ 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));
@ -189,6 +197,25 @@ namespace ICSharpCode.Reports.Core.WPF @@ -189,6 +197,25 @@ namespace ICSharpCode.Reports.Core.WPF
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
@ -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;
}

16
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;}
@ -43,8 +55,6 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer @@ -43,8 +55,6 @@ namespace ICSharpCode.Reports.Core.WpfReportViewer
this.document = value;
OnNotifyPropertyChanged ("Document");
}
}

Loading…
Cancel
Save