123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- using FastReport.Export.Html;
- using FastReport.Preview;
- using FastReport.Table;
- using System;
- using System.IO;
- using System.Net;
- using System.Text;
- using System.Collections.Generic;
- using System.Linq;
- using System.Globalization;
- #if !OPENSOURCE
- using FastReport.AdvMatrix;
- #endif
- namespace FastReport.Web
- {
- public partial class WebReport
- {
- #region Internal Methods
- internal void ExportReport(Stream stream, string exportFormat, IEnumerable<KeyValuePair<string, string>> exportParameters)
- {
- var exportInfo = ExportsHelper.GetInfoFromExt(exportFormat);
- ExportReport(stream, exportInfo, exportParameters);
- }
- internal void ExportReport(Stream stream, ExportsHelper.ExportInfo exportInfo, IEnumerable<KeyValuePair<string, string>> exportParameters)
- {
- using (var export = exportInfo.CreateExport())
- {
- if (exportInfo.HaveSettings && exportParameters.Any())
- {
- var availableProperties = exportInfo.Properties;
- if (availableProperties != null)
- foreach (var exportParameter in exportParameters)
- {
- var existProp = availableProperties
- .Where(prop => prop.Name == exportParameter.Key)
- .FirstOrDefault();
- if (existProp != null)
- {
- string propValue = exportParameter.Value;
- object propValueConverted;
- if (existProp.PropertyType.IsEnum)
- propValueConverted = Enum.Parse(existProp.PropertyType, propValue);
- else
- propValueConverted = Convert.ChangeType(propValue, existProp.PropertyType, CultureInfo.InvariantCulture);
- System.Diagnostics.Debug.WriteLine($"Export setting: {existProp}: {propValueConverted}");
- existProp.SetMethod.Invoke(export, new[] { propValueConverted });
- }
- }
- }
- if (exportInfo.Export == Exports.Prepared)
- Report.SavePrepared(stream);
- else if (export != null)
- export.Export(Report, stream);
- else
- throw new UnsupportedExportException();
- stream.Position = 0;
- }
- }
- #endregion
- #region Private Methods
- private void Refresh(int pageN, ReportPage page)
- {
- if (Report.NeedRefresh)
- Report.InteractiveRefresh();
- else
- Report.PreparedPages.ModifyPage(pageN, page);
- }
- private void GoToPageNumber(string @goto)
- {
- switch (@goto)
- {
- case "first":
- FirstPage();
- break;
- case "last":
- LastPage();
- break;
- case "prev":
- PrevPage();
- break;
- case "next":
- NextPage();
- break;
- default:
- if (int.TryParse(@goto, out int value))
- GotoPage(value - 1);
- break;
- }
- }
- private int PageNByBookmark(string bookmark)
- {
- int pageN = -1;
- if (Report.PreparedPages != null)
- {
- for (int i = 0; i < Report.PreparedPages.Count; i++)
- {
- ReportPage page = Report.PreparedPages.GetPage(i);
- if (page != null)
- {
- ObjectCollection allObjects = page.AllObjects;
- for (int j = 0; j < allObjects.Count; j++)
- {
- ReportComponentBase c = allObjects[j] as ReportComponentBase;
- if (c.Bookmark == bookmark)
- {
- pageN = i;
- break;
- }
- }
- page.Dispose();
- if (pageN != -1)
- break;
- }
- }
- }
- return pageN;
- }
- private void DoClickAdvancedMatrixByParamID(string objectName, int pageN, int index)
- {
- #if !OPENSOURCE
- if (Report.PreparedPages != null)
- {
- bool found = false;
- while (pageN < Report.PreparedPages.Count && !found)
- {
- ReportPage page = Report.PreparedPages.GetPage(pageN);
- if (page != null)
- {
- ObjectCollection allObjects = page.AllObjects;
- foreach (Base obj in allObjects)
- {
- if (obj is MatrixCollapseButton collapseButton)
- {
- if (collapseButton.Name == objectName
- && collapseButton.Index == index)
- {
- collapseButton.MatrixCollapseButtonClick();
- Refresh(pageN, page);
- found = true;
- break;
- }
- }
- else if(obj is MatrixSortButton sortButton)
- {
- if(sortButton.Name == objectName
- && sortButton.Index == index)
- {
- sortButton.MatrixSortButtonClick();
- Refresh(pageN, page);
- found = true;
- break;
- }
- }
- }
- page.Dispose();
- pageN++;
- }
- }
- }
- #endif
- }
- private void Click(ReportComponentBase c, ReportPage page, int pageN)
- {
- c.OnClick(null);
- Refresh(pageN, page);
- }
- private void CheckboxClick(CheckBoxObject checkBox, ReportPage page, int pageN)
- {
- checkBox.Checked = !checkBox.Checked;
- Refresh(pageN, page);
- }
- private void DoDetailedReport(ReportComponentBase obj, string value)
- {
- if (obj != null)
- {
- string fileName = obj.Hyperlink.DetailReportName;
- if (File.Exists(fileName))
- {
- Report tabReport = new Report();
- tabReport.Load(fileName);
- string paramName = obj.Hyperlink.ReportParameter;
- string paramValue = string.IsNullOrEmpty(obj.Hyperlink.Value) ? value : obj.Hyperlink.Value;
- Data.Parameter param = tabReport.Parameters.FindByName(paramName);
- if (param != null && param.ChildObjects.Count > 0)
- {
- string[] paramValues = paramValue.Split(obj.Hyperlink.ValuesSeparator[0]);
- if (paramValues.Length > 0)
- {
- int i = 0;
- foreach (Data.Parameter childParam in param.ChildObjects)
- {
- childParam.Value = paramValues[i++];
- if (i >= paramValues.Length)
- break;
- }
- }
- }
- else
- tabReport.SetParameterValue(paramName, paramValue);
- Report.Dictionary.ReRegisterData(tabReport.Dictionary);
- tabReport.PreparePhase1();
- tabReport.PreparePhase2();
- Tabs.Add(new ReportTab()
- {
- Name = paramValue,
- Report = tabReport,
- Closeable = true,
- NeedParent = false
- });
- CurrentTabIndex = Tabs.Count - 1;
- }
- }
- }
- internal void DoHtmlPage(StringBuilder sb, HTMLExport html, int pageN)
- {
- if (html.PreparedPages[pageN].PageText == null)
- {
- html.PageNumbers = (pageN + 1).ToString();
- html.Export(Report, (Stream)null);
- }
- //Prop.CurrentWidth = html.PreparedPages[pageN].Width;
- //Prop.CurrentHeight = html.PreparedPages[pageN].Height;
- if (html.PreparedPages[pageN].CSSText != null &&
- html.PreparedPages[pageN].PageText != null)
- {
- sb.Append(html.PreparedPages[pageN].CSSText);
- sb.Append(html.PreparedPages[pageN].PageText);
- if (!html.EmbedPictures)
- CacheHtmlPictures(html, pageN);
- }
- }
- void DoAllHtmlPages(StringBuilder sb, HTMLExport html)
- {
- //Prop.CurrentWidth = 0;
- //Prop.CurrentHeight = 0;
- for (int pageN = 0; pageN < html.PreparedPages.Count; pageN++)
- {
- if (html.PreparedPages[pageN].PageText == null)
- {
- html.PageNumbers = (pageN + 1).ToString();
- html.Export(Report, (Stream)null);
- //if (html.PreparedPages[pageN].Width > Prop.CurrentWidth)
- // Prop.CurrentWidth = html.PreparedPages[pageN].Width;
- //if (html.PreparedPages[pageN].Height > Prop.CurrentHeight)
- // Prop.CurrentHeight = html.PreparedPages[pageN].Height;
- }
- if (html.PreparedPages[pageN].CSSText != null &&
- html.PreparedPages[pageN].PageText != null)
- {
- sb.Append(html.PreparedPages[pageN].CSSText);
- sb.Append(html.PreparedPages[pageN].PageText);
- if (!EmbedPictures)
- CacheHtmlPictures(html, Layers ? 0 : pageN);
- }
- }
- }
- void CacheHtmlPictures(HTMLExport html, int pageN)
- {
- //WebReportCache cache = new WebReportCache(this.Context);
- for (int i = 0; i < html.PreparedPages[pageN].Pictures.Count; i++)
- {
- try
- {
- Stream picStream = html.PreparedPages[pageN].Pictures[i];
- byte[] image = new byte[picStream.Length];
- picStream.Position = 0;
- int n = picStream.Read(image, 0, (int)picStream.Length);
- string guid = html.PreparedPages[pageN].Guids[i];
- //cache.PutObject(guid, image);
- PictureCache[guid] = image;
- }
- catch
- {
- //Log.AppendFormat("Error with picture: {0}\n", i.ToString());
- }
- }
- }
- internal float GetReportPageWidthInPixels()
- {
- float _pageWidth = 0;
- if (SinglePage)
- {
- foreach (PageBase page in Report.Pages)
- {
- // find maxWidth
- if (page is ReportPage)
- {
- var _page = page as ReportPage;
- if (_page.WidthInPixels > _pageWidth)
- _pageWidth = _page.WidthInPixels;
- }
- }
- }
- else
- {
- _pageWidth = Report.PreparedPages.GetPageSize(CurrentPageIndex).Width;
- }
- return _pageWidth;
- }
- internal float GetReportPageHeightInPixels()
- {
- float _pageHeight = 0;
- if (SinglePage)
- {
- for (int i = 0; i < Report.PreparedPages.Count; i++)
- {
- _pageHeight += Report.PreparedPages.GetPageSize(i).Height;
- }
- }
- else
- {
- _pageHeight = Report.PreparedPages.GetPageSize(CurrentPageIndex).Height;
- }
- return _pageHeight;
- }
- #endregion
- }
- }
|