public async Task<ActionResult> Index() { if (User.Identity.IsAuthenticated == false) return RedirectToAction("Login", "Account"); var curUser = await UserManager.FindByIdAsync(User.Identity.GetUserId()); var userPlaceID = curUser.PlaceId; List<SegmentSurvey> surveys = await ApiHelper.GetSegmentSurveysByPlaceID(userPlaceID); DashBoardViewModel data = DataTools.Get_X_Year_Road_Information(userPlaceID); ReportViewModel result = new ReportViewModel(surveys, data, curUser.PlaceName, ApiHelper.GetPlaceById(curUser.PlaceId).Result.Type); return View(result); }
public void GenerateExcel() { if (User.Identity.IsAuthenticated == false) return; var user = UserManager.FindByIdAsync(User.Identity.GetUserId()).Result; List<SegmentSurvey> surveys = ApiHelper.GetSegmentSurveysByPlaceID(user.PlaceId).Result; surveys.OrderBy(suv=>suv.RoadId); DashBoardViewModel X_Year_data = DataTools.Get_X_Year_Road_Information(user.PlaceId); ReportViewModel result = new ReportViewModel(surveys, X_Year_data, user.PlaceName, ApiHelper.GetPlaceById(user.PlaceId).Result.Type); using (var excelPackage = new ExcelPackage()) { // edit overall information for summary report excelPackage.Workbook.Properties.Author = "COPACES-CC Data Management System"; excelPackage.Workbook.Properties.Company = "Georgia Institute of Technology"; excelPackage.Workbook.Worksheets.Add("Summary Report"); excelPackage.Workbook.Worksheets.Add("Detailed Report"); var sheet1 = excelPackage.Workbook.Worksheets[1]; sheet1.Name = "Summary Report"; sheet1.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; sheet1.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center; sheet1.Cells.Style.Font.Size = 9; sheet1.Cells.Style.Font.Name = "Calibri"; // header, 2 rows sheet1.Cells["A1:I1"].Merge = true; sheet1.Cells["A1"].Value = "Segment Condition Summary for " + result.Jurisdiction + " " + result.PlaceType.ToUpper(); sheet1.Cells["A1"].Style.Font.Size = 13; sheet1.Cells["A1"].Style.Font.Bold = true; sheet1.Cells["A2:C2"].Merge = true; sheet1.Cells[2, 1].Value = "Total Road Mileage: " + result.ReportData.TotalLength/5280+" miles"; sheet1.Cells["G2:I2"].Merge = true; sheet1.Cells["G2"].Value = "Report generated on " + result.dateTime; // coloum names sheet1.Cells["A3"].Value = "District"; sheet1.Cells["B3"].Value = "Road ID"; sheet1.Cells["C3"].Value = "Road Name"; sheet1.Cells["D3"].Value = "Inventory ID"; sheet1.Cells["E3"].Value = "From"; sheet1.Cells["F3"].Value = "To"; sheet1.Cells["G3"].Value = "Survey Date"; sheet1.Cells["H3"].Value = "COPACES Rating"; sheet1.Cells["I3"].Value = "Windshield Score"; int row = 4; foreach (var item in surveys) { int col = 1; var road = ApiHelper.GetRoadById(item.RoadId).Result; var seg = ApiHelper.GetSegmentByRoadIdAndSequenceId(item.RoadId, item.SequenceId).Result; if (seg == null) continue; sheet1.Cells[row, col++].Value = road.District; sheet1.Cells[row, col++].Value = item.RoadId; sheet1.Cells[row, col++].Value = road.Name; sheet1.Cells[row, col++].Value = item.InventId; sheet1.Cells[row, col++].Value = seg.From; sheet1.Cells[row, col++].Value = seg.To; var datatime = (DateTime)item.RoadSurveyDate; sheet1.Cells[row, col++].Value = datatime.ToString("d"); if (item.CopacesRating != null) { sheet1.Cells[row, col++].Value = item.CopacesRating; } else { sheet1.Cells[row, col++].Value = ""; } if (item.IsWindshieldSurvey) { sheet1.Cells[row, col++].Value = item.WindshieldScore; } if (row % 4 == 0) { for (int i = 1; i < 10; i++) { sheet1.Cells[row, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; } } for (int i = 1; i < 10; i++) { sheet1.Cells[row, i].Style.Border.Right.Style = ExcelBorderStyle.Thin; } row++; } for (int i = 1; i < 10; i++) { sheet1.Cells[row, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; } // set columns style sheet1.Column(1).Width = 12; sheet1.Column(2).Width = 13.5; sheet1.Column(3).Width = 12.6; sheet1.Column(4).Width = 9.4; sheet1.Column(5).Width = 14; sheet1.Column(6).Width = 14; sheet1.Column(7).Width = 12; sheet1.Column(8).Width = 12.5; sheet1.Column(9).Width = 14; for (int i = 1; i < 10; i++) { sheet1.Cells[3, i].Style.Border.Right.Style = ExcelBorderStyle.Thin; sheet1.Cells[3, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; } var sheet2 = excelPackage.Workbook.Worksheets[2]; sheet2.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; sheet2.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center; sheet2.Cells.Style.Font.Size = 8; sheet2.Cells.Style.Font.Name = "Calibri"; sheet2.Cells["A1:AB1"].Merge = true; sheet2.Cells["A1"].Value = "Detailed Pavement Condition Survey for " + result.Jurisdiction + " " + result.PlaceType.ToUpper(); sheet2.Cells["A1"].Style.Font.Size = 13; sheet2.Cells["A1"].Style.Font.Bold = true; sheet2.Cells["K2:P2"].Merge = true; sheet2.Cells["K2"].Value = "Report Peroid: Lastest"; sheet2.Cells["A4:F4"].Merge = true; sheet2.Cells[4, 1].Value = "Total Road Mileage: " + String.Format("{0:0.00}", (result.ReportData.TotalLength / 5280)).ToString() + "miles" + " Total Survey Mileage: " + String.Format("{0:0.00}",(result.ReportData.Finished_X_yearLength[0] / 5280)).ToString() + " miles"; sheet2.Cells["W4:AB4"].Merge = true; sheet2.Cells["W4"].Value = "Report generated on " + result.dateTime; sheet2.Cells["A5:C5"].Merge = true; sheet2.Cells["A5"].Value = "Location"; sheet2.Cells["D5:E5"].Merge = true; sheet2.Cells["D5"].Value = "Rut Depth"; sheet2.Cells["F5:I5"].Merge = true; sheet2.Cells["F5"].Value = "Load Cracking"; sheet2.Cells["J5:K5"].Merge = true; sheet2.Cells["J5"].Value = "Block Cracking"; sheet2.Cells["L5:N5"].Merge = true; sheet2.Cells["L5"].Value = "Refection Cracking"; sheet2.Cells["O5:P5"].Merge = true; sheet2.Cells["O5"].Value = "Raveling"; sheet2.Cells["Q5:R5"].Merge = true; sheet2.Cells["Q5"].Value = "Edge Distress"; sheet2.Cells["S5:T5"].Merge = true; sheet2.Cells["S5"].Value = "Bleeding/ Flushing"; sheet2.Cells["U5:V5"].Merge = true; sheet2.Cells["U5"].Value = "Corrugation/ Pushing"; sheet2.Cells["W5:X5"].Merge = true; sheet2.Cells["W5"].Value = "Loss Pavement Section"; sheet2.Cells["Z5"].Value = "COPACES Rating"; sheet2.Cells["AA5"].Value = "Windshield Survey"; sheet2.Cells["AB5"].Value = "Windshield Score"; var coloum = 1; for (int i = 1; i < 29; i++) { sheet2.Cells[5, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; sheet2.Cells[5, i].Style.Border.Right.Style = ExcelBorderStyle.Thin; sheet2.Cells[5, i].Style.Border.Bottom.Style = ExcelBorderStyle.Thin; sheet2.Cells[5, i].Style.WrapText = true; sheet2.Cells[6, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; sheet2.Cells[6, i].Style.Border.Right.Style = ExcelBorderStyle.Thin; sheet2.Cells[6, i].Style.Border.Bottom.Style = ExcelBorderStyle.Thin; sheet2.Cells[6, i].Style.TextRotation = 90; } sheet2.Cells[6, coloum++].Value = "Road Name"; sheet2.Cells[6, coloum++].Value = "Survey Date"; sheet2.Cells[6, coloum++].Value = "Inventory Id"; sheet2.Cells[6, coloum++].Value = "Outside WP(1/8 in)"; sheet2.Cells[6, coloum++].Value = "Inside WP(1/8)"; sheet2.Cells[6, coloum++].Value = "Severity1"; sheet2.Cells[6, coloum++].Value = "Severity2"; sheet2.Cells[6, coloum++].Value = "Severity3"; sheet2.Cells[6, coloum++].Value = "Severity4"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "No. of Cracks"; sheet2.Cells[6, coloum++].Value = "Total Length"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "% of Sample"; sheet2.Cells[6, coloum++].Value = "Severity(1,2,3)"; sheet2.Cells[6, coloum++].Value = "Patches & Potholes"; row = 7; foreach (var item in surveys) { if ((row - 7) % 4 == 0) { for (int i = 1; i < 29; i++) { sheet2.Cells[row, i].Style.Border.Top.Style = ExcelBorderStyle.Thin; } } int col = 1; var roadNmae = DataTools.GetRoadNameById(item.RoadId); var seg = ApiHelper.GetSegmentByRoadIdAndSequenceId(item.RoadId, item.SequenceId).Result; if (seg == null) continue; sheet2.Cells[row, col].Style.Border.Left.Style = ExcelBorderStyle.Thin; sheet2.Cells[row, col++].Value = roadNmae; var date = (DateTime)item.SegSurveyDate; sheet2.Cells[row, col++].Value = date.ToString("d"); sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; sheet2.Cells[row, col++].Value = item.InventId; if (item.RutOutWp == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.RutOutWp.ToString(); } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.RutInWp == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.RutInWp.ToString(); } if (item.LoadLevel1 == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LoadLevel1; } if (item.LoadLevel2 == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LoadLevel2; } if (item.LoadLevel3 == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LoadLevel3; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.LoadLevel4 == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LoadLevel4; } if (item.BlockPercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.BlockPercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.BlockLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.BlockLevel; } if (item.ReflectNum == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.ReflectNum; } if (item.ReflectLength == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.ReflectLength; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.ReflectLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.ReflectLevel; } if (item.RavelPercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.RavelPercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.RavelLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.RavelLevel; } if (item.EdgePercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.EdgePercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.EdgeLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.EdgeLevel; } if (item.BleedPercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.BleedPercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.BleedLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.BleedLevel; } if (item.CorrugPercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.CorrugPercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.CorrugLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.CorrugLevel; } if (item.LossPavPercentage == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LossPavPercentage; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.LossPavLevel == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.LossPavLevel; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.PatchPotholeNum == null) { sheet2.Cells[row, col++].Value = 0; } else { sheet2.Cells[row, col++].Value = item.PatchPotholeNum; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.CopacesRating != null) { sheet2.Cells[row, col++].Value = item.CopacesRating; } else { sheet2.Cells[row, col++].Value = ""; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; if (item.IsWindshieldSurvey == true) { sheet2.Cells[row, col++].Value = "Yes"; } else { sheet2.Cells[row, col++].Value = "No"; } sheet2.Cells[row, col].Style.Border.Right.Style = ExcelBorderStyle.Thin; sheet2.Cells[row++, col].Value = item.WindshieldScore; } for (int k = 1; k < 29; k++) { sheet2.Cells[row, k].Style.Border.Top.Style = ExcelBorderStyle.Thin; } sheet2.Cells[6, 1].Style.Border.Left.Style = ExcelBorderStyle.Thin; sheet2.Cells[5, 1].Style.Border.Left.Style = ExcelBorderStyle.Thin; sheet2.Column(1).Width = 11; sheet2.Column(2).Width = 10; sheet2.Column(3).Width = 8; for (int j = 4; j < 21; j++) { sheet2.Column(j).Width = 3; } sheet2.Column(10).Width = 3.2; sheet2.Column(21).Width = 4; sheet2.Column(22).Width = 4; sheet2.Column(23).Width = 3.14; sheet2.Column(24).Width = 3.14; sheet2.Column(25).Width = 4; sheet2.Column(26).Width = 6.57; sheet2.Column(27).Width = 8.29; sheet2.Column(28).Width = 8.29; // save to memory stream; Response.ClearContent(); Response.BinaryWrite(excelPackage.GetAsByteArray()); Response.AddHeader("content-disposition", "attachment;filename=results.xlsx"); Response.ContentType = "application/excel"; Response.Flush(); Response.End(); } }
public FileStreamResult GeneratePDF() { if (User.Identity.IsAuthenticated == false) return null; // prepare data var user = UserManager.FindByIdAsync(User.Identity.GetUserId()).Result; List<SegmentSurvey> surveys = ApiHelper.GetSegmentSurveysByPlaceID(user.PlaceId).Result; surveys.OrderBy(suv => suv.RoadId); DashBoardViewModel X_Year_data = DataTools.Get_X_Year_Road_Information(user.PlaceId); ReportViewModel result = new ReportViewModel(surveys, X_Year_data, user.PlaceName, ApiHelper.GetPlaceById(user.PlaceId).Result.Type); // PDF initial setting Document document = new Document(PageSize.A4.Rotate(), 10, 10, 10, 10); MemoryStream stream = new MemoryStream(); // set fonts BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false); Font title_font = new Font(bfTimes, 10, Font.NORMAL, Color.BLACK); Font basefont = new Font(bfTimes, 8, Font.NORMAL, Color.BLACK); try { PdfWriter pdfWriter = PdfWriter.GetInstance(document, stream); pdfWriter.CloseStream = false; document.Open(); Paragraph title = new Paragraph("Segment Condition Summary for " + result.Jurisdiction + " " + result.PlaceType.ToUpper(), title_font); title.Alignment = Element.ALIGN_CENTER; document.Add(title); document.Add(new Paragraph(" Total Road Mileage: " + result.ReportData.TotalLength / 5280 + "miles " + " Report generated on " + result.dateTime, basefont)); document.Add(new Paragraph(" ")); /* SECTION 1 * FOR SUMMARY REPORT * * * * */ // Add table content blow: PdfPTable table = new PdfPTable(9); PdfPCell[] cols = new PdfPCell[9]; PdfPCell col1 = new PdfPCell(new Paragraph("District", basefont)); col1.BorderWidthTop = 0.3f; table.AddCell(col1); PdfPCell col2 = new PdfPCell(new Paragraph("Road ID", basefont)); col2.BorderWidthTop = 0.3f; table.AddCell(col2); PdfPCell col3 = new PdfPCell(new Paragraph("Road Name", basefont)); col3.BorderWidthTop = 0.3f; table.AddCell(col3); PdfPCell col4 = new PdfPCell(new Paragraph("Inventory ID", basefont)); col4.BorderWidthTop = 0.3f; table.AddCell(col4); PdfPCell col5 = new PdfPCell(new Paragraph("From", basefont)); col5.BorderWidthTop = 0.3f; table.AddCell(col5); PdfPCell col6 = new PdfPCell(new Paragraph("To", basefont)); col6.BorderWidthTop = 0.3f; table.AddCell(col6); PdfPCell col7 = new PdfPCell(new Paragraph("Survey Date", basefont)); col7.BorderWidthTop = 0.3f; table.AddCell(col7); PdfPCell col8 = new PdfPCell(new Paragraph("COPACES Rating", basefont)); col8.BorderWidthTop = 0.3f; table.AddCell(col8); PdfPCell col9 = new PdfPCell(new Paragraph("Windshield Score", basefont)); col9.BorderWidthTop = 0.3f; table.AddCell(col9); int row = 1; foreach (var item in surveys) { var road = ApiHelper.GetRoadById(item.RoadId).Result; var seg = ApiHelper.GetSegmentByRoadIdAndSequenceId(item.RoadId, item.SequenceId).Result; if (seg == null) continue; cols[0] = new PdfPCell(new Paragraph(road.District, basefont)); cols[1] = new PdfPCell(new Paragraph(item.RoadId, basefont)); cols[2] = new PdfPCell(new Paragraph(road.Name, basefont)); cols[3] = new PdfPCell(new Paragraph(item.InventId.ToString(), basefont)); cols[4] = new PdfPCell(new Paragraph(seg.From, basefont)); cols[5] = new PdfPCell(new Paragraph(seg.To, basefont)); var datatime = (DateTime)item.RoadSurveyDate; cols[6] = new PdfPCell(new Paragraph(datatime.ToString("d"), basefont)); if (item.CopacesRating!=null){ cols[7] = new PdfPCell(new Paragraph(item.CopacesRating.ToString(), basefont)); } else { cols[7] = new PdfPCell(new Paragraph("", basefont)); } if(item.IsWindshieldSurvey){ cols[8] = new PdfPCell(new Paragraph(item.WindshieldScore.ToString(), basefont)); } else{ cols[8] = new PdfPCell(new Paragraph("", basefont)); } for (int i = 0; i < cols.Length; i++) { cols[i].BorderWidthTop = 0; cols[i].BorderWidthBottom = 0; cols[i].BorderWidthLeft = 0.3f; cols[i].BorderWidthRight = 0.3f; } if (row % 4 == 0) { for (int i = 0; i < cols.Length; i++) { cols[i].BorderWidthTop = 0.3f; } } for (int i = 0; i < cols.Length; i++) { table.AddCell(cols[i]); } row++; } for (int i = 0; i < cols.Length; i++) { cols[i] = new PdfPCell(new Paragraph("", basefont)); cols[i].BorderWidth = 0; cols[i].BorderWidthTop = 0.3f; table.AddCell(cols[i]); } document.Add(table); /* SECTION 2 * FOR DETAILED REPORT * * */ document.NewPage(); Paragraph title2 = new Paragraph("Detailed Pavement Condition Survey for " + result.Jurisdiction + " " + result.PlaceType.ToUpper(), title_font); title2.Alignment = Element.ALIGN_CENTER; document.Add(title2); document.Add(new Paragraph(" Total Road Mileage: " + String.Format("{0:0.00}",result.ReportData.TotalLength / 5280) + "miles "+" Report generated on " + result.dateTime, basefont)); Paragraph reportTime = new Paragraph("Report Peroid: Last", basefont); reportTime.Alignment = Element.ALIGN_CENTER; document.Add(reportTime); document.Add(new Paragraph(" ")); PdfPTable Detailed_table = new PdfPTable(28); float[] widths = new float[] { 11f, 14.5f, 11f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f, 13f, 13f, 13f }; Detailed_table.SetWidths(widths); Detailed_table.HorizontalAlignment=Element.ALIGN_CENTER; row=1; PdfPCell Location = new PdfPCell(new Phrase("Location")); Location.Colspan=3; Detailed_table.AddCell(Location); PdfPCell RutDepth= new PdfPCell(new Phrase("Rut Depth")); RutDepth.Colspan=2; Detailed_table.AddCell(RutDepth); PdfPCell LoadCracking= new PdfPCell(new Phrase("Load Cracking")); LoadCracking.Colspan=4; Detailed_table.AddCell(LoadCracking); PdfPCell BlockCracking= new PdfPCell(new Phrase("Block Cracking ")); BlockCracking.Colspan=2; Detailed_table.AddCell(BlockCracking); PdfPCell RefectionCracking= new PdfPCell(new Phrase(" Refection Cracking")); RefectionCracking.Colspan=3; Detailed_table.AddCell(RefectionCracking); PdfPCell Raveling= new PdfPCell(new Phrase("Raveling")); Raveling.Colspan=2; Detailed_table.AddCell(Raveling); PdfPCell EdgeDistress= new PdfPCell(new Phrase("Edge Distress")); EdgeDistress.Colspan=2; Detailed_table.AddCell(EdgeDistress); PdfPCell Bleeding= new PdfPCell(new Phrase(" Bleeding/ Flushing")); Bleeding.Colspan=2; Detailed_table.AddCell(Bleeding); PdfPCell Corrugation= new PdfPCell(new Phrase("Corrugation/Pushing")); Corrugation.Colspan=2; Detailed_table.AddCell(Corrugation); PdfPCell LossPavement= new PdfPCell(new Phrase("Loss Pavement")); LossPavement.Colspan=2; Detailed_table.AddCell(LossPavement); PdfPCell gap= new PdfPCell(new Phrase(" ")); Detailed_table.AddCell(gap); PdfPCell COPACESRating= new PdfPCell(new Phrase("COPACES Rating")); Detailed_table.AddCell(COPACESRating); PdfPCell WindshieldSurvey= new PdfPCell(new Phrase("Windshield Survey")); Detailed_table.AddCell(WindshieldSurvey); PdfPCell WindshieldScore= new PdfPCell(new Phrase("Windshield Score")); Detailed_table.AddCell(WindshieldSurvey); // third line PdfPCell RoadName = new PdfPCell(new Paragraph("Road Name")); RoadName.Rotation = 90; Detailed_table.AddCell(RoadName); PdfPCell SurveyDate= new PdfPCell(new Paragraph("Survey Date")); SurveyDate.Rotation = 90; Detailed_table.AddCell(SurveyDate); PdfPCell InventoryID = new PdfPCell(new Paragraph("Inventory ID")); InventoryID.Rotation = 90; Detailed_table.AddCell(InventoryID); PdfPCell OutsideWP= new PdfPCell(new Paragraph("Outside WP(1/8 in)")); OutsideWP.Rotation = 90; Detailed_table.AddCell(OutsideWP); PdfPCell InsideWP=new PdfPCell(new Paragraph("Inside WP(1/8 in)")); InsideWP.Rotation = 90; Detailed_table.AddCell(InsideWP); PdfPCell Severity1=new PdfPCell(new Paragraph("Severity1")); Severity1.Rotation = 90; Detailed_table.AddCell(Severity1); PdfPCell Severity2 = new PdfPCell(new Paragraph("Severity2")); Severity2.Rotation = 90; Detailed_table.AddCell(Severity2); PdfPCell Severity3 = new PdfPCell(new Paragraph("Severity3")); Severity3.Rotation = 90; Detailed_table.AddCell(Severity3); PdfPCell Severity4 = new PdfPCell(new Paragraph("Severity4")); Severity4.Rotation = 90; Detailed_table.AddCell(Severity4); PdfPCell Sample = new PdfPCell(new Paragraph("% of Sample")); Sample.Rotation = 90; Detailed_table.AddCell(Sample); PdfPCell Severity123 = new PdfPCell(new Paragraph("Severity(1,2,3)")); Severity123.Rotation = 90; Detailed_table.AddCell(Severity123); PdfPCell NoCracks = new PdfPCell(new Paragraph("No. Of Cracks")); NoCracks.Rotation = 90; Detailed_table.AddCell(NoCracks); PdfPCell TotalLength = new PdfPCell(new Paragraph("Total Length")); TotalLength.Rotation = 90; Detailed_table.AddCell(TotalLength); Detailed_table.AddCell(Severity123); Detailed_table.AddCell(Sample); Detailed_table.AddCell(Severity123); Detailed_table.AddCell(Sample); Detailed_table.AddCell(Severity123); Detailed_table.AddCell(Sample); Detailed_table.AddCell(Severity123); Detailed_table.AddCell(Sample); Detailed_table.AddCell(Severity123); Detailed_table.AddCell(Sample); Detailed_table.AddCell(Severity123); PdfPCell Patches = new PdfPCell(new Paragraph("Patches & Potholes")); Patches.Rotation = 90; Detailed_table.AddCell(Patches); Detailed_table.AddCell(gap); Detailed_table.AddCell(gap); Detailed_table.AddCell(gap); row = 7; cols= new PdfPCell[28]; foreach (var item in surveys) { //var road = ApiHelper.GetRoadById(item.RoadId).Result; var roadName = DataTools.GetRoadNameById(item.RoadId); var seg = ApiHelper.GetSegmentByRoadIdAndSequenceId(item.RoadId, item.SequenceId).Result; if (seg == null) continue; cols[0] = new PdfPCell(new Paragraph(roadName)); var date = (DateTime)item.SegSurveyDate; cols[1] = new PdfPCell(new Paragraph(date.ToString("d"))); cols[2] = new PdfPCell(new Paragraph(item.InventId.ToString())); cols[3] = item.RutOutWp == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.RutOutWp.ToString())); cols[4] = item.RutInWp == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.RutInWp.ToString())); cols[5] = item.LoadLevel1 == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LoadLevel1.ToString())); cols[6] = item.LoadLevel2 == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LoadLevel2.ToString())); cols[7] = item.LoadLevel3 == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LoadLevel3.ToString())); cols[8] = item.LoadLevel4 == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LoadLevel4.ToString())); cols[9] = item.BlockPercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.BlockPercentage.ToString())); cols[10] = item.BlockLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.BlockLevel.ToString())); cols[11] = item.ReflectNum == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.ReflectNum.ToString())); cols[12] = item.ReflectLength == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.ReflectLength.ToString())); cols[13] = item.ReflectLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.ReflectLevel.ToString())); cols[14] = item.RavelPercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.RavelPercentage.ToString())); cols[15] = item.RavelLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.RavelLevel.ToString())); cols[16] = item.EdgePercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.EdgePercentage.ToString())); cols[17] = item.EdgeLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.BleedPercentage.ToString())); cols[18] = item.BleedPercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.BleedPercentage.ToString())); cols[19] = item.BleedLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.BleedLevel.ToString())); cols[20] = item.CorrugPercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.CorrugPercentage.ToString())); cols[21] = item.CorrugLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.CorrugLevel.ToString())); cols[22] = item.LossPavPercentage == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LossPavPercentage.ToString())); cols[23] = item.LossPavLevel == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.LossPavLevel.ToString())); cols[24] = item.PatchPotholeNum == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.PatchPotholeNum.ToString())); cols[25] = item.CopacesRating == null ? new PdfPCell(new Paragraph("0")) : new PdfPCell(new Paragraph(item.CopacesRating.ToString())); cols[26] = item.IsWindshieldSurvey == true ? new PdfPCell(new Paragraph("Yes")) : new PdfPCell(new Paragraph("No")); cols[27] = (item.WindshieldScore == null ) ? new PdfPCell(new Paragraph("")) : new PdfPCell(new Paragraph(item.WindshieldScore.ToString())); for (int i = 0; i < cols.Length; i++) { cols[i].BorderWidth = 0; cols[i].HorizontalAlignment = Element.ALIGN_CENTER; } cols[2].BorderWidthRight = 0.3f; cols[4].BorderWidthRight = 0.3f; cols[8].BorderWidthRight = 0.3f; cols[10].BorderWidthRight = 0.3f; cols[13].BorderWidthRight = 0.3f; cols[15].BorderWidthRight = 0.3f; cols[17].BorderWidthRight = 0.3f; cols[19].BorderWidthRight = 0.3f; cols[26].BorderWidthRight = 0.3f; cols[25].BorderWidthRight = 0.3f; cols[24].BorderWidthRight = 0.3f; cols[23].BorderWidthRight = 0.3f; cols[21].BorderWidthRight = 0.3f; cols[0].BorderWidthLeft = 0.3f; cols[cols.Length - 1].BorderWidthRight = 0.3f; if ((row - 7) % 4 == 0) { for (int i = 0; i < cols.Length; i++) { cols[i].BorderWidthTop = 0.3f; } } for (int i = 0; i < cols.Length; i++) { Detailed_table.AddCell(cols[i]); } row++; } for (int i = 0; i < cols.Length; i++) { cols[i] = new PdfPCell(new Paragraph("", basefont)); cols[i].BorderWidth = 0; cols[i].BorderWidthTop = 0.3f; Detailed_table.AddCell(cols[i]); } document.Add(Detailed_table); } catch (DocumentException de) { Console.Error.WriteLine(de.Message); } catch (IOException ioe) { Console.Error.WriteLine(ioe.Message); } document.Close(); stream.Flush(); //Always catches me out stream.Position = 0; //Not sure if this is required return File(stream, "application/pdf", "Report.pdf"); }