private void AddTable(string tableName, Dictionary<string, List<Dictionary<string, object>>> items, ref pdfDocument doc) { var page = doc.addPage(predefinedPageSize.csA4Page); page.addText(tableName, 40, page.height - 30, doc.getFontReference(predefinedFont.csHelvetica), 8); var table = new pdfTable(doc, 1, pdfColor.Black, 2) { coordX = 40, coordY = page.height - 40 }; //tableName == "Mat 2a" || tableName == "Mat 7" if ( (items.Count == 1 && items.First().Value.Count < 1) || documentCertficate[tableName.Replace(" ", string.Empty)] == "No Credit") { table.tableHeader.addColumn(255); table.tableHeader.addColumn(255); if (items.Count > 0) { var nameRow = table.createRow(); nameRow[0].addText(items.First().Key); table.addRow(nameRow); } var footerRow = table.createRow(); footerRow[0].addText("Score", doc.getFontReference(predefinedFont.csHelveticaBold), 10); footerRow[1].addParagraph(documentCertficate[tableName.Replace(" ", string.Empty)], 10, predefinedAlignment.csLeft); table.addRow(footerRow); page.addTable(table); return; } var columnCount = items.First().Value != null && items.First().Value.Any() ? items.First().Value.First().Keys.Count + 1 : 2; for (var i = 0; i < columnCount; i++) { table.tableHeader.addColumn((int)Math.Floor((decimal)(510 / columnCount))); } foreach (var item in items) { if (item.Value.Count > 0) { var row = table.createRow(); row[0].addParagraph(item.Key, doc.getFontReference(predefinedFont.csHelveticaBold), 10, 10, 255, predefinedAlignment.csLeft); var i = 1; foreach (var key in item.Value[0].Keys) { row[i].addParagraph(key, doc.getFontReference(predefinedFont.csHelveticaBold), 10, 10, 255, predefinedAlignment.csLeft); i++; } table.addRow(row); foreach (var elementGroup in item.Value) { row = table.createRow(); row[0].addText((item.Value.IndexOf(elementGroup) + 1).ToString(CultureInfo.InvariantCulture)); i = 1; foreach (var kvp in elementGroup) { if (kvp.Key == "Green Guide Rating") { var point = (decimal)kvp.Value; string grade; if (point > 2) { grade = "A+"; } else if (point > 1) { grade = "A"; } else if (point > (decimal)0.5) { grade = "B"; } else if (point > (decimal)0.25) { grade = "C"; } else if (point > 0) { grade = "D"; } else { grade = "E"; } row[i].addText(grade); } else if (kvp.Key == "Tier Level") { if (kvp.Value.ToString().Contains("Excellent")) { row[i].addText("Excellent"); } else if (kvp.Value.ToString().Contains("Very Good")) { row[i].addText("Very Good"); } else if (kvp.Value.ToString().Contains("Good")) { row[i].addText("Good"); } else if (kvp.Value.ToString().Contains("Certified")) { row[i].addText("Certified EMS"); } else if (kvp.Value.ToString().Contains("Verified")) { row[i].addText("Verified"); } else { row[i].addText(string.Empty); } } else { row[i].addParagraph(kvp.Value != null ? kvp.Value.ToString() : string.Empty, 10, predefinedAlignment.csLeft); } i++; } table.addRow(row); } } } if (documentCertficate.ContainsKey(tableName.Replace(" ", string.Empty))) { var footerRow = table.createRow(); footerRow[columnCount - 2].addText("Score", doc.getFontReference(predefinedFont.csHelveticaBold), 10); footerRow[columnCount - 1].addParagraph(documentCertficate[tableName.Replace(" ", string.Empty)], 10, predefinedAlignment.csLeft); table.addRow(footerRow); } page.addTable(table); }
private void CreatePdf(string pdfFilePath) { var pdfDoc = new pdfDocument("BREEAM Materials Report", ""); var coverPage = pdfDoc.addPage(predefinedPageSize.csA4Page); coverPage.addText("BREEAM Materials", 40, coverPage.height - 140, pdfDoc.getFontReference(predefinedFont.csHelveticaBold), 20); coverPage.addText(string.Format("Project Name: {0}", projectName), 40, coverPage.height - 165, pdfDoc.getFontReference(predefinedFont.csHelvetica), 10); coverPage.addText(string.Format("Project Type: {0}", projectType), 40, coverPage.height - 180, pdfDoc.getFontReference(predefinedFont.csHelvetica), 10); coverPage.addText(string.Format("Building Type: {0}", buildingType), 40, coverPage.height - 195, pdfDoc.getFontReference(predefinedFont.csHelvetica), 10); coverPage.addText(string.Format("Project Phase: {0}", projectPhase), 40, coverPage.height - 210, pdfDoc.getFontReference(predefinedFont.csHelvetica), 10); if (documentCertficate.ContainsKey("Mat1")) { var mat1Items = new Dictionary<string, List<Dictionary<string, object>>>(); var gr = externalWalls.GroupBy(ew => ew.ElementNumber); var mat1ExternalWallGroup = gr .Select( ew => new Dictionary<string, object>() { {"Name", ew.First().Name}, {"Element Number", ew.Key}, {"Area", ew.Sum(w => w.NetSideArea).ToString("N")}, {"Green Guide Rating", ew.First().Point} }); if (mat1ExternalWallGroup.Any()) { mat1Items.Add("External Wall", mat1ExternalWallGroup.ToList()); } var mat1CurtainWallGroup = curtainWalls.GroupBy(ew => ew.ElementNumber) .Select( ew => new Dictionary<string, object>() { {"Name", ew.First().Name}, {"Element Number", ew.Key}, {"Area", ew.Sum(w => w.GrossSideArea).ToString("N")}, {"Green Guide Rating", ew.First().Point} }); if (mat1CurtainWallGroup.Any()) { mat1Items.Add("Curtain Wall", mat1CurtainWallGroup.ToList()); } var mat1WindowGroup = windows.GroupBy(ew => ew.ElementNumber) .Select( w => new Dictionary<string, object>() { {"Name", w.First().Name}, {"Element Number", w.Key}, {"Area", w.Sum(wi => wi.NetArea).ToString("N")}, {"Green Guide Rating", w.First().Point} }); if (mat1WindowGroup.Any()) { mat1Items.Add("Window", mat1WindowGroup.ToList()); } var mat1FloorSlabsGroup = slabs.Where(s => s.SlabType == SlabType.Floor).GroupBy(s => s.ElementNumber) .Select( s => new Dictionary<string, object>() { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(sl => sl.NetArea).ToString("N")}, {"Green Guide Rating", s.First().Point} }); if (mat1FloorSlabsGroup.Any()) { mat1Items.Add("Upper Floor", mat1FloorSlabsGroup.ToList()); } var mat1RoofSlabGroup = slabs.Where(s => s.SlabType == SlabType.Roof).GroupBy(s => s.ElementNumber) .Select( s => new Dictionary<string, object>() { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(sl => sl.NetArea).ToString("N")}, {"Green Guide Rating", s.First().Point} }); if (mat1RoofSlabGroup.Any()) { mat1Items.Add("Roof", mat1RoofSlabGroup.ToList()); } if (!mat1Items.Any()) { mat1Items.Add("Material Specification", new List<Dictionary<string, object>>()); } AddTable("Mat 1", mat1Items, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat2a")) { var mat2aItems = new Dictionary<string, List<Dictionary<string, object>>>(); mat2aItems.Add("Natural Boundary", new List<Dictionary<string, object>>()); AddTable("Mat 2a", mat2aItems, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat2b")) { var mat2BItems = new Dictionary<string, List<Dictionary<string, object>>>(); var mat2BBoundaryWallGroup = boundaryWalls.GroupBy(bw => bw.ElementNumber) .Select( bw => new Dictionary<string, object>() { {"Name", bw.First().Name}, {"Element Number", bw.Key}, {"Area", bw.Sum(w => w.NetSideArea).ToString("N")}, {"Green Guide Rating", bw.First().Point} }); if (mat2BBoundaryWallGroup.Any()) { mat2BItems.Add("Boundary Protection", mat2BBoundaryWallGroup.ToList()); } var mat2BLandingSlabGroup = slabs.Where(s => s.SlabType == SlabType.Landing).GroupBy(s => s.ElementNumber) .Select( s => new Dictionary<string, object>() { {"Name", s.First().Name}, {"ElementNumber", s.Key}, {"Area", s.Sum(sl => sl.NetArea).ToString("N")}, {"Green Guide Rating", s.First().Point} }); if (mat2BLandingSlabGroup.Any()) { mat2BItems.Add("Hard Landscaping", mat2BLandingSlabGroup.ToList()); } if (!mat2BItems.Any()) { mat2BItems.Add("Hard Landscaping and Boundary Protection", new List<Dictionary<string, object>>()); } AddTable("Mat 2b", mat2BItems, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat3")) { var mat3Items = new Dictionary<string, List<Dictionary<string, object>>>(); if (documentCertficate["Mat3"] == "No Credit") { mat3Items.Add("Façade Reuse", new List<Dictionary<string, object>>()); } else { var mat3ExternalWallGroup = externalWalls.Where(ew => ew.FacadeReuse).GroupBy(ew => ew.ElementNumber) .Select( ew => new Dictionary<string, object>() { {"Name", ew.First().Name}, {"ElementNumber", ew.Key}, {"Area", ew.Sum(w => w.NetSideArea).ToString("N")}, {"Percentage", (ew.Sum(w => w.NetSideArea)/externalWalls.Sum(w => w.NetSideArea)).ToString("P")} }); if (mat3ExternalWallGroup.Any()) { mat3Items.Add("Reused External Wall", mat3ExternalWallGroup.ToList()); } var mat3CurtainWallGroup = curtainWalls.Where(cw => cw.FacadeReuse).GroupBy(ew => ew.ElementNumber) .Select( cw => new Dictionary<string, object>() { {"Name", cw.First().Name}, {"ElementNumber", cw.Key}, {"Area", cw.Sum(w => w.GrossSideArea).ToString("N")}, {"Percentage", (cw.Sum(w => w.GrossSideArea)/curtainWalls.Sum(w => w.GrossSideArea)).ToString("P")} }); if (mat3CurtainWallGroup.Any()) { mat3Items.Add("Reused Curtain Wall", mat3CurtainWallGroup.ToList()); } var mat3WindowGroup = windows.Where(w => w.FacadeReuse).GroupBy(w => w.ElementNumber) .Select( w => new Dictionary<string, object>() { {"Name", w.First().Name}, {"ElementNumber", w.Key}, {"Area", w.Sum(wi => wi.NetArea).ToString("N")}, {"Percentage", (w.Sum(wi => wi.NetArea)/windows.Sum(wi => wi.NetArea)).ToString("P")} }); if (mat3WindowGroup.Any()) { mat3Items.Add("Reused Window", mat3WindowGroup.ToList()); } if (!mat3Items.Any()) { mat3Items.Add("Façade Reuse", new List<Dictionary<string, object>>()); } } AddTable("Mat 3", mat3Items, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat4")) { var mat4Items = new Dictionary<string, List<Dictionary<string, object>>>(); if (documentCertficate["Mat4"] == "No Credit") { mat4Items.Add("Structure Reuse", new List<Dictionary<string, object>>()); } else { var mat4ExternalWallGroup = externalWalls.Where(ew => ew.LoadBearing && ew.StructureReuse).GroupBy(ew => ew.ElementNumber) .Select( ew => new Dictionary<string, object>() { {"Name", ew.First().Name}, {"ElementNumber", ew.Key}, {"Volume", ew.Sum(w => w.NetVolume).ToString("N")}, {"Percentage", (ew.Sum(w => w.NetVolume)/externalWalls.Where(w => w.LoadBearing).Sum(w => w.NetVolume)).ToString("P")} }); if (mat4ExternalWallGroup.Any()) { mat4Items.Add("Reused External Wall", mat4ExternalWallGroup.ToList()); } var mat4InteriorWallGroup = interiorWalls.Where(iw => iw.LoadBearing && iw.StructureReuse).GroupBy(iw => iw.ElementNumber) .Select( cw => new Dictionary<string, object>() { {"Name", cw.First().Name}, {"ElementNumber", cw.Key}, {"Volume", cw.Sum(w => w.NetVolume).ToString("N")}, {"Percentage", (cw.Sum(w => w.NetVolume)/interiorWalls.Where(w => w.LoadBearing).Sum(w => w.NetVolume)).ToString("P")} }); if (mat4InteriorWallGroup.Any()) { mat4Items.Add("Reused Interior Wall", mat4InteriorWallGroup.ToList()); } var mat4SlabsGroup = slabs.Where(s => s.SlabType == SlabType.Floor && s.LoadBearing && s.StructureReuse).GroupBy(s => s.ElementNumber) .Select( s => new Dictionary<string, object>() { {"Name", s.First().Name}, {"ElementNumber", s.Key}, {"Volume", s.Sum(w => w.NetVolume).ToString("N")}, {"Percentage", (s.Sum(w => w.NetVolume)/slabs.Where(w => w.SlabType == SlabType.Floor && w.LoadBearing).Sum(w => w.NetVolume)).ToString("P")} }); if (mat4SlabsGroup.Any()) { mat4Items.Add("Reused Slab", mat4SlabsGroup.ToList()); } var mat4ColumnGroup = columns.Where(c => c.StructureReuse).GroupBy(c => c.ElementNumber) .Select( c => new Dictionary<string, object>() { {"Name", c.First().Name}, {"ElementNumber", c.Key}, {"Volume", c.Sum(w => w.NetVolume).ToString("N")}, {"Percentage", (c.Sum(co => co.NetVolume)/columns.Sum(co => co.NetVolume)).ToString("P")} }); if (mat4ColumnGroup.Any()) { mat4Items.Add("Reused Column", mat4ColumnGroup.ToList()); } var mat4BeamGroup = beams.Where(b => b.StructureReuse).GroupBy(b => b.ElementNumber) .Select( b => new Dictionary<string, object>() { {"Name", b.First().Name}, {"ElementNumber", b.Key}, {"Volume", b.Sum(w => w.NetVolume).ToString("N")}, {"Percentage", (b.Sum(be => be.NetVolume)/columns.Sum(be => be.NetVolume)).ToString("P")} }); if (mat4BeamGroup.Any()) { mat4Items.Add("Reused Beam", mat4BeamGroup.ToList()); } if (!mat4Items.Any()) { mat4Items.Add("Structure Reuse", new List<Dictionary<string, object>>()); } } AddTable("Mat 4", mat4Items, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat5")) { var mat5Items = new Dictionary<string, List<Dictionary<string, object>>>(); var mat5ExternalWallGroup = externalWalls.Where(ew => ew.Rsm).GroupBy(ew => ew.ElementNumber) .Select( ew => new Dictionary<string, object>() { {"Name", ew.First().Name}, {"Element Number", ew.Key}, {"Area", ew.Sum(w => w.NetSideArea).ToString("N")}, {"Percentage", (ew.Sum(w => w.NetSideArea)/externalWalls.Sum(w => w.NetSideArea)).ToString("P")}, {"Tier Level", ew.First().RsmText} }); if (mat5ExternalWallGroup.Any()) { mat5Items.Add("Responsibly Sourced Walls", mat5ExternalWallGroup.ToList()); } var mat5InteriorWallGroup = interiorWalls.Where(iw => iw.Rsm).GroupBy(iw => iw.ElementNumber) .Select( iw => new Dictionary<string, object>() { {"Name", iw.First().Name}, {"Element Number", iw.Key}, {"Area", iw.Sum(w => w.GrossSideArea).ToString("N")}, {"Percentage", (iw.Sum(w => w.GrossSideArea)/interiorWalls.Sum(w => w.GrossSideArea)).ToString("P")}, {"Tier Level", iw.First().RsmText} }); if (mat5InteriorWallGroup.Any()) { mat5Items.Add("Responsibly Sourced Walls", mat5InteriorWallGroup.ToList()); } var mat5RoofGroup = slabs.Where(s => s.Rsm && s.SlabType == SlabType.Roof) .GroupBy(s => s.ElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, {"Percentage", (s.Sum(w => w.NetArea)/slabs.Where(sl => sl.SlabType == SlabType.Roof).Sum(w => w.NetArea)).ToString("P")}, {"Tier Level", s.First().RsmText} }); if (mat5RoofGroup.Any()) { mat5Items.Add("Responsibly Sourced Roof", mat5RoofGroup.ToList()); } var mat5FloorGroup = slabs.Where(s => s.Rsm && s.SlabType == SlabType.Floor) .GroupBy(s => s.ElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, {"Percentage", (s.Sum(w => w.NetArea)/slabs.Where(sl => sl.SlabType == SlabType.Floor).Sum(w => w.NetArea)).ToString("P")}, {"Tier Level", s.First().RsmText} }); if (mat5FloorGroup.Any()) { mat5Items.Add("Responsibly Sourced Floor", mat5FloorGroup.ToList()); } var mat5BaselabGroup = slabs.Where(s => s.Rsm && s.SlabType == SlabType.BaseSlab) .GroupBy(s => s.ElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, {"Percentage", (s.Sum(w => w.NetArea)/slabs.Where(sl => sl.SlabType == SlabType.BaseSlab).Sum(w => w.NetArea)).ToString("P")}, {"Tier Level", s.First().RsmText} }); if (mat5BaselabGroup.Any()) { mat5Items.Add("Responsibly Sourced Foundation", mat5BaselabGroup.ToList()); } var mat5ColumnGroup = columns.Where(c => c.Rsm).GroupBy(c => c.ElementNumber).Select(c => new Dictionary<string, object> { {"Name", c.First().Name}, {"Element Number", c.Key}, {"Area", c.Sum(w => w.GrossSurfaceArea).ToString("N")}, {"Percentage", (c.Sum(w => w.GrossSurfaceArea)/columns.Sum(w => w.GrossSurfaceArea)).ToString("P")}, {"Tier Level", c.First().RsmText} }); if (mat5ColumnGroup.Any()) { mat5Items.Add("Responsibly Sourced Column", mat5ColumnGroup.ToList()); } var mat5BeamGroup = beams.Where(c => c.Rsm).GroupBy(c => c.ElementNumber).Select(c => new Dictionary<string, object> { {"Name", c.First().Name}, {"Element Number", c.Key}, {"Area", c.Sum(w => w.GrossSurfaceArea).ToString("N")}, {"Percentage", (c.Sum(w => w.GrossSurfaceArea)/beams.Sum(w => w.GrossSurfaceArea)).ToString("P")}, {"Tier Level", c.First().RsmText} }); if (mat5BeamGroup.Any()) { mat5Items.Add("Responsibly Sourced Beam", mat5BeamGroup.ToList()); } var mat5StairGroup = stairs.Where(s => s.Rsm).GroupBy(s => s.ElementNumber).Select(s => new Dictionary<string, object> { {"Name", s.First().Name}, {"Element Number", s.Key}, {"Area", s.Sum(sf => sf.Area).ToString("N")}, {"Percentage", (s.Sum(sf => sf.Area)/stairs.Sum(sf => sf.Area)).ToString("P")}, {"Tier Level", s.First().RsmText} }); if (mat5StairGroup.Any()) { mat5Items.Add("Responsibly Sourced Stair", mat5StairGroup.ToList()); } if (!mat5Items.Any()) { mat5Items.Add("Responsibly Sourced Materials", new List<Dictionary<string, object>>()); } AddTable("Mat 5", mat5Items, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat6a")) { var mat6AItems = new Dictionary<string, List<Dictionary<string, object>>>(); var mat6AExternalWallGroup = externalWalls.Where(ew => ew.InsulationLayerThickness > 0) .GroupBy(ew => ew.InsulationMaterialElementNumber) .Select(ew => new Dictionary<string, object> { {"Name", ew.First().InsulationMaterialName}, {"Element Number", ew.Key}, {"Area", ew.Sum(w => w.NetSideArea).ToString("N")}, //{"Percentage", (ew.Sum(w => w.NetSideArea) / externalWalls.Sum(w => w.NetSideArea)).ToString("P")}, {"Green Guide Rating", ew.First().InsulationLayerMaterialPoint} }); mat6AItems.Add("External Wall Insulation", mat6AExternalWallGroup.ToList()); var mat6ABaseSlabGroup = slabs.Where(s => s.InsulationLayerThickness > 0 && s.SlabType == SlabType.BaseSlab) .GroupBy(s => s.InsulationMaterialElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().InsulationMaterialName}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, //{"Percentage", (s.Sum(w => w.NetArea) / slabs.Where(sl => sl.SlabType == SlabType.BaseSlab).Sum(w => w.NetArea)).ToString("P")}, {"Green Guide Rating", s.First().InsulationLayerMaterialPoint} }); mat6AItems.Add("Ground Insulation", mat6ABaseSlabGroup.ToList()); var mat6ARoofSlabGroup = slabs.Where(s => s.InsulationLayerThickness > 0 && s.SlabType == SlabType.Roof) .GroupBy(s => s.InsulationMaterialElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().InsulationMaterialName}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, //{"Percentage", (s.Sum(w => w.NetArea) / slabs.Where(sl => sl.SlabType == SlabType.Roof).Sum(w => w.NetArea)).ToString("P")}, {"Green Guide Rating", s.First().InsulationLayerMaterialPoint} }); mat6AItems.Add("Roof Insulation", mat6ARoofSlabGroup.ToList()); if (!mat6AItems.Any()) { mat6AItems.Add("Insulation", new List<Dictionary<string, object>>()); } AddTable("Mat 6a", mat6AItems, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat6b")) { var mat6BItems = new Dictionary<string, List<Dictionary<string, object>>>(); var mat6BExternalWallGroup = externalWalls.Where(ew => ew.InsulationLayerThickness > 0 && ew.InsulationMaterialName.Contains("RSM")) .GroupBy(ew => ew.InsulationMaterialElementNumber) .Select(ew => new Dictionary<string, object> { {"Name", ew.Single().InsulationMaterialName}, {"Element Number", ew.Key}, {"Area", ew.Sum(w => w.NetSideArea).ToString("N")}, {"Percentage", (ew.Sum(w => w.NetSideArea) / externalWalls.Sum(w => w.NetSideArea)).ToString("P")}, {"Green Guide Rating", ew.Single().InsulationLayerMaterialPoint} }); if (mat6BExternalWallGroup.Any()) { mat6BItems.Add("Responsibly Sourced External Wall Insulation", mat6BExternalWallGroup.ToList()); } var mat6BBaseSlabGroup = slabs.Where(s => s.InsulationLayerThickness > 0 && s.SlabType == SlabType.BaseSlab && s.InsulationMaterialName.Contains("RSM")) .GroupBy(s => s.InsulationMaterialElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().InsulationMaterialName}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, {"Percentage", (s.Sum(w => w.NetArea) / slabs.Where(sl => sl.SlabType == SlabType.BaseSlab).Sum(w => w.NetArea)).ToString("P")}, {"Green Guide Rating", s.First().InsulationLayerMaterialPoint} }); if (mat6BBaseSlabGroup.Any()) { mat6BItems.Add("Responsibly Sourced Ground Insulation", mat6BBaseSlabGroup.ToList()); } var mat6BRoofSlabGroup = slabs.Where(s => s.InsulationLayerThickness > 0 && s.SlabType == SlabType.Roof && s.InsulationMaterialName.Contains("RSM")) .GroupBy(s => s.InsulationMaterialElementNumber) .Select(s => new Dictionary<string, object> { {"Name", s.First().InsulationMaterialName}, {"Element Number", s.Key}, {"Area", s.Sum(w => w.NetArea).ToString("N")}, {"Percentage", (s.Sum(w => w.NetArea) / slabs.Where(sl => sl.SlabType == SlabType.Roof).Sum(w => w.NetArea)).ToString("P")}, {"Green Guide Rating", s.First().InsulationLayerMaterialPoint} }); if (mat6BRoofSlabGroup.Any()) { mat6BItems.Add("Responsibly Sourced Roof Insulation", mat6BRoofSlabGroup.ToList()); } if (!mat6BItems.Any()) { mat6BItems.Add("Responsibly Sourced Insulation", new List<Dictionary<string, object>>()); } AddTable("Mat 6b", mat6BItems, ref pdfDoc); } if (documentCertficate.ContainsKey("Mat7")) { var mat7Items = new Dictionary<string, List<Dictionary<string, object>>>(); mat7Items.Add("Designing for Robustness", new List<Dictionary<string, object>>()); AddTable("Mat 7", mat7Items, ref pdfDoc); } pdfDoc.createPDF(pdfFilePath); pdfDoc = null; }
private pdfPage getNewPage(ref double yPos) { yPos = topMargin; if (document == null) { document = new pdfDocument(myInterface.GetCompetitions()[0].Name,"Allberg Winshooter"); font = document.getFontReference(predefinedFont.csTimes); fontCompetitionHeader = document.getFontReference(predefinedFont.csTimesBold); fontHeader = document.getFontReference(predefinedFont.csTimesBold); } //double xsize = 210/conversionPixelsToMM; // A4 = 210*297mm (35,3*35,3 mm) //double ysize = 297/conversionPixelsToMM; bottomMargin = (int)((297-20)); //pdfPage myPage = document.addPage((int)ysize, (int)xsize); pdfPage myPage = document.addPage(predefinedPageSize.csA4Page); sharpPDF.Fonts.pdfAbstractFont headerFont = document.getFontReference(predefinedFont.csTimes); // Add copyright text addText(myPage, "WinShooter", leftMargin, (int)((bottomMargin+3)), headerFont, 10); //addText(myPage, "©" + settings.PrinterSettings.Copyright, // leftMargin+155, (int)((bottomMargin+3)), headerFont, 10); // Add club logo Image image = settings.Logo; int logoHeight = image.Height; int logoWidth = image.Width; calculateLogoSize(image, 60, 200, out logoHeight, out logoWidth); int logoX = myPage.width - 20 - logoWidth; int logoY = myPage.height - 20 - logoHeight; try { sharpPDF.Elements.pdfImageReference imageRef = document.getImageReference("logo"); myPage.addImage(imageRef, logoX, logoY, logoHeight, logoWidth); } catch (sharpPDF.Exceptions.pdfImageNotLoadedException) { document.addImageReference((System.Drawing.Image)image, "logo"); sharpPDF.Elements.pdfImageReference imageRef = document.getImageReference("logo"); myPage.addImage(imageRef, logoX, logoY, logoHeight, logoWidth); } // Add Winshooter logo image = settings.GetWinshooterLogo(1000, 1000); logoHeight = image.Height; logoWidth = image.Width; calculateLogoSize(image, 50, 200, out logoHeight, out logoWidth); logoX = myPage.width - 20 - logoWidth; logoY = 10; try { sharpPDF.Elements.pdfImageReference imageRef = document.getImageReference("WinShooterLogo"); myPage.addImage(imageRef, logoX, logoY, logoHeight, logoWidth); } catch (sharpPDF.Exceptions.pdfImageNotLoadedException) { document.addImageReference((System.Drawing.Image)image, "WinShooterLogo"); sharpPDF.Elements.pdfImageReference imageRef = document.getImageReference("WinShooterLogo"); myPage.addImage(imageRef, logoX, logoY, logoHeight, logoWidth); } // TextStart = 20 + conversionPixelsToMM * logoHeight; return myPage; }