using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Font = iTextSharp.text.Font;
using Image = iTextSharp.text.Image;
using Rectangle = iTextSharp.text.Rectangle;
namespace ITextSharpCardSample
{
public class CardReport
{
public static void Generate(UserModel userModel, string competitionImagePath, string universityLogoPath)
{
var fileStream = new FileStream("card.pdf", FileMode.Create, FileAccess.Write, FileShare.None);
var docFont = GetFont();
var pageSize = PageSize.A6.Rotate(); // سایز کارت را اینجا باید مشخص کرد
var doc = new Document(pageSize);
doc.SetMargins(18f, 18f, 15f, 2f);
var pdfWriter = PdfWriter.GetInstance(doc, fileStream);
doc.Open();
// درج لوگوی مسابقات به صورت شفاف در پس زمینه
var canvas = pdfWriter.DirectContentUnder;
var logoImg = Image.GetInstance(competitionImagePath);
logoImg.SetAbsolutePosition(0, 0);
logoImg.ScaleAbsolute(pageSize);
var graphicsState = new PdfGState { FillOpacity = 0.2F };
canvas.SetGState(graphicsState);
canvas.AddImage(logoImg);
// جدولی که برای چیدمان عناصر ارم دانشگاه و عنوان و عکس شخص استفاده میشود
var topTable = new PdfPTable(3)
{
WidthPercentage = 100,
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
ExtendLastRow = false,
};
var universityLogoImage = Image.GetInstance(universityLogoPath);
universityLogoImage.ScaleAbsolute(70, 100);
topTable.AddCell(new PdfPCell(universityLogoImage)
{
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
topTable.AddCell(new PdfPCell(new Phrase("کارت مسابقات دانشگاه آزاد اسلامی", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_CENTER,
Border = 0,
});
var userImage = Image.GetInstance(userModel.ImagePath);
userImage.Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER;
userImage.BorderWidth = 1f;
userImage.BorderColor = new BaseColor(204, 204, 204); // gray color
userImage.ScaleAbsolute(70, 100);
topTable.AddCell(new PdfPCell(userImage)
{
HorizontalAlignment = 2,
Border = 0
});
int[] topTableColumnsWidth = { 10, 25, 10 };
topTable.SetWidths(topTableColumnsWidth);
doc.Add(topTable);
// جدول مشخصات شرکت کننده مثل نام و نام خانوادگی
var infoTable = new PdfPTable(4)
{
WidthPercentage = 100,
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
ExtendLastRow = false,
SpacingBefore = 15,
};
infoTable.AddCell(new PdfPCell(new Phrase("نام:", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0,
PaddingBottom = 15
});
infoTable.AddCell(new PdfPCell(new Phrase(userModel.FirstName, docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase("نام خانوادگی:", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase(userModel.LastName, docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase("شماره\nدانشجویی:", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0,
PaddingBottom = 15
});
infoTable.AddCell(new PdfPCell(new Phrase(userModel.StudentNumber, docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase("کد ملی:", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase(userModel.NationalCode, docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase("واحد دانشگاهی:", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase(userModel.UniversityName, docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
// دو سلول بعدی صرفا جهت تکمیل شدن یک ردیف است تا عملکرد صحیح خود را داشته باشد
infoTable.AddCell(new PdfPCell(new Phrase("", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
infoTable.AddCell(new PdfPCell(new Phrase("", docFont))
{
RunDirection = PdfWriter.RUN_DIRECTION_RTL,
HorizontalAlignment = Element.ALIGN_LEFT,
Border = 0
});
int[] infoTableColumnsWidth = { 20, 15, 20, 15 };
infoTable.SetWidths(infoTableColumnsWidth);
doc.Add(infoTable);
doc.Close();
}
private static Font GetFont()
{
const string fontName = "Iranian Sans";
if (FontFactory.IsRegistered(fontName))
return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
var fontPath = "Fonts/irsans.ttf"; // مسیر فونت
FontFactory.Register(fontPath);
return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
}
}