295 lines
14 KiB
PHP
295 lines
14 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use App\Http\Controllers\Controller;
|
||
|
use App\Models\Campaigns;
|
||
|
use App\Models\Countries;
|
||
|
use App\Models\Registrations;
|
||
|
use Illuminate\Http\Request;
|
||
|
use Illuminate\Support\Facades\DB;
|
||
|
use setasign\Fpdi\Fpdi;
|
||
|
use Intervention\Image\Facades\Image;
|
||
|
use Endroid\QrCode\Color\Color;
|
||
|
use Endroid\QrCode\Encoding\Encoding;
|
||
|
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
|
||
|
use Endroid\QrCode\QrCode;
|
||
|
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
|
||
|
use Endroid\QrCode\Writer\PngWriter;
|
||
|
|
||
|
|
||
|
|
||
|
class PdfController extends Controller
|
||
|
{
|
||
|
public function generateMultipagePdf(Request $request, $ids)
|
||
|
{
|
||
|
$registration_ids = $ids;
|
||
|
$ids = explode(",", $ids);
|
||
|
foreach ($ids as $id) {
|
||
|
$data = Registrations::findOrFail($id);
|
||
|
$name = slugify($data->name);
|
||
|
$pdfTemplatePath = public_path(env("CLIENT_PATH") . '/form.pdf');
|
||
|
$filledPdfPath = public_path(env("CLIENT_PATH") . '/generated/' . $name . '-registration-form-' . $id . '.pdf');
|
||
|
if (!file_exists($filledPdfPath)) {
|
||
|
$pdf = new Fpdi();
|
||
|
|
||
|
// Add a page
|
||
|
$pdf->AddPage();
|
||
|
|
||
|
// Set the template file
|
||
|
$pdf->setSourceFile($pdfTemplatePath);
|
||
|
$tplIdx = $pdf->importPage(1);
|
||
|
|
||
|
// Use the template
|
||
|
$pdf->useTemplate($tplIdx);
|
||
|
|
||
|
// Set form field values based on your data
|
||
|
$pdf->SetFont('Arial');
|
||
|
$pdf->SetXY(102, 7);
|
||
|
$pdf->Write(0, $data->name);
|
||
|
$pdf->SetFont('Arial');
|
||
|
$pdf->SetFontSize('7');
|
||
|
$pdf->SetXY(102, 22);
|
||
|
$pdf->Write(0, $data->email);
|
||
|
$pdf->SetXY(162, 22);
|
||
|
$pdf->Write(0, $data->mobile);
|
||
|
$pdf->SetXY(118, 34);
|
||
|
$pdf->Write(0, $data->highest_qualification);
|
||
|
$pdf->SetXY(177, 34);
|
||
|
$pdf->Write(0, ($data->highest_grade) ? $data->highest_grade : "");
|
||
|
$pdf->SetXY(108, 46);
|
||
|
$pdf->Write(0, ($data->preparation_class) ? $data->preparation_class : "");
|
||
|
$pdf->SetXY(177, 46);
|
||
|
$pdf->Write(0, ($data->preparation_score) ? $data->preparation_score : "");
|
||
|
$pdf->SetXY(118, 60);
|
||
|
$pdf->Write(0, ($data->intrested_for_country) ? $data->intrested_for_country : "AAA");
|
||
|
$pdf->SetXY(68, 25);
|
||
|
$pdf->SetFontSize('14');
|
||
|
$pdf->Write(0, ($data->registration_id) ? $data->registration_id : "AAA");
|
||
|
|
||
|
// Repeat the above steps for other form fields
|
||
|
|
||
|
// Output or download the filled PDF
|
||
|
$pdf->Output($filledPdfPath, 'F'); //D for Download
|
||
|
}
|
||
|
}
|
||
|
//return response()->file($filledPdfPath)->deleteFileAfterSend(true);
|
||
|
|
||
|
}
|
||
|
public function generatePdf(Request $request)
|
||
|
{
|
||
|
$registration_id = $request->query('id');
|
||
|
$data = Registrations::findOrFail($registration_id);
|
||
|
$name = slugify($data->name);
|
||
|
$pdfTemplatePath = public_path(env("CLIENT_PATH") . '/inquiry-form-org.pdf');
|
||
|
$filledPdfPath = public_path(env("CLIENT_PATH") . '/generated/' . $name . '-enquiry-form-' . $registration_id . '.pdf');
|
||
|
if (!file_exists($filledPdfPath)) {
|
||
|
$pdf = new Fpdi();
|
||
|
// $pdf->SetMargins(float $left, float $top, float $right = -1, bool $resetPage = true);
|
||
|
$pdf->SetMargins(0,0,0);
|
||
|
$pdf->SetAutoPageBreak(false);
|
||
|
$pdf->AddPage('potrait', 'A5');
|
||
|
$border=0;
|
||
|
$pdf->setSourceFile($pdfTemplatePath);
|
||
|
$tplIdx = $pdf->importPage(1);
|
||
|
$pdf->useTemplate($tplIdx);
|
||
|
$pdf->SetFont('Arial');
|
||
|
$pdf->SetFontSize('7');
|
||
|
$pdf->SetXY(13, 32);
|
||
|
$pdf->Cell(13, 3, "Registration ID: " . (($data->registration_id) ? $data->registration_id : "ID"), $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(23, 41.5);
|
||
|
$pdf->Cell(113, 3, ($data->name) ? $data->name : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(30, 46.5);
|
||
|
$pdf->Cell(34, 3, ($data->dob) ? $data->dob : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(77, 46.5);
|
||
|
$pdf->Cell(15, 3, ($data->gender) ? $data->gender : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(111, 46.5);
|
||
|
$pdf->Cell(25, 3, ($data->marital_status) ? $data->marital_status : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(39, 52);
|
||
|
$pdf->Cell(37, 3, ($data->mobile) ? $data->mobile : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(88, 52);
|
||
|
$pdf->Cell(48, 3, ($data->email) ? $data->email : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(26, 57.7);
|
||
|
$pdf->Cell(110, 3, ($data->address) ? $data->address : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(37, 63);
|
||
|
$pdf->Cell(56, 3, ($data->guardian_name) ? $data->guardian_name : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(106, 63);
|
||
|
$pdf->Cell(30, 3, ($data->phone) ? $data->phone : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(53, 69);
|
||
|
$pdf->Cell(83, 3, ($data->applied_before) ? $data->applied_before : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(96, 78);
|
||
|
$pdf->Cell(40, 3, $data->highest_qualification, $border, 1, "R"); //$pdf->Cell(float $w, float $h = 0, string $txt = '', mixed $border = 0, int $ln = 0, string $align = '', bool $fill = false, mixed $link = '')
|
||
|
|
||
|
$pdf->SetXY(41, 86.5);
|
||
|
$pdf->Cell(28, 3, ($data->see_stream) ? $data->see_stream : "", $border, 1, "C");
|
||
|
$pdf->SetXY(72, 86.5);
|
||
|
$pdf->Cell(28, 3, ($data->see_school) ? $data->see_school : "", $border, 1, "C");
|
||
|
$pdf->SetXY(102, 86.5);
|
||
|
$pdf->Cell(16.5, 3, ($data->see_grade) ? $data->see_grade : "", $border, 1, "C");
|
||
|
$pdf->SetXY(120.5, 86.5);
|
||
|
$pdf->Cell(15, 3, ($data->see_year) ? $data->see_year : "", $border, 1, "C");
|
||
|
|
||
|
$lineY=91.5;
|
||
|
$pdf->SetXY(41, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->plus2_stream) ? $data->plus2_stream : "", $border, 1, "C");
|
||
|
$pdf->SetXY(72, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->plus2_college) ? $data->plus2_college : "", $border, 1, "C");
|
||
|
$pdf->SetXY(102, $lineY);
|
||
|
$pdf->Cell(16.5, 3, ($data->plus2_grade) ? $data->plus2_grade : "", $border, 1, "C");
|
||
|
$pdf->SetXY(120.5, $lineY);
|
||
|
$pdf->Cell(15, 3, ($data->plus2_year) ? $data->plus2_year : "", $border, 1, "C");
|
||
|
|
||
|
$lineY=97;
|
||
|
$pdf->SetXY(41, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->bachelors_stream) ? $data->bachelors_stream : "", $border, 1, "C");
|
||
|
$pdf->SetXY(72, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->bachelors_college) ? $data->bachelors_college : "", $border, 1, "C");
|
||
|
$pdf->SetXY(102, $lineY);
|
||
|
$pdf->Cell(16.5, 3, ($data->bachelors_grade) ? $data->bachelors_grade : "", $border, 1, "C");
|
||
|
$pdf->SetXY(120.5, $lineY);
|
||
|
$pdf->Cell(15, 3, ($data->bachelors_year) ? $data->bachelors_year : "", $border, 1, "C");
|
||
|
|
||
|
$lineY=102.5;
|
||
|
$pdf->SetXY(41, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->highest_stream) ? $data->highest_stream : "", $border, 1, "C");
|
||
|
$pdf->SetXY(72, $lineY);
|
||
|
$pdf->Cell(28, 3, ($data->highest_college) ? $data->highest_college : "", $border, 1, "C");
|
||
|
$pdf->SetXY(102, $lineY);
|
||
|
$pdf->Cell(16.5, 3, ($data->highest_grade) ? $data->highest_grade : "", $border, 1, "C");
|
||
|
$pdf->SetXY(120.5, $lineY);
|
||
|
$pdf->Cell(15, 3, ($data->highest_year) ? $data->highest_year : "", $border, 1, "C");
|
||
|
|
||
|
$pdf->SetXY(36, 109.7);
|
||
|
$pdf->Cell(100, 3, ($data->experience) ? $data->experience : "", $border, 1, "L");
|
||
|
$pdf->SetXY(44, 115.7);
|
||
|
$pdf->Cell(92, 3, ($data->intrested_for_country) ? Countries::where("country_id",$data->intrested_for_country)->first()->title : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(36, 123.7);
|
||
|
$pdf->Cell(29, 3, ($data->preparation_class) ? $data->preparation_class : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(80, 123.7);
|
||
|
$pdf->Cell(56, 3, ($data->preparation_score) ? $data->preparation_score : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(50, 133.5);
|
||
|
$pdf->Cell(38, 3, ($data->how_you_know) ? $data->how_you_know : "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(105, 133.5);
|
||
|
$pdf->Cell(18, 3, ($data->reference) ? $data->reference : "", $border, 1, "L");
|
||
|
|
||
|
|
||
|
$pdf->SetXY(15, 196);
|
||
|
$pdf->Cell(25, 3, "", $border, 1, "L");
|
||
|
|
||
|
$pdf->SetXY(70, 196);
|
||
|
$pdf->Cell(21, 3, (($data->created_at) ? date('Y-m-d', strtotime($data->created_at)) : "date"), $border, 1, "C");
|
||
|
|
||
|
$pdf->SetXY(120, 196);
|
||
|
$pdf->Cell(25, 3, "", $border, 1, "L");
|
||
|
|
||
|
// $pdf->Cell(0, 10, json_encode($data), 0, 1, 'R');
|
||
|
//$pdf->Write(float $h, string $txt, mixed $link = '');
|
||
|
//$pdf->Cell(float $w, float $h = 0, string $txt = '', mixed $border = 0, int $ln = 0, string $align = '', bool $fill = false, mixed $link = '')
|
||
|
// $pdf->MultiCell(float $w, float $h, string $txt, mixed $border = 0, string $align = 'J', bool $fill = false);
|
||
|
|
||
|
// $pdf->MultiCell(120, 3, json_encode($data), 0, "R", false);
|
||
|
|
||
|
|
||
|
// Repeat the above steps for other form fields
|
||
|
|
||
|
// Output or download the filled PDF
|
||
|
$pdf->Output($filledPdfPath, 'D'); //D for Download
|
||
|
}
|
||
|
}
|
||
|
//return response()->file($filledPdfPath)->deleteFileAfterSend(true);
|
||
|
public function generatePass(Request $request)
|
||
|
{
|
||
|
|
||
|
$registration_id = $request->query('id');
|
||
|
$data = Registrations::findOrFail($registration_id);
|
||
|
|
||
|
$registration = DB::table("registrations")
|
||
|
->where('status', 1)
|
||
|
->where('registration_id', $registration_id)
|
||
|
->orderBy('display_order')
|
||
|
->first();
|
||
|
if (!$registration) {
|
||
|
// Handle the case where the registration is not found
|
||
|
return;
|
||
|
}
|
||
|
$Campaign = Campaigns::findOrFail($registration->campaigns_id);
|
||
|
$QRURL = route("registration.view", md5($registration_id));
|
||
|
$writer = new PngWriter();
|
||
|
$qrCode = QrCode::create($QRURL)
|
||
|
->setEncoding(new Encoding('UTF-8'))
|
||
|
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
|
||
|
->setSize(150)
|
||
|
->setMargin(1)
|
||
|
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
|
||
|
->setForegroundColor(new Color(0, 0, 0))
|
||
|
->setBackgroundColor(new Color(255, 255, 255));
|
||
|
$result = $writer->write($qrCode);
|
||
|
$dataUri = $result->getDataUri();
|
||
|
if ($Campaign->pass_layout != "") {
|
||
|
$pass_layout = storage_path(str_replace("storage/", "app/public/", $Campaign->pass_layout));
|
||
|
$backgroundImage = Image::make($pass_layout);
|
||
|
} else {
|
||
|
$backgroundImage = Image::make(public_path(env("CLIENT_PATH") . '/assets/images/pass.png'));
|
||
|
}
|
||
|
$qrCodeImage = Image::make($dataUri);
|
||
|
$qrCodePosition = ($Campaign->qr_position != "") ? $Campaign->qr_position : "100,100";
|
||
|
$qrCodePosition = explode(",", $qrCodePosition);
|
||
|
$backgroundImage->insert($qrCodeImage, 'top-left', $qrCodePosition[0], $qrCodePosition[1]);
|
||
|
$text = $registration->registration_id;
|
||
|
$idPosition = ($Campaign->id_position != "") ? $Campaign->id_position : "100,100";
|
||
|
$idPosition = explode(",", $idPosition);
|
||
|
$fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
|
||
|
$backgroundImage->text($text, $idPosition[0], $idPosition[1], function ($font) use ($fontPath) {
|
||
|
$font->file($fontPath);
|
||
|
$font->size(16);
|
||
|
$font->color('#000');
|
||
|
$font->align('left');
|
||
|
$font->valign('top');
|
||
|
});
|
||
|
$text = $registration->name;
|
||
|
$namePosition = ($Campaign->name_position != "") ? $Campaign->name_position : "100,100";
|
||
|
$namePosition = explode(",", $namePosition);
|
||
|
$fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
|
||
|
$backgroundImage->text($text, $namePosition[0], $namePosition[1], function ($font) use ($fontPath) {
|
||
|
$font->file($fontPath);
|
||
|
$font->size(24);
|
||
|
$font->color('#ffffff');
|
||
|
$font->align('left');
|
||
|
$font->valign('top');
|
||
|
});
|
||
|
$text = $registration->email;
|
||
|
$emailPosition = ($Campaign->email_position != "") ? $Campaign->email_position : "100,100";
|
||
|
$emailPosition = explode(",", $emailPosition);
|
||
|
$fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
|
||
|
$backgroundImage->text($text, $emailPosition[0], $emailPosition[1], function ($font) use ($fontPath) {
|
||
|
$font->file($fontPath);
|
||
|
$font->size(20);
|
||
|
$font->color('#fff');
|
||
|
$font->align('left');
|
||
|
$font->valign('top');
|
||
|
});
|
||
|
|
||
|
$outputPath = public_path(env("CLIENT_PATH") . '/assets/images/generated/pass_' . date("ymdhis") . '_image.png');
|
||
|
$backgroundImage->save($outputPath);
|
||
|
$qr_code=$outputPath;
|
||
|
$downloadFileName = env("CLIENT_PATH").'_pass.png';
|
||
|
return response()->download($qr_code, $downloadFileName);
|
||
|
}
|
||
|
|
||
|
}
|