📄

Pdf Creator

TechnologyC#
Editor of the PageLatif Bahadır ALTUN
#region PdfCreator
        public byte[] DynamicPdfCreator(string baslik, List<List<KeyValueObject>> list, List<KeyValueObject> headers, List<KeyValueObject> bilgiList, List<string> footer)
        {
            PdfDocument pdf = new PdfDocument();
            pdf.PageSettings.Size = PdfPageSize.A4;
            pdf.PageSettings.Margins = new PdfMargins(0);
            PdfMargins margins = new PdfMargins(60, 60, 60, 60);
            pdf.Template.Top = CreateHeaderTemplate(pdf, margins, baslik); // başlık tasarımı döndürür.
            pdf.Template.Bottom = new PdfPageTemplateElement(pdf.PageSettings.Size.Width, margins.Bottom);
            pdf.Template.Left = new PdfPageTemplateElement(margins.Left, pdf.PageSettings.Size.Height);
            pdf.Template.Right = new PdfPageTemplateElement(margins.Right, pdf.PageSettings.Size.Height);

            PdfPageBase page = pdf.Pages.Add();

            PdfTrueTypeFont font = new PdfTrueTypeFont(new System.Drawing.Font("Arial", 11f), true); // kullanılacak font ve size'ı belirlenir.
            PdfPen pen = new PdfPen(System.Drawing.Color.Black);

            float xPos = 0;
            float yPos = 0;
            float increaseY = 20;
            float textSize = 0;
            float tableYPos = 0;
            for (int bilgi = 0; bilgi < bilgiList.Count; bilgi++) // table'dan önce gösterilmek istenen bilgilerin bastırılması
            {
                if (bilgi != 0 && bilgi % 4 == 0) // alt alta en fazla 4 adet bilgi bastırılır.
                {
                    yPos = 0;
                    xPos += (textSize + 30);
                }
                string text = bilgiList[bilgi].Key + " : " + bilgiList[bilgi].Value;
                text = text.Replace("ğ", "g");
                text = text.Replace("Ğ", "G");
                page.Canvas.DrawString(text, font, pen, xPos, yPos);
                //System.Threading.Thread.Sleep(200);

                if (page.FindText(text, Spire.Pdf.General.Find.TextFindParameter.IgnoreCase).Finds.First().Size.Width > textSize)
                {
                    textSize = page.FindText(text, Spire.Pdf.General.Find.TextFindParameter.IgnoreCase).Finds[0].Size.Width;
                }
                yPos += increaseY;
                tableYPos = yPos > tableYPos ? yPos : tableYPos;
            }


            PdfGrid grid = new PdfGrid(); // table oluşturma
            PdfGridRow row1 = grid.Rows.Add(); // header için row oluşturma

            grid.Style.CellPadding.Top = 5f;
            grid.Style.CellPadding.Bottom = 5f;

            grid.Columns.Add(headers.Count);

            Single value = (pdf.PageSettings.Width - 120) / headers.Count;

            for (int i = 0; i < grid.Columns.Count; i++)
            {
                grid.Columns[i].Width = value;
            }

            PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle); // her bir stringin center olacak şekilde ayarlanması


            for (int i = 0; i < headers.Count; i++) // header burada oluşturuldu
            {
                row1.Cells[i].Value = (headers[i].Value);
                row1.Cells[i].StringFormat = stringFormat;
                row1.Cells[i].Style.Font = new PdfTrueTypeFont(new System.Drawing.Font("Arial", 11f, FontStyle.Bold), true); ;
                //row1.Cells[i].Style.BackgroundBrush = PdfBrushes.LightSalmon; // eğer background rengi değiştirmek istenirse açılması gereken satır
            }

            for (int i = 0; i < list.Count; i++) // table burada dolduruldu.
            {
                PdfGridRow newRow = grid.Rows.Add();
                for (int j = 0; j < headers.Count; j++)
                {
                    newRow.Cells[j].Value = (list[i][j].Value);
                    newRow.Cells[j].StringFormat = stringFormat;
                    newRow.Cells[j].Style.Font = font;
                }
            }

            PdfGridRow footerRow = grid.Rows.Add();


            for (int foot = 0; foot < footer.Count; foot++) // footer bilgileri (TOPLAM DEĞERLER GİBİ) burada table'a eklenir.
            {
                footerRow.Cells[foot].Value = (footer[foot]);
                footerRow.Cells[foot].StringFormat = stringFormat;
                footerRow.Cells[foot].Style.Font = new PdfTrueTypeFont(new System.Drawing.Font("Arial", 11f, FontStyle.Bold), true);
            }

            grid.Draw(page, new PointF(0f, tableYPos)); // tableYPos: table başlamadan önce bastırılan bilgi satırlarının Y Position'ının nerede bittiğini gösterir. burada (0, tablePos) ile table nerede başlayacak onu belirliyoruz.

            using (var stream = new MemoryStream()) // oluşturulan dosyayı MemoryStream yardımıyla byte[]cinsinde return ediyoruz.
            {
                byte[] byteArray;
                pdf.SaveToStream(stream);
                byteArray = stream.ToArray();
                return byteArray;
            }

        }
        static PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins, string baslik)
        {
            SizeF pageSize = doc.PageSettings.Size;

            PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top);
            headerSpace.Foreground = false;

            float x = margins.Left;
            float y = 0;

            PdfPen pen = new PdfPen(PdfBrushes.Black);
            headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2);

            PdfTrueTypeFont font = new PdfTrueTypeFont(new System.Drawing.Font("Arial", 25f, FontStyle.Bold));
            PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left);
            String headerText = Utf8Cevirici(baslik);
            SizeF size = font.MeasureString(headerText, format);

            float startX = ((pageSize.Width - (x * 2) - size.Width) / 2) + x;
            headerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Black, startX, margins.Top - (size.Height + 5), format);

            return headerSpace;
        }

        static string Utf8Cevirici(String value)
        {
            value = value.Contains('Ç') ? value.Replace('Ç', 'C') : value;
            value = value.Contains('ç') ? value.Replace('ç', 'c') : value;
            value = value.Contains('ğ') ? value.Replace('ğ', 'g') : value;
            value = value.Contains('Ğ') ? value.Replace('Ğ', 'G') : value;
            value = value.Contains('ı') ? value.Replace('ı', 'i') : value;
            value = value.Contains('İ') ? value.Replace('İ', 'I') : value;
            value = value.Contains('ö') ? value.Replace('ö', 'o') : value;
            value = value.Contains('Ö') ? value.Replace('Ö', 'O') : value;
            value = value.Contains('ş') ? value.Replace('ş', 's') : value;
            value = value.Contains('Ş') ? value.Replace('Ş', 'S') : value;
            value = value.Contains('ü') ? value.Replace('ü', 'u') : value;
            value = value.Contains('Ü') ? value.Replace('Ü', 'U') : value;

            return value;
        }

        #endregion