#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