forked from CSI-KJSCE/appointment_to_examiner
Pdf- css
This commit is contained in:
BIN
client/public/logo.png
Normal file
BIN
client/public/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 123 KiB |
@@ -54,63 +54,95 @@ const CourseConsolidated = () => {
|
||||
if (currentPage > 1) setCurrentPage((prevPage) => prevPage - 1);
|
||||
};
|
||||
|
||||
const generateAppointmentPDF = (courseData, courseName) => {
|
||||
console.log(courseData);
|
||||
const generateAppointmentPDF = async (courseData, courseName) => {
|
||||
const doc = new jsPDF();
|
||||
const maroon = [128, 0, 0];
|
||||
|
||||
// Add Title
|
||||
// College Logo
|
||||
const logoUrl = "/logo.png"; // Ensure the logo is placed in the public folder
|
||||
const logoWidth = 40;
|
||||
const logoHeight = 40;
|
||||
const logoX = 10;
|
||||
const logoY = 10;
|
||||
|
||||
const loadImage = async (url) => {
|
||||
const response = await fetch(url);
|
||||
const blob = await response.blob();
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = (error) => reject(error);
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
};
|
||||
|
||||
try {
|
||||
const logoBase64 = await loadImage(logoUrl);
|
||||
doc.addImage(logoBase64, "PNG", logoX, logoY, logoWidth, logoHeight);
|
||||
} catch (error) {
|
||||
console.error("Failed to load logo:", error);
|
||||
}
|
||||
|
||||
// Title Section
|
||||
doc.setFont("times", "normal");
|
||||
doc.setTextColor(0, 0, 0);
|
||||
doc.setFontSize(12);
|
||||
doc.text("Date: " + new Date().toLocaleDateString(), 150, 20);
|
||||
doc.setFontSize(14);
|
||||
doc.text("CONFIDENTIAL", 10, 60);
|
||||
doc.setFontSize(16);
|
||||
doc.text(`${courseName} - Appointment Order`, 105, 10, { align: "center" });
|
||||
doc.text(
|
||||
"LETTER OF APPOINTMENT AS QUESTION PAPER SETTER",
|
||||
105,
|
||||
70,
|
||||
{ align: "center" }
|
||||
);
|
||||
|
||||
// Add the table for names and roles (Using courseData for this)
|
||||
// Appointment Table
|
||||
const table1Data = [
|
||||
...(courseData.oralPracticalTeachers?.map((teacher) => [
|
||||
teacher,
|
||||
"K. J. Somaiya Institute of Technology",
|
||||
"Assessment Role",
|
||||
"K. J. Somaiya School of Engineering",
|
||||
"Oral/Practical Teacher",
|
||||
"Contact Number",
|
||||
]) || []),
|
||||
...(courseData.reassessmentTeachers?.map((teacher) => [
|
||||
teacher,
|
||||
"K. J. Somaiya Institute of Technology",
|
||||
"Reassessment Role",
|
||||
"K. J. Somaiya School of Engineering",
|
||||
"Reassessment Teacher",
|
||||
"Contact Number",
|
||||
]) || []),
|
||||
...(courseData.paperSettingTeachers?.map((teacher) => [
|
||||
teacher,
|
||||
"K. J. Somaiya Institute of Technology",
|
||||
"K. J. Somaiya School of Engineering",
|
||||
"Paper Setter",
|
||||
"Contact Number",
|
||||
]) || []),
|
||||
...(courseData.moderationTeachers?.map((teacher) => [
|
||||
teacher,
|
||||
"K. J. Somaiya Institute of Technology",
|
||||
"K. J. Somaiya School of Engineering",
|
||||
"Moderator",
|
||||
"Contact Number",
|
||||
]) || []),
|
||||
...(courseData.pwdPaperSettingTeachers?.map((teacher) => [
|
||||
teacher,
|
||||
"K. J. Somaiya Institute of Technology",
|
||||
"K. J. Somaiya School of Engineering",
|
||||
"PwD Paper Setter",
|
||||
"Contact Number",
|
||||
]) || []),
|
||||
];
|
||||
|
||||
|
||||
autoTable(doc, {
|
||||
head: [["Name", "Affiliation", "Appointment Role", "Contact No."]],
|
||||
head: [["Name", "Affiliation", "Appointment Role", "Email"]],
|
||||
body: table1Data,
|
||||
startY: 20,
|
||||
startY: 80,
|
||||
theme: "grid",
|
||||
headStyles: { fillColor: maroon, textColor: [255, 255, 255] },
|
||||
styles: { textColor: [0, 0, 0] }, // Keep body text black
|
||||
});
|
||||
|
||||
// Add the descriptive paragraph
|
||||
const text = `Dear all,\n\nYou have been appointed to jointly act as Paper Setters as mentioned against your name for the following Examination to be held at K. J. Somaiya Institute of Technology, Sion, Mumbai:`;
|
||||
doc.setFontSize(12);
|
||||
doc.text(text, 10, doc.previousAutoTable.finalY + 10);
|
||||
|
||||
// Add the exam details table using `courseData`
|
||||
const table2Data = [
|
||||
// Content Table
|
||||
const detailsTableData = [
|
||||
["Programme:", courseData.courseName],
|
||||
["Exam Category:", "Regular Examination"],
|
||||
["Exam Type:", courseData.examType],
|
||||
@@ -122,18 +154,35 @@ const CourseConsolidated = () => {
|
||||
["Course Code:", courseData.courseCode],
|
||||
];
|
||||
|
||||
|
||||
|
||||
autoTable(doc, {
|
||||
body: table2Data,
|
||||
startY: doc.previousAutoTable.finalY + 30,
|
||||
theme: "plain",
|
||||
styles: { lineColor: [0, 0, 0], lineWidth: 0.1 },
|
||||
body: detailsTableData,
|
||||
startY: doc.previousAutoTable.finalY + 10,
|
||||
theme: "plain", // Plain table style
|
||||
styles: { textColor: [0, 0, 0] },
|
||||
});
|
||||
|
||||
// Save the PDF
|
||||
// Footer Section
|
||||
const footerY = doc.previousAutoTable.finalY + 10; // Dynamic Y-coordinate
|
||||
doc.setFontSize(12);
|
||||
doc.text("Dr. S. K. Ukarande", 10, footerY);
|
||||
doc.text("Principal", 10, footerY + 5);
|
||||
doc.text("K. J. Somaiya School of Engineering", 10, footerY + 10);
|
||||
|
||||
// Footer Contact Details
|
||||
const footerContactY = footerY + 20;
|
||||
doc.setFontSize(10);
|
||||
doc.text(
|
||||
"Somaiya Vidyavihar, Vidyavihar (East), Mumbai-400 022, India",
|
||||
10,
|
||||
footerContactY
|
||||
);
|
||||
doc.text("Telephone: (91-22) 44444400, 44444404", 10, footerContactY + 5);
|
||||
doc.text("Email: principal.tech@somaiya.edu", 10, footerContactY + 10);
|
||||
doc.text("Web: www.somaiya.edu/kjsieit", 10, footerContactY + 15);
|
||||
|
||||
// Save PDF
|
||||
doc.save(`${courseName} - AppointmentOrder.pdf`);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user