using System.Collections.Generic; using System.Data; using System.IO; using System.Text; using FastReport; namespace Kreta.BusinessLogic.Classes { public enum PrintReportStatus { Sikeres, Hibas, NincsTemplate } public static class SDAPrintReport { //public static byte[] PrintDataTableReport(Kreta.Enums.FormTypeEnum FormType, DataTable tblData, out PrintReportStatus status) //{ // string strReport = ""; // byte[] strRetVal = null; // FastReport.Report report = new Report(); // status = PrintReportStatus.Hibas; // //Nyomtatási template-k betöltése // Kreta.Framework.Caching.TemplateCache cache = SDAServer.Instance.CacheManager.AquireCache(); // Dictionary frTemplates = null; // //Amennyiben nem volt template // if (frTemplates.Count > 0) // { // foreach (int TemplateId in frTemplates.Keys) // { // strReport = cache.GetTemplate(TemplateId); // } // if (!string.IsNullOrWhiteSpace(strReport)) // { // byte[] myByte = System.Text.Encoding.Default.GetBytes(strReport); // System.IO.MemoryStream myStream = new System.IO.MemoryStream(myByte); // report.Load(myStream); // report.RegisterData(tblData, tblData.TableName); // strRetVal = ExportFR3ToPDF(report); // status = PrintReportStatus.Sikeres; // } // } // else // { // status = PrintReportStatus.NincsTemplate; // } // return strRetVal; //} private static void GeneratePrintData(Report report, DataTable tblData) { report.RegisterData(tblData, tblData.TableName); report.Prepare(true); } private static string ExportFR3ToHTML(Report report) { report.ReportInfo.Author = "Kréta.NET Egységes Tanulmányi Rendszer"; report.PrintSettings.ShowDialog = false; FastReport.Export.Html.HTMLExport export = new FastReport.Export.Html.HTMLExport(); export.ShowProgress = false; System.IO.MemoryStream ms = new System.IO.MemoryStream(); StringBuilder build = new StringBuilder(); export.Export(report, ms); ms.Position = 0; ms.Seek(0, SeekOrigin.Begin); StreamReader rd = new StreamReader(ms); char[] bytes = new char[ms.Length]; rd.ReadBlock(bytes, 0, (int)ms.Length); StringBuilder sb = new StringBuilder(); sb.EnsureCapacity((int)ms.Length); sb.Append(bytes); return sb.ToString(); } /// /// Elkészült FR exportálása PDF formátumba /// /// ReportClass, amiből PDF -et szeretnénk készíteni /// public static byte[] ExportFR3ToPDF(Report report) { report.Prepare(true); System.IO.MemoryStream ms = new System.IO.MemoryStream(); FastReport.Export.Pdf.PDFExport export = new FastReport.Export.Pdf.PDFExport(); export.ShowProgress = false; export.EmbeddingFonts = true; report.ReportInfo.Author = "Kréta.NET Egységes Tanulmányi Rendszer"; report.PrintSettings.ShowDialog = false; export.Export(report, ms); ms.Position = 0; return ms.ToArray(); } /// /// Leellenőrzi, hogy a paraméterül kapott templateben lévő összes hivatkozás szerepel-e az adattábla oszlopai között /// /// /// /// Ha volt eltérés, akkor azok a hivatkozások, amellyek az adattáblában nem szerepelnek, de a templateben igen public static string CheckTableColumnNamesAndReportDatas(string template, DataTable table) { string tmp = template; List templatebenhivatkozasok = new List(); // Fejlécben lévő hivatkozások kiszedése int oeleje = tmp.IndexOf("", oeleje); // oszlop elem kiszedése xml-ből (vége) int neleje = -1; // a fejlcében lévő hivatkozások Name tagnak az eleje int nvege = -1; // a fejlcében lévő hivatkozások Name tagnak a vége string seged = ""; while (oeleje > -1) { ovege = tmp.IndexOf("/>", oeleje); seged = tmp.Substring(oeleje, ovege - oeleje + 2); tmp = tmp.Remove(0, ovege + 2); neleje = seged.IndexOf("Name="); if (neleje > -1) { nvege = seged.IndexOf('"', neleje + 7); templatebenhivatkozasok.Add(seged.Substring(neleje + 6, nvege - (neleje + 6)).ToUpper()); } oeleje = tmp.IndexOf("", oeleje); // tectobjoct elem kiszedése xml-ből (vége) neleje = -1; // a törzsben lévő hivatkozások Text tagnak az eleje nvege = -1; // a törzsben lévő hivatkozások Text tagnak a vége seged = ""; string seged2 = ""; while (oeleje > -1) { ovege = tmp.IndexOf("/>", oeleje); seged = tmp.Substring(oeleje, ovege - oeleje + 2); tmp = tmp.Remove(0, ovege + 2); neleje = seged.IndexOf("Text=\"["); if (neleje > -1) { nvege = seged.IndexOf(']', neleje + 8); seged2 = seged.Substring(neleje + 7, nvege - (neleje + 7)); neleje = seged2.IndexOf('.'); nvege = seged2.Length; if (neleje > -1) { templatebenhivatkozasok.Add(seged2.Substring(neleje + 1, nvege - (neleje + 1)).ToUpper()); } } oeleje = tmp.IndexOf(" columnnames = new List(); for (int i = 0; i < table.Columns.Count; i++) { columnnames.Add(table.Columns[i].ColumnName.ToUpper()); } string result = "Az adattáblában lévő oszlopok között nem szerepelnek a következő hivatkozások a reportban: "; List nemletezooszlophivatkozasok = new List(); foreach (string s in templatebenhivatkozasok) { if (!columnnames.Contains(s)) { nemletezooszlophivatkozasok.Add(s); } } if (nemletezooszlophivatkozasok.Count == 0) { result = ""; } else { result += string.Join(",", nemletezooszlophivatkozasok); } return result; } } }