|
|
@ -25,7 +25,8 @@ namespace SharpReportCore.Exporters |
|
|
|
DataManager dataManager; |
|
|
|
DataManager dataManager; |
|
|
|
DataNavigator dataNavigator; |
|
|
|
DataNavigator dataNavigator; |
|
|
|
ExportItemsConverter lineItemsConverter; |
|
|
|
ExportItemsConverter lineItemsConverter; |
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
bool newFull; |
|
|
|
internal delegate ExporterCollection<BaseExportColumn> ConverterDelegate (BaseSection s); |
|
|
|
internal delegate ExporterCollection<BaseExportColumn> ConverterDelegate (BaseSection s); |
|
|
|
|
|
|
|
|
|
|
|
#region Constructor
|
|
|
|
#region Constructor
|
|
|
@ -47,9 +48,9 @@ namespace SharpReportCore.Exporters |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Create and Init new page
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private SinglePage InitPage () { |
|
|
|
private SinglePage CreateNewPage () { |
|
|
|
|
|
|
|
PageSettings ps = this.reportModel.ReportSettings.PageSettings; |
|
|
|
PageSettings ps = this.reportModel.ReportSettings.PageSettings; |
|
|
|
ps.Margins = this.reportModel.ReportSettings.DefaultMargins; |
|
|
|
ps.Margins = this.reportModel.ReportSettings.DefaultMargins; |
|
|
|
SectionBounds sb = null; |
|
|
|
SectionBounds sb = null; |
|
|
@ -62,93 +63,90 @@ namespace SharpReportCore.Exporters |
|
|
|
SinglePage sp = new SinglePage(sb); |
|
|
|
SinglePage sp = new SinglePage(sb); |
|
|
|
return sp; |
|
|
|
return sp; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void BuildNewPage () { |
|
|
|
|
|
|
|
this.singlePage = this.InitPage(); |
|
|
|
|
|
|
|
this.singlePage.CalculatePageBounds(this.reportModel); |
|
|
|
|
|
|
|
this.newFull = false; |
|
|
|
|
|
|
|
this.BuildReportHeader(); |
|
|
|
|
|
|
|
this.BuildPageHeader(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void DoConvert (BaseSection section,int offset) { |
|
|
|
#endregion
|
|
|
|
this.lineItemsConverter.Offset = offset; |
|
|
|
|
|
|
|
List <BaseExportColumn>list = section.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// list.ForEach(display);
|
|
|
|
|
|
|
|
/* |
|
|
|
|
|
|
|
if (list.Count > 0) { |
|
|
|
|
|
|
|
list.ForEach(delegate(BaseExportColumn item){ |
|
|
|
|
|
|
|
ExportGraphic gr = item as ExportGraphic; |
|
|
|
|
|
|
|
if (gr != null) { |
|
|
|
|
|
|
|
System.Console.WriteLine("{0} / {1}",gr.ToString(),gr.StyleDecorator.Shape.ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
this.singlePage.Items.AddRange(list); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void BuildReportHeader () { |
|
|
|
private void BuildReportHeader () { |
|
|
|
|
|
|
|
if (this.pages.Count == 0) { |
|
|
|
this.DoConvert (this.reportModel.ReportHeader, |
|
|
|
this.ConvertItemsList (this.reportModel.ReportHeader, |
|
|
|
this.singlePage.SectionBounds.PageHeaderRectangle.Top); |
|
|
|
this.singlePage.SectionBounds.ReportHeaderRectangle.Top); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void BuildPageHeader () { |
|
|
|
private void BuildPageHeader () { |
|
|
|
this.DoConvert (this.reportModel.PageHeader, |
|
|
|
this.ConvertItemsList (this.reportModel.PageHeader, |
|
|
|
this.singlePage.SectionBounds.PageHeaderRectangle.Top); |
|
|
|
this.singlePage.SectionBounds.PageHeaderRectangle.Top); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void BuildDetails (Graphics graphics) { |
|
|
|
private void BuildReportFooter (int locY) { |
|
|
|
|
|
|
|
this.ConvertItemsList (this.reportModel.ReportFooter,locY); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool firstOnPage = true; |
|
|
|
private void BuildPageFooter () { |
|
|
|
|
|
|
|
|
|
|
|
if (! dataNavigator.HasMoreData ) { |
|
|
|
this.ConvertItemsList (this.reportModel.PageFooter,this.singlePage.SectionBounds.PageFooterRectangle.Top); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (this.pages.Count == 0) { |
|
|
|
/* |
|
|
|
dataNavigator.MoveNext(); |
|
|
|
private void display (BaseStyleDecorator li) { |
|
|
|
|
|
|
|
// private void display (IPerformLine li) {
|
|
|
|
|
|
|
|
// System.Console.WriteLine("\tdisplay {0}",li.ToString());
|
|
|
|
|
|
|
|
// ExportText l = li as ExportText;
|
|
|
|
|
|
|
|
if (li != null) { |
|
|
|
|
|
|
|
System.Console.WriteLine("\t\t{0} / {1} ",l.StyleDecorator.Location,l.Text); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
BaseSection section = this.reportModel.DetailSection; |
|
|
|
#region newCreate
|
|
|
|
section.SectionOffset = this.singlePage.SectionBounds.DetailStart.Y; |
|
|
|
|
|
|
|
do { |
|
|
|
|
|
|
|
dataNavigator.Fill(section.Items); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!firstOnPage) { |
|
|
|
|
|
|
|
section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * this.singlePage.SectionBounds.Gap; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MeasurementService.FitSectionToItems (section,graphics); |
|
|
|
void BuildDetail (BaseSection section,Graphics graphics) { |
|
|
|
ExporterCollection<BaseExportColumn> convertedList = new ExporterCollection<BaseExportColumn>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ConverterDelegate converterDelegate; |
|
|
|
dataNavigator.Fill(section.Items); |
|
|
|
|
|
|
|
MeasurementService.FitSectionToItems (section,graphics); |
|
|
|
|
|
|
|
ExporterCollection<BaseExportColumn> convertedList = new ExporterCollection<BaseExportColumn>(); |
|
|
|
|
|
|
|
|
|
|
|
if (section.Items[0] is IContainerItem) { |
|
|
|
ConverterDelegate converterDelegate; |
|
|
|
converterDelegate = new ConverterDelegate(DoContainerJob); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
converterDelegate = new ConverterDelegate(DoJob); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
convertedList = converterDelegate(section); |
|
|
|
if (section.Items[0] is IContainerItem) { |
|
|
|
BaseExportColumn bec = convertedList[0]; |
|
|
|
converterDelegate = new ConverterDelegate(ContainerItems); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
converterDelegate = new ConverterDelegate(StandartItems); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
convertedList = converterDelegate(section); |
|
|
|
|
|
|
|
BaseExportColumn bec = convertedList[0]; |
|
|
|
|
|
|
|
|
|
|
|
System.Console.WriteLine("SB {0} / DR {1} / Fit {2} ",this.singlePage.SectionBounds.DetailRectangle, |
|
|
|
if ( bec.StyleDecorator.DisplayRectangle.Bottom > this.singlePage.SectionBounds.PageFooterRectangle.Top) { |
|
|
|
bec.StyleDecorator.DisplayRectangle, |
|
|
|
this.newFull = true; |
|
|
|
this.singlePage.SectionBounds.DetailRectangle.Contains(bec.StyleDecorator.DisplayRectangle)); |
|
|
|
return; |
|
|
|
if (this.singlePage.SectionBounds.DetailRectangle.Contains(bec.StyleDecorator.DisplayRectangle)) { |
|
|
|
|
|
|
|
System.Console.WriteLine("\t fit"); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
System.Console.WriteLine("\t dont fit"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.singlePage.Items.AddRange(convertedList); |
|
|
|
|
|
|
|
firstOnPage = false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
while (dataNavigator.MoveNext()); |
|
|
|
this.singlePage.Items.AddRange(convertedList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Delegate's and Converter
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void ConvertItemsList (BaseSection section,int offset) { |
|
|
|
|
|
|
|
this.lineItemsConverter.Offset = offset; |
|
|
|
|
|
|
|
List <BaseExportColumn>list = section.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems); |
|
|
|
|
|
|
|
this.singlePage.Items.AddRange(list); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ExporterCollection<BaseExportColumn> DoContainerJob (BaseSection section) { |
|
|
|
private ExporterCollection<BaseExportColumn> ContainerItems (BaseSection section) { |
|
|
|
|
|
|
|
|
|
|
|
this.lineItemsConverter.Offset = section.SectionOffset; |
|
|
|
this.lineItemsConverter.Offset = section.SectionOffset; |
|
|
|
IExportColumnBuilder exportLineBuilder = section.Items[0] as IExportColumnBuilder; |
|
|
|
IExportColumnBuilder exportLineBuilder = section.Items[0] as IExportColumnBuilder; |
|
|
@ -185,9 +183,7 @@ namespace SharpReportCore.Exporters |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ExporterCollection<BaseExportColumn> StandartItems (BaseSection section) { |
|
|
|
|
|
|
|
|
|
|
|
private ExporterCollection<BaseExportColumn> DoJob (BaseSection section) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.lineItemsConverter.Offset = section.SectionOffset; |
|
|
|
this.lineItemsConverter.Offset = section.SectionOffset; |
|
|
|
List<BaseExportColumn> list = section.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems); |
|
|
|
List<BaseExportColumn> list = section.Items.ConvertAll <BaseExportColumn> (this.lineItemsConverter.ConvertToLineItems); |
|
|
@ -197,41 +193,50 @@ namespace SharpReportCore.Exporters |
|
|
|
return childList; |
|
|
|
return childList; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void WritePages () { |
|
|
|
|
|
|
|
this.dataNavigator = this.dataManager.GetNavigator; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using (Graphics graphics = reportModel.ReportSettings.PageSettings.PrinterSettings.CreateMeasurementGraphics()){ |
|
|
|
|
|
|
|
this.lineItemsConverter = new ExportItemsConverter(graphics); |
|
|
|
|
|
|
|
|
|
|
|
private void BuildPageFooter () { |
|
|
|
this.pages.Clear(); |
|
|
|
BaseSection section = this.reportModel.PageFooter; |
|
|
|
this.BuildNewPage(); |
|
|
|
this.DoConvert (this.reportModel.PageFooter,this.singlePage.SectionBounds.PageFooterRectangle.Top); |
|
|
|
|
|
|
|
} |
|
|
|
this.newFull = false; |
|
|
|
/* |
|
|
|
this.dataNavigator.MoveNext(); |
|
|
|
private void display (BaseStyleDecorator li) { |
|
|
|
BaseSection section = this.reportModel.DetailSection; |
|
|
|
// private void display (IPerformLine li) {
|
|
|
|
|
|
|
|
// System.Console.WriteLine("\tdisplay {0}",li.ToString());
|
|
|
|
section.SectionOffset = this.singlePage.SectionBounds.DetailStart.Y; |
|
|
|
// ExportText l = li as ExportText;
|
|
|
|
do { |
|
|
|
if (li != null) { |
|
|
|
BuildDetail(section,graphics); |
|
|
|
System.Console.WriteLine("\t\t{0} / {1} ",l.StyleDecorator.Location,l.Text); |
|
|
|
section.SectionOffset += section.Size.Height + 2 * this.singlePage.SectionBounds.Gap; |
|
|
|
|
|
|
|
if (newFull) { |
|
|
|
|
|
|
|
PageBreak(); |
|
|
|
|
|
|
|
section.SectionOffset = this.singlePage.SectionBounds.DetailStart.Y; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
dataNavigator.MoveNext(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
while (dataNavigator.HasMoreData); |
|
|
|
|
|
|
|
this.BuildReportFooter(section.SectionOffset + section.Size.Height); |
|
|
|
|
|
|
|
this.BuildPageFooter(); |
|
|
|
|
|
|
|
//this is the last Page
|
|
|
|
|
|
|
|
this.AddPage(this.singlePage); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
private void Write () { |
|
|
|
|
|
|
|
this.dataNavigator = this.dataManager.GetNavigator; |
|
|
|
|
|
|
|
Graphics graphics = reportModel.ReportSettings.PageSettings.PrinterSettings.CreateMeasurementGraphics(); |
|
|
|
|
|
|
|
this.lineItemsConverter = new ExportItemsConverter(graphics); |
|
|
|
|
|
|
|
if (this.pages.Count == 0) { |
|
|
|
|
|
|
|
BuildReportHeader (); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BuildPageHeader() ; |
|
|
|
|
|
|
|
BuildDetails (graphics); |
|
|
|
void PageBreak () { |
|
|
|
System.Console.WriteLine("--------"); |
|
|
|
this.BuildPageFooter(); |
|
|
|
System.Console.WriteLine("{0} / {1} / {2}",this.dataNavigator.Count,this.dataNavigator.CurrentRow,this.dataNavigator.HasMoreData); |
|
|
|
this.AddPage(this.singlePage); |
|
|
|
BuildPageFooter (); |
|
|
|
// System.Console.WriteLine("-------Page Break ---{0} --",this.singlePage.Items.Count);
|
|
|
|
graphics.Dispose(); |
|
|
|
System.Console.WriteLine("-------Page Break --- --"); |
|
|
|
|
|
|
|
this.BuildNewPage (); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
//TODO did we use this method
|
|
|
|
//TODO did we use this method
|
|
|
|
public void AddPage (SinglePage page) { |
|
|
|
public void AddPage (SinglePage page) { |
|
|
|
if (page == null) { |
|
|
|
if (page == null) { |
|
|
@ -242,12 +247,17 @@ namespace SharpReportCore.Exporters |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void BuildExportList () { |
|
|
|
public void BuildExportList () { |
|
|
|
this.singlePage = this.CreateNewPage(); |
|
|
|
System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch(); |
|
|
|
this.singlePage.CalculatePageBounds(this.reportModel); |
|
|
|
s.Start(); |
|
|
|
Write(); |
|
|
|
System.Console.WriteLine("BuildExportList started"); |
|
|
|
this.pages.Add(this.singlePage); |
|
|
|
WritePages(); |
|
|
|
|
|
|
|
s.Stop(); |
|
|
|
|
|
|
|
TimeSpan ts = s.Elapsed; |
|
|
|
|
|
|
|
System.Console.WriteLine("BuildExportList finished {0}:{1} Seconds",ts.Seconds,ts.Milliseconds); |
|
|
|
|
|
|
|
System.Console.WriteLine(""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Propertys
|
|
|
|
|
|
|
|
|
|
|
|
public int PageCount{ |
|
|
|
public int PageCount{ |
|
|
|
get { |
|
|
|
get { |
|
|
@ -278,7 +288,7 @@ namespace SharpReportCore.Exporters |
|
|
|
return pages; |
|
|
|
return pages; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|