public static void GenerateIssuerReport(Case Case, List <Card> Cards) { RadFixedDocument doc = new RadFixedDocument(); RadFixedDocumentEditor editor = new RadFixedDocumentEditor(doc); if (Cards.Count > 0) { TimeZoneInfo CurrentTimeZone = TimeZoneInfo.FindSystemTimeZoneById(Case.Client.TimeZoneID); string CurrentTime = DateTimeOffset.UtcNow.ToOffset(CurrentTimeZone.GetUtcOffset(DateTimeOffset.UtcNow)).ToString("ddd MMM d yyyy h:mm:ss tt zzz"); string strTemp = string.Empty; //var fontAwesomeIcon = BaseFont.CreateFont(Server.MapPath(Url.Content("~/Resources/fonts/fontawesome-webfont.ttf")), BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //Font fontAwe = new Font(fontAwesomeIcon, 8); var pTable1 = new Table(); pTable1.LayoutType = TableLayoutType.FixedWidth; int _priorProviderID = -1; string _priorProviderName = "!!!!"; double dbBalanceTotal = 0.0; int i = 0; string strEncryptionString = "0Fnvwk0qzbn6sQ+qUbGDyz0MmpBt5e3="; var pTableCards = new Table(/*new float[] { 150f, 200f, 70f, 160f, 120f }*/); pTableCards.LayoutType = TableLayoutType.FixedWidth; //var pTableCards = new PdfPTable(new float[] { 150f, 200f, 70f, 160f, 120f }); string BinList = ""; foreach (Card c in Cards) { pTable1.LayoutType = TableLayoutType.FixedWidth; var rowpTableCards = pTableCards.Rows.AddTableRow(); var rowpTable1 = pTable1.Rows.AddTableRow(); #region Get BinBase / IAFCI Info -- used based on which data is available: priority is Provider Info, Bin Base, IAFCI var BinBase = c.BinBase; var IAFCI = new IAFCI(); var Override = new BinBaseOverride(); if (BinBase == null) { BinBase = new BinBase(); } if (IAFCI == null) { IAFCI = new IAFCI(); } if (Override == null) { Override = new BinBaseOverride(); } #endregion #region Determine Providers Name: priority is Provider Info, Bin Base, IAFCI //Determine Provider Name string ProviderName = ""; if (c.Provider != null) { ProviderName = (c.RetailerName != null ? c.RetailerName : c.Provider.Name); } else { ProviderName = (string.IsNullOrEmpty(Override.IssuingOrg) ? null : Override.IssuingOrg) ?? (string.IsNullOrEmpty(IAFCI.IssuerName) ? null : IAFCI.IssuerName) ?? (string.IsNullOrEmpty(BinBase.IssuingOrg) ? null : BinBase.IssuingOrg) ?? "Unavailable"; } #endregion Block block; #region See if iteration has a new provider (each provider gets a new heading) if (ProviderName != _priorProviderName) { #region New Provider, close out previous table if there was one (add summary, add page break) if (i > 0) { //try //{ // ((Table)pTable1.Rows[5].Cells[0]).Rows[0].GetCells()[1].Phrase[0] = new Phrase(BinList, fArial14); // pTable1.Rows[5].Cells[1]. //} //catch (Exception) { } ////blank row rowpTableCards = pTableCards.Rows.AddTableRow(); var pCellClosing = rowpTableCards.Cells.AddTableCell(); block = pCellClosing.Blocks.AddBlock(); block.InsertText("Balance Inquiry Amount:"); //total row pCellClosing.Padding = new Thickness(0f, 0f, 0f, 5f); pCellClosing.ColumnSpan = 3; block.HorizontalAlignment = HorizontalAlignment.Left; string Balance = ""; if (_priorProviderID == 0) { Balance = "N/A"; } else { Balance = dbBalanceTotal.ToString("c"); } pCellClosing = rowpTableCards.Cells.AddTableCell(); block = pCellClosing.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(Balance); //pCellClosing = new PdfPCell(new Phrase(Balance, fArialBold14)); pCellClosing.Padding = new Thickness(0f, 0f, 0f, 5f); pCellClosing.ColumnSpan = 2; //pCellClosing.Border = 0; block.HorizontalAlignment = HorizontalAlignment.Right; //pTableCards.AddCell(pCellClosing); //add cards table to document rowpTable1 = pTable1.Rows.AddTableRow(); pCellClosing = rowpTable1.Cells.AddTableCell(); pCellClosing.Blocks.Add(pTableCards); //pCellClosing = new PdfPCell(pTableCards); pCellClosing.Padding = new Thickness(0); //pTable1.AddCell(pCellClosing); //Insert Page Break editor.InsertTable(pTable1); editor.InsertPageBreak(); pTable1 = new Table(); pTable1.LayoutType = TableLayoutType.FixedWidth; } #endregion //Reset Values pTableCards = new Table();//5 column pTableCards.LayoutType = TableLayoutType.FixedWidth; dbBalanceTotal = 0; #region Provider Header (Transaction Type, Balance Inquiry, Client ID, User ID, Case #, Timestamp) rowpTable1 = pTable1.Rows.AddTableRow(); var pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 16f; block.InsertText(Case.ClientGroup != null ? Case.ClientGroup.Name : ""); block.InsertLineBreak(); block.InsertText(c.Case.Client.Name); block.InsertLineBreak(); block.InsertText((c.Case.Client.Address1 + " " + c.Case.Client.Address2).Trim()); block.InsertLineBreak(); block.InsertText(c.Case.Client.City + ", " + c.Case.Client.State + ", " + c.Case.Client.Zipcode); pCell.Padding = new Thickness(0f, 0f, 0f, 10f); //pCell.Border = 0; block.HorizontalAlignment = HorizontalAlignment.Center; //pTable1.AddCell(pCell); //provider title rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 18; block.InsertText(ProviderName); //pCell = new PdfPCell(new Phrase(ProviderName, fArialBold16)); pCell.Padding = new Thickness(0f, 0f, 15f, 20f); //pCell.Border = 0; block.HorizontalAlignment = HorizontalAlignment.Center; //pTable1.AddCell(pCell); pTable1.Rows.AddTableRow(); var pTable2 = new Table();//2 column pTable2.LayoutType = TableLayoutType.FixedWidth; var rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Transaction Type:"); //pCell = new PdfPCell(new Phrase("Transaction Type:", fArial14)); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; //pCell.Border = 0; //pTable2.AddCell(pCell); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Balance Inquiry"); //pCell = new PdfPCell(new Phrase("Balance Inquiry", fArial14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTable2.AddCell(pCell); //blank row rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.InsertText(""); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.InsertText(""); //pCell = new PdfPCell(new Phrase("")); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTable2.AddCell(pCell); //pTable2.AddCell(pCell); if (c.Case.ClientGroup != null) { rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Group:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; //pCell.Border = 0; //pTable2.AddCell(pCell); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(c.Case.ClientGroup.Name); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTable2.AddCell(pCell); } rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Client:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; //pCell.Border = 0; //pTable2.AddCell(pCell); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(c.Case.Client.Login.ToString()); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTable2.AddCell(pCell); rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("User:"******"Case #:"); pCell.Padding = new Thickness(0f, 0f, 15f, 15f); block.HorizontalAlignment = HorizontalAlignment.Left; //pCell.Border = 0; //pTable2.AddCell(pCell); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(c.Case.CaseNumber ?? ""); pCell.Padding = new Thickness(0f, 0f, 0f, 15f); //pCell.Border = 0; //pTable2.AddCell(pCell); //add the list table to the main table rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); pCell.Blocks.Add(pTable2); pCell.Padding = new Thickness(0f); //main content - paragraph 4 header rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(CurrentTime); pCell.Padding = new Thickness(0f, 0f, 0f, 15f); #endregion #region Issuer Details (Bin, Card Type, Card Level, Isuser Name) pTable2 = new Table();//2 column pTable2.LayoutType = TableLayoutType.FixedWidth; //Provider Details rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15; block.InsertText("Issuer Details:"); //pCell = new PdfPCell(new Phrase("Issuer Details:", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Bin Number:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); BinList = c.BinBaseBIN != null ? c.BinBaseBIN : ""; block.TextProperties.FontSize = 14; block.InsertText(c.BinBaseBIN ?? ""); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); if (BinBase != null && BinBase.BIN != null && BinBase.BIN.Length > 0) { rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Card Type:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(BinBase.TypeOfCard); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText("Card Level:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14; block.InsertText(BinBase.Category); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); } rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText("Issuer Name:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(ProviderName); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText("Issuer Phone:"); pCell.Padding = new Thickness(0f, 0f, 15f, 5f); block.HorizontalAlignment = HorizontalAlignment.Left; string phoneNumber = ""; if (Override != null && Override.BIN != null && Override.BIN.Length > 0 && Override.IssuingOrgPhone != null && Override.IssuingOrgPhone.Length > 0) { phoneNumber = Override.IssuingOrgPhone; } else if (IAFCI != null && IAFCI.BIN != null && IAFCI.BIN.Length > 0 && IAFCI.PhoneNumber != null && IAFCI.PhoneNumber.Length > 0) { phoneNumber = IAFCI.PhoneNumber; } else if (BinBase != null && BinBase.BIN != null && BinBase.BIN.Length > 0 && BinBase.IssuingOrgPhone != null && BinBase.IssuingOrgPhone.Length > 0) { phoneNumber = BinBase.IssuingOrgPhone; } else if (c.Provider != null) { phoneNumber = (c.Provider.SubpoenaPhone != null ? "Subpoena: " + c.Provider.SubpoenaPhone : ""); phoneNumber += phoneNumber.Length > 0 && c.Provider.CorporatePhone != null ? ", " : ""; phoneNumber += c.Provider.CorporatePhone != null && c.Provider.CorporatePhone.Length > 0 ? "Corporate: " + c.Provider.CorporatePhone : ""; } pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(phoneNumber); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //add the list table to the main table rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); pCell.Blocks.Add(pTable2); //pCell = new PdfPCell(pTable2); pCell.Padding = new Thickness(0f); //blank row rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.InsertText(""); //pCell = new PdfPCell(new Phrase(" ")); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); #endregion #region Issuer Address, Issuer Contact //new table, two columns pTable2 = new Table(); pTable2.LayoutType = TableLayoutType.FixedWidth; //pTable2.WidthPercentage = 100; rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Issuer Address:"); //pCell = new PdfPCell(new Phrase("Issuer Address:", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 5f, 5f); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Issuer Contact:"); //pCell = new PdfPCell(new Phrase("Issuer Contact:", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); string ProviderAddress = "N/A"; if (c.Provider == null && IAFCI.PhysicalAddress != null) { ProviderAddress = IAFCI.PhysicalAddress.Replace("<br>", "\r\n").Replace("<br/>", "\r\n").Replace("<br />", "\r\n").Replace("<BR>", "\r\n").Replace("<BR/>", "\r\n").Replace("<BR />", "\r\n"); } rowpTable2 = pTable2.Rows.AddTableRow(); pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(ProviderAddress); //pCell = new PdfPCell(new Phrase(ProviderAddress, fArial14)); pCell.Padding = new Thickness(0f, 0f, 5f, 5f); string PrincipalContact = "N/A"; if (c.Provider == null && IAFCI.Address != null) { PrincipalContact = IAFCI.Address.Replace("<br>", "\r\n").Replace("<br/>", "\r\n").Replace("<br />", "\r\n").Replace("<BR>", "\r\n").Replace("<BR/>", "\r\n").Replace("<BR />", "\r\n"); } else if (c.Provider != null) { PrincipalContact = (c.Provider.SubpoenaAttention != null ? c.Provider.SubpoenaAttention + "\r\n" : "") + (c.Provider.SubpoenaName != null ? c.Provider.SubpoenaName + "\r\n" : "") + (c.Provider.SubpoenaAddress1 != null ? c.Provider.SubpoenaAddress1 + "\r\n" : "") + (c.Provider.SubpoenaAddress2 != null ? c.Provider.SubpoenaAddress2 + "\r\n" : "") + (c.Provider.SubpoenaCity != null ? c.Provider.SubpoenaCity + ", " + c.Provider.SubpoenaState + " " + c.Provider.SubpoenaZip + "\r\n" : ""); } pCell = rowpTable2.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(PrincipalContact); //pCell = new PdfPCell(new Phrase(PrincipalContact, fArial14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTable2.AddCell(pCell); rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); pCell.Blocks.Add(pTable2); //pCell = new PdfPCell(pTable2); pCell.Padding = new Thickness(0f); //blank row rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.InsertText(""); //pCell = new PdfPCell(new Phrase(" ")); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); #endregion #region Card Details Table Header //header rowpTable1 = pTable1.Rows.AddTableRow(); pCell = rowpTable1.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Card Details"); pCell.Borders = new TableCellBorders(null, null, null, new Border(1f, new RgbColor(0, 0, 0))); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //cards table rowpTableCards = pTableCards.Rows.AddTableRow(); pCell = rowpTableCards.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText(new FontFamily("Arial"), FontStyles.Normal, FontWeights.Bold, "Issuer"); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); pCell = rowpTableCards.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Card Number"); //pCell = new PdfPCell(new Phrase("Card Number", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTableCards.AddCell(pCell); pCell = rowpTableCards.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Cloned"); //pCell = new PdfPCell(new Phrase("Cloned", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTableCards.AddCell(pCell); pCell = rowpTableCards.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Name"); //pCell = new PdfPCell(new Phrase("Name", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); //pCell.Border = 0; //pTableCards.AddCell(pCell); pCell = rowpTableCards.Cells.AddTableCell(); block = pCell.Blocks.AddBlock(); block.TextProperties.FontSize = 15f; block.InsertText("Balance"); //pCell = new PdfPCell(new Phrase("Balance", fArialBold14)); pCell.Padding = new Thickness(0f, 0f, 0f, 5f); block.HorizontalAlignment = HorizontalAlignment.Right; #endregion } #endregion #region Add Card to Cards Table (row) if (c.BinBaseBIN != null && c.BinBaseBIN.Length > 0 && !BinList.Contains(c.BinBaseBIN)) { BinList += ", " + c.BinBaseBIN; } //Add Card //card number string IssuerName = ProviderName; if (ProviderName.ToLower().Equals("unavailable") && c.IssuerName != null && c.IssuerName.Length > 0) { IssuerName = c.IssuerName; } rowpTableCards = pTableCards.Rows.AddTableRow(); var pCellCard = rowpTableCards.Cells.AddTableCell(); block = pCellCard.Blocks.AddBlock(); block.InsertText(IssuerName); pCellCard.Padding = new Thickness(0f, 0f, 0f, 5f); string CardNumber = ""; CardNumber = c.CardNumberMasked; pCellCard = rowpTableCards.Cells.AddTableCell(); block = pCellCard.Blocks.AddBlock(); block.InsertText(CardNumber); if (c.EntryMethod != null && c.ClonedCardParentCardId == null && c.EntryMethod.Equals("Swipe")) { block.InsertText(" [M]"); } else if (c.EntryMethod != null && c.EntryMethod.Equals("Upload")) { block.InsertText(" [U]"); } else if (c.EntryMethod != null && c.EntryMethod.Equals("Chip")) { block.InsertText(" [C]"); } else { block.InsertText(" [K]"); } pCellCard.Padding = new Thickness(0f, 0f, 0f, 5f); //pTableCards.AddCell(pCellCard); pCellCard = rowpTableCards.Cells.AddTableCell(); block = pCellCard.Blocks.AddBlock(); block.InsertText(c.ClonedCardParentCardId != null || c.ClonedCards.Count > 0 ? "[CL]" : ""); pCellCard.Padding = new Thickness(0f, 0f, 0f, 5f); //pCellCard.Border = 0; //pTableCards.AddCell(pCellCard); pCellCard = rowpTableCards.Cells.AddTableCell(); block = pCellCard.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(c.CardName ?? ""); //pCellCard = new PdfPCell(new Phrase(c.CardName, fArial14)); pCellCard.Padding = new Thickness(0f, 0f, 0f, 5f); double dbTemp = 0.0; string Amount; if (double.TryParse(c.OriginalBalance.ToString(), out dbTemp)) { Amount = dbTemp.ToString("c"); } else { Amount = "N/A"; } dbBalanceTotal += dbTemp; pCellCard = rowpTableCards.Cells.AddTableCell(); block = pCellCard.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(Amount); //pCellCard = new PdfPCell(new Phrase(Amount, fArial14)); pCellCard.Padding = new Thickness(0f, 0f, 0f, 5f); block.HorizontalAlignment = HorizontalAlignment.Right; #endregion //Set Current Provider _priorProviderID = -1; if (c.Provider != null) { _priorProviderID = c.ProviderID.Value; } _priorProviderName = ProviderName; i++; } #region Close out Cards Table if (i > 0) { ////blank row var rowpTableCards = pTableCards.Rows.AddTableRow(); var pCellClosing = rowpTableCards.Cells.AddTableCell(); var block = pCellClosing.Blocks.AddBlock(); block.InsertText(""); //total row rowpTableCards = pTableCards.Rows.AddTableRow(); pCellClosing = rowpTableCards.Cells.AddTableCell(); block = pCellClosing.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText("Balance Inquiry Amount:"); //pCellClosing = new PdfPCell(new Phrase("Balance Inquiry Amount:", fArialBold14)); pCellClosing.Padding = new Thickness(0f, 0f, 0f, 5f); pCellClosing.ColumnSpan = 3; block.HorizontalAlignment = HorizontalAlignment.Left; //pTableCards.AddCell(pCellClosing); string Balance = ""; if (_priorProviderID == 0) { Balance = "N/A"; } else { Balance = dbBalanceTotal.ToString("c"); } pCellClosing = rowpTableCards.Cells.AddTableCell(); block = pCellClosing.Blocks.AddBlock(); block.TextProperties.FontSize = 14f; block.InsertText(Balance); //pCellClosing = new PdfPCell(new Phrase(Balance, fArialBold14)); pCellClosing.Padding = new Thickness(0f, 0f, 0f, 5f); block.HorizontalAlignment = HorizontalAlignment.Right; //add cards table to document var rowpTable1 = pTable1.Rows.AddTableRow(); pCellClosing = rowpTable1.Cells.AddTableCell(); pCellClosing.Blocks.Add(pTableCards); pCellClosing.Padding = new Thickness(0); //Insert Page Break editor.InsertTable(pTable1); editor.InsertPageBreak(); pTable1 = new Table(); pTable1.LayoutType = TableLayoutType.FixedWidth; } #endregion string fileName = "CardIssuerReport_"; fileName = fileName + Case.CaseNumber.Replace(" ", "") + "_" + TimeZoneInfo.ConvertTimeFromUtc(DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")).ToString("MMddyyyy") + ".pdf"; PdfFormatProvider provider = new PdfFormatProvider(); using (var stream = new FileStream(fileName, FileMode.OpenOrCreate)) { provider.Export(doc, stream); } } }
public static void GenerateImageReport(Case Case, List <Card> Cards) { BINLookup binLookup = new BINLookup(); MemoryStream ms = new MemoryStream(); TimeZoneInfo CurrentTimeZone = TimeZoneInfo.FindSystemTimeZoneById(Case.Client.TimeZoneID); string CurrentTime = DateTimeOffset.UtcNow.ToOffset(CurrentTimeZone.GetUtcOffset(DateTimeOffset.UtcNow)).ToString("ddd MMM d yyyy h:mm:ss tt zzz"); Document document = new Document(PageSize.LETTER.Rotate(), 5f, 5f, 30f, 20f); PdfWriter writer = PdfWriter.GetInstance(document, ms); string strTemp = string.Empty; document.Open(); Font fArial16 = FontFactory.GetFont("ARIAL", 16f); Font fArialBold16 = FontFactory.GetFont("ARIAL", 16f, Font.BOLD); Font fArial14 = FontFactory.GetFont("ARIAL", 12f); Font fArialBold14 = FontFactory.GetFont("ARIAL", 12f, Font.BOLD); Font fArialItalic14 = FontFactory.GetFont("ARIAL", 12f, Font.ITALIC); Font fArial10 = FontFactory.GetFont("ARIAL", 9f); Font fArialBold10 = FontFactory.GetFont("ARIAL", 9f, Font.BOLD); PdfPTable pTable1 = new PdfPTable(1); int i = 0; PdfPTable pTableCards = new PdfPTable(new float[] { 300f, 100f }); foreach (Card c in Cards) { #region Get BinBase / IAFCI Info -- used based on which data is available: priority is Provider Info, Bin Base, IAFCI var BinBase = c.BinBase; var IAFCI = new IAFCI(); var Override = new BinBaseOverride(); if (BinBase == null) { BinBase = new BinBase(); } if (IAFCI == null) { IAFCI = new IAFCI(); } if (Override == null) { Override = new BinBaseOverride(); } #endregion #region See if iteration has a new provider (each provider gets a new heading) if (i == 0 || i % 4 == 0) { //Reset Values pTableCards = new PdfPTable(new float[] { 175f, 180f, 200f, 200f }); #region Provider Header (Transaction Type, Balance Inquiry, Client ID, User ID, Case #, Timestamp) PdfPCell pCell = new PdfPCell(new Phrase( (Case.ClientGroup != null ? Case.ClientGroup.Name + "\r\n" : "") + c.Case.Client.Name + "\r\n" + (c.Case.Client.Address1 + " " + c.Case.Client.Address2).Trim() + "\r\n" + c.Case.Client.City + ", " + c.Case.Client.State + ", " + c.Case.Client.Zipcode + "\r\n" , fArialBold14)); pCell.Padding = 0f; pCell.PaddingBottom = 10f; pCell.Border = 0; pCell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; pTable1.AddCell(pCell); //provider title pCell = new PdfPCell(new Phrase("Card Image Report", fArialBold16)); pCell.Padding = 0f; pCell.PaddingBottom = 12f; pCell.Border = 0; pCell.HorizontalAlignment = PdfPCell.ALIGN_CENTER; pTable1.AddCell(pCell); PdfPTable pTable2 = new PdfPTable(new float[] { 45f, 490f }); pCell = new PdfPCell(new Phrase("Case #:", fArial14)); pCell.Padding = 0f; pCell.PaddingBottom = 5f; pCell.PaddingRight = 5f; pCell.HorizontalAlignment = PdfPCell.ALIGN_LEFT; pCell.Border = 0; pTable2.AddCell(pCell); pCell = new PdfPCell(new Phrase(c.Case.CaseNumber + " Total Cards: " + ReportHelpers.GetCardCount(Cards), fArial14)); pCell.Padding = 0f; pCell.PaddingBottom = 5f; pCell.Border = 0; pTable2.AddCell(pCell); //add the list table to the main table pCell = new PdfPCell(pTable2); pCell.Padding = 0f; pCell.Border = 0; pTable1.AddCell(pCell); //main content - paragraph 4 header pCell = new PdfPCell(new Phrase(CurrentTime, fArial14)); pCell.Padding = 0f; pCell.PaddingBottom = 8f; pCell.Border = 0; pTable1.AddCell(pCell); #endregion #region Issuer Details (Bin, Card Type, Card Level, Isuser Name) pTable2 = new PdfPTable(new float[] { 200f, 490f }); //add the list table to the main table pCell = new PdfPCell(pTable2); pCell.Padding = 0f; pCell.Border = 0; pTable1.AddCell(pCell); #endregion //blank row //pCell = new PdfPCell(new Phrase(" ")); //pCell.PaddingBottom = 5f; //pCell.Border = 0; //pTable1.AddCell(pCell); #region Card Details Table Header //header //pCell = new PdfPCell(new Phrase("Report Details")); //pCell.BorderColorBottom = BaseColor.BLACK; //pCell.BorderWidthBottom = 2f; //pCell.BorderWidthLeft = 0; //pCell.BorderWidthRight = 0; //pCell.BorderWidthTop = 0; //pCell.PaddingBottom = 5f; //pTable1.AddCell(pCell); //cards table pCell = new PdfPCell(new Phrase("Images", fArialBold14)); pCell.Padding = 5f; pCell.PaddingBottom = 5f; pCell.Border = 0; pCell.BorderColorBottom = BaseColor.BLACK; pCell.BorderWidthBottom = 2f; pCell.BorderWidthLeft = 2f; pCell.BorderWidthTop = 2f; pTableCards.AddCell(pCell); pCell = new PdfPCell(new Phrase("", fArialBold14)); pCell.Padding = 0f; pCell.PaddingBottom = 5f; pCell.PaddingRight = 5f; pCell.Border = 0; pCell.BorderColorBottom = BaseColor.BLACK; pCell.BorderWidthBottom = 2f; pCell.BorderWidthRight = 2f; pCell.BorderWidthTop = 2f; pTableCards.AddCell(pCell); pCell = new PdfPCell(new Phrase("Printed Details", fArialBold14)); pCell.Padding = 5f; pCell.PaddingBottom = 5f; pCell.Border = 0; pCell.BorderColorBottom = BaseColor.BLACK; pCell.BorderWidthBottom = 2f; pCell.BorderWidthRight = 2f; pCell.BorderWidthTop = 2f; pTableCards.AddCell(pCell); pCell = new PdfPCell(new Phrase("Magstripe Details", fArialBold14)); pCell.Padding = 5f; pCell.PaddingBottom = 5f; pCell.Border = 0; pCell.BorderColorBottom = BaseColor.BLACK; pCell.BorderWidthBottom = 2f; pCell.BorderWidthRight = 2f; pCell.BorderWidthTop = 2f; pTableCards.AddCell(pCell); #endregion } #endregion #region Add Card to Cards Table (row) //Add Card //determine provider name //Determine Provider Name string ProviderName = ""; if (c.Provider != null) { ProviderName = (c.RetailerName != null ? c.RetailerName : c.Provider.Name); } else { ProviderName = (string.IsNullOrEmpty(Override.IssuingOrg) ? null : Override.IssuingOrg) ?? (string.IsNullOrEmpty(IAFCI.IssuerName) ? null : IAFCI.IssuerName) ?? (string.IsNullOrEmpty(BinBase.IssuingOrg) ? null : BinBase.IssuingOrg) ?? "Unavailable"; } //get images var images = c.CardImages; if (images.Count > 0) { try { var imageString = images[0].ImageData; imageString = FormatBase64String(imageString); byte[] bytes = Convert.FromBase64String(imageString); using (MemoryStream inStream = new MemoryStream(bytes)) { using (MemoryStream outStream = new MemoryStream()) { // Initialize the ImageFactory using the overload to preserve EXIF metadata. using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true)) { // Load, resize, set the format and quality and save an image. imageFactory.Load(inStream) .Format(new PngFormat { Quality = 70 }) .Save(outStream); } var streamImage = System.Drawing.Image.FromStream(outStream); var image = iTextSharp.text.Image.GetInstance(streamImage, System.Drawing.Imaging.ImageFormat.Png); image.ScaleToFit(124f, 110f); image.SpacingAfter = 3f; PdfPCell pCellCard = new PdfPCell(image); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 1f; pCellCard.BorderWidthRight = 0; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } } } catch (Exception e) { PdfPCell pCellCard = new PdfPCell(new Phrase("", fArial10)); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 0; pCellCard.BorderWidthRight = 1f; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } } else { PdfPCell pCellCard = new PdfPCell(new Phrase("", fArial10)); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 1f; pCellCard.BorderWidthRight = 0; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } if (images.Count > 1) { try { var imageString2 = images[1].ImageData; imageString2 = FormatBase64String(imageString2); byte[] bytes = Convert.FromBase64String(imageString2); using (MemoryStream inStream = new MemoryStream(bytes)) { using (MemoryStream outStream = new MemoryStream()) { // Initialize the ImageFactory using the overload to preserve EXIF metadata. using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true)) { // Load, resize, set the format and quality and save an image. imageFactory.Load(inStream) .Format(new PngFormat { Quality = 70 }) .Save(outStream); } var streamImage = System.Drawing.Image.FromStream(outStream); var image = iTextSharp.text.Image.GetInstance(streamImage, System.Drawing.Imaging.ImageFormat.Png); image.ScaleToFit(124f, 110f); image.SpacingAfter = 3f; PdfPCell pCellCard = new PdfPCell(image); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 0; pCellCard.BorderWidthRight = 1f; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } } } catch (Exception e) { PdfPCell pCellCard = new PdfPCell(new Phrase("", fArial10)); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 0; pCellCard.BorderWidthRight = 1f; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } } else { PdfPCell pCellCard = new PdfPCell(new Phrase("", fArial10)); pCellCard.BorderColorBottom = BaseColor.BLACK; pCellCard.BorderWidthBottom = 1f; pCellCard.BorderWidthLeft = 0; pCellCard.BorderWidthRight = 1f; pCellCard.BorderWidthTop = 0; pCellCard.Padding = 5f; pTableCards.AddCell(pCellCard); } Phrase cardNum = new Phrase(""); if ((c.ClonedCardParent == null && !c.MissingPrintedInfo) || c.ClonedCardParent != null) { cardNum.Add(new Chunk("Number: ", fArialBold10)); cardNum.Add(new Chunk(c.CardNumberMasked, fArial10)); cardNum.Add(new Chunk("\r\nName: ", fArialBold10)); cardNum.Add(new Chunk(c.CardName, fArial10)); cardNum.Add(new Chunk("\r\nExp: ", fArialBold10)); cardNum.Add(new Chunk(c.CardExpiration, fArial10)); cardNum.Add(new Chunk("\r\nIssuer: ", fArialBold10)); string IssuerName = ProviderName; if (ProviderName.ToLower().Equals("unavailable") && c.IssuerName != null && c.IssuerName.Length > 0) { IssuerName = c.IssuerName; } cardNum.Add(new Chunk(IssuerName, fArial10)); } PdfPCell pCardCell = new PdfPCell(cardNum); pCardCell.BorderColorBottom = BaseColor.BLACK; pCardCell.BorderWidthBottom = 1f; pCardCell.BorderWidthLeft = 0; pCardCell.BorderWidthRight = 1f; pCardCell.BorderWidthTop = 0; pCardCell.Padding = 5f; pCardCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; pTableCards.AddCell(pCardCell); cardNum = new Phrase(""); if (c.ClonedCardParent != null) { if (c.ClonedCardParent.TrackData != null) { string cardTrackUnenc = c.ClonedCardParent.TrackData.Trim(); CCTrackParser trackParser = new CCTrackParser(); var trackData = trackParser.Parse(cardTrackUnenc); if (trackData != null && trackData.TrackOne != null) { cardNum.Add(new Chunk("T1 Number: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.MaskedPAN, fArial10)); cardNum.Add(new Chunk("\r\nT1 Name: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.CardHolderName, fArial10)); cardNum.Add(new Chunk("\r\nT1 Exp: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.ExpirationDate, fArial10)); cardNum.Add(new Chunk("\r\nT1 Issuer: ", fArialBold10)); //lookup issuer baesd on this track bin (from PAN) var bin1 = binLookup.LookupCardMetaData(c.BinBase); cardNum.Add(new Chunk(bin1.IssuerName, fArial10)); } else { cardNum.Add(new Chunk("T1 Number: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Name: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Exp: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Issuer: ", fArialBold10)); } //space cardNum.Add(new Chunk("\r\n", fArial10)); if (trackData != null && trackData.TrackTwo != null) { cardNum.Add(new Chunk("\r\nT2 Number: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackTwo.MaskedPAN, fArial10)); cardNum.Add(new Chunk("\r\nT2 Name: ", fArialBold10)); cardNum.Add(new Chunk("", fArial10)); cardNum.Add(new Chunk("\r\nT2 Exp: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackTwo.ExpirationDate, fArial10)); cardNum.Add(new Chunk("\r\nT2 Issuer: ", fArialBold10)); //lookup issuer baesd on this track bin (from PAN) var bin2 = binLookup.LookupCardMetaData(c.BinBase); cardNum.Add(new Chunk(bin2.IssuerName, fArial10)); } else { cardNum.Add(new Chunk("\r\nT2 Number: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Name: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Exp: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Issuer: ", fArialBold10)); } } else { cardNum.Add(new Chunk("Number: ", fArialBold10)); cardNum.Add(new Chunk(c.ClonedCardParent.CardNumberMasked, fArial10)); cardNum.Add(new Chunk("\r\nName: ", fArialBold10)); cardNum.Add(new Chunk(c.ClonedCardParent.CardName, fArial10)); cardNum.Add(new Chunk("\r\nExp: ", fArialBold10)); cardNum.Add(new Chunk(c.ClonedCardParent.CardExpiration, fArial10)); cardNum.Add(new Chunk("\r\nIssuer: ", fArialBold10)); cardNum.Add(new Chunk(c.ClonedCardParent.IssuerName, fArial10)); } } else if (c.EntryMethod == "Swipe" || !c.MissingPrintedInfo) { if (c.TrackData != null) { string cardTrackUnenc = c.TrackData.Trim(); CCTrackParser trackParser = new CCTrackParser(); var trackData = trackParser.Parse(cardTrackUnenc); if (trackData != null && trackData.TrackOne != null) { cardNum.Add(new Chunk("T1 Number: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.MaskedPAN, fArial10)); cardNum.Add(new Chunk("\r\nT1 Name: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.CardHolderName, fArial10)); cardNum.Add(new Chunk("\r\nT1 Exp: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackOne.ExpirationDate, fArial10)); cardNum.Add(new Chunk("\r\nT1 Issuer: ", fArialBold10)); //lookup issuer baesd on this track bin (from PAN) var bin1 = binLookup.LookupCardMetaData(c.BinBase); cardNum.Add(new Chunk(bin1.IssuerName, fArial10)); } else { cardNum.Add(new Chunk("T1 Number: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Name: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Exp: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT1 Issuer: ", fArialBold10)); } if (trackData != null && trackData.TrackTwo != null) { //space cardNum.Add(new Chunk("\r\n", fArial10)); cardNum.Add(new Chunk("\r\nT2 Number: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackTwo.MaskedPAN, fArial10)); cardNum.Add(new Chunk("\r\nT2 Name: ", fArialBold10)); cardNum.Add(new Chunk("", fArial10)); cardNum.Add(new Chunk("\r\nT2 Exp: ", fArialBold10)); cardNum.Add(new Chunk(trackData.TrackTwo.ExpirationDate, fArial10)); cardNum.Add(new Chunk("\r\nT2 Issuer: ", fArialBold10)); //lookup issuer baesd on this track bin (from PAN) var bin2 = binLookup.LookupCardMetaData(c.BinBase); cardNum.Add(new Chunk(bin2.IssuerName, fArial10)); } else { cardNum.Add(new Chunk("T2 Number: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Name: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Exp: ", fArialBold10)); cardNum.Add(new Chunk("\r\nT2 Issuer: ", fArialBold10)); } } else { cardNum.Add(new Chunk("Number: ", fArialBold10)); cardNum.Add(new Chunk(c.CardNumberMasked, fArial10)); cardNum.Add(new Chunk("\r\nName: ", fArialBold10)); cardNum.Add(new Chunk(c.CardName, fArial10)); cardNum.Add(new Chunk("\r\nExp: ", fArialBold10)); cardNum.Add(new Chunk(c.CardExpiration, fArial10)); cardNum.Add(new Chunk("\r\nIssuer: ", fArialBold10)); cardNum.Add(new Chunk(ProviderName, fArial10)); } } pCardCell = new PdfPCell(cardNum); pCardCell.BorderColorBottom = BaseColor.BLACK; pCardCell.BorderWidthBottom = 1f; pCardCell.BorderWidthLeft = 0; pCardCell.BorderWidthRight = 1f; pCardCell.BorderWidthTop = 0; pCardCell.Padding = 5f; pCardCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; pTableCards.AddCell(pCardCell); #endregion i++; if (i > 0 && i % 4 == 0) { ////blank row PdfPCell pCellClosing = new PdfPCell(new Phrase("")); //add cards table to document pCellClosing = new PdfPCell(pTableCards); pCellClosing.Padding = 0f; pCellClosing.Border = 0; pTable1.AddCell(pCellClosing); //Insert Page Break document.Add(pTable1); document.NewPage(); pTable1 = new PdfPTable(1); } } #region Close out Cards Table if (i > 0 && i % 4 != 0) { ////blank row PdfPCell pCellClosing = new PdfPCell(new Phrase("")); //add cards table to document pCellClosing = new PdfPCell(pTableCards); pCellClosing.Padding = 0f; pCellClosing.Border = 0; pTable1.AddCell(pCellClosing); //Insert Page Break document.Add(pTable1); document.NewPage(); pTable1 = new PdfPTable(1); } #endregion document.Close(); string fileName = "CardImageReport_" + Case.CaseNumber.Replace(" ", "") + "_" + TimeZoneInfo.ConvertTimeFromUtc(DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")).ToString("MMddyyyy") + ".pdf"; using (FileStream file = new FileStream(fileName, FileMode.Create, System.IO.FileAccess.Write)) { var bytes = ms.ToArray(); file.Write(bytes, 0, bytes.Length); document.Close(); } }