ஒரு சான்றிதழ் மக்கள் அதை நம்பினால் மட்டுமே முக்கியத்துவம் வாய்ந்தது. ஒரு கற்பவர் தனது வேலை விண்ணப்பத்துடன் ஒரு PDF கோப்பை இணைக்கும்போது, அதைத் தேர்ந்தெடுக்கும் மேலாளர் (hiring manager) அது உண்மையானது என்பதைச் சில நொடிகளில் உறுதிப்படுத்த முடி deve வேண்டும். மூன்றாம் தரப்பு தளத்திடம் (third-party platform) கட்டுப்பாட்டை ஒப்படைக்காமல், அந்த நம்பிக்கையை நீங்களே உருவாக்க Laravel உங்களுக்குத் தேவையான கருவிகளை வழங்குகிறது. பிராண்டிங் (branding), தரவு (data) மற்றும் சரிபார்ப்புச் சங்கிலி (verification chain) ஆகிய அனைத்தையும் நீங்கள் முழுமையாகக் கட்டுப்படுத்தலாம்.
இதன் நோக்கம் எளிமையானது: அச்சிடப்படும்போது நேர்த்தியாகத் தெரியும் ஒரு தொழில்முறை PDF-ஐ உருவாக்குதல், உடனடி சரிபார்ப்பிற்காக ஸ்கேன் செய்யக்கூடிய QR குறியீட்டை (QR code) கொண்டிருத்தல் மற்றும் யூகிக்கவோ அல்லது போலியாக உருவாக்கவோ முடியாத ஒரு தனித்துவமான பதிவைச் சேமித்தல். இதை எவ்வாறு உருவாக்குவது என்பதை இங்கே காண்போம்.
தரவுத்தள அடுக்கிலிருந்து (Database Layer) தொடங்குங்கள்
சான்றிதழ்களுக்கு auto-incrementing IDs-களைப் பயன்படுத்த வேண்டாம். 8473 போன்ற ஒரு ID-யை எளிதாகக் கணிக்க முடியும். யாராவது உங்கள் சரிபார்ப்புப் பக்கத்தில் எண்களைத் தொடர்ந்து மாற்றிப் பார்த்து, நீங்கள் வழங்கிய அனைத்து சான்றிதழ்களையும் (credentials) திருடிவிடக்கூடும். அதற்குப் பதிலாக, சான்றிதழ் பதிவை உருவாக்கும்போது ஒரு UUID-யை உருவாக்கவும்.
உங்கள் migration-இல், UUID-யை ஒரு string ஆகச் சேமிக்கவும். ஒரு பயனர் ஒரு பாடத்திட்டத்தை முடிக்கும்போது, அந்தப் பயனர் மற்றும் பாடத்திட்டத்துடன் இணைக்கப்பட்ட ஒரு Certificate model-ஐ உருவாக்கும் வகையில் ஒரு event-ஐத் தூண்டவும் (fire). சரிபார்ப்பு endpoint-ஐ (verification endpoint) எந்தவொரு authenticated dashboard-லிருந்தும் முற்றிலும் தனித்துப் பிரித்து வைக்கவும். /verify/{uuid} போன்ற ஒரு பொதுவான வழித்தடம் (public route), அந்தப் பதிவைத் தேடிப் பார்த்து, பெறுநரின் பெயர், பாடத்திட்டத் தலைப்பு மற்றும் முடித்த தேதியைக் காண்பிக்க வேண்டும். ஒருவேளை UUID இல்லையென்றால், 404-ஐத் திருப்பிக் கொடுக்கவும். இதற்குத் தனிப்பயனர் உள்நுழைவு (login) தேவையில்லை.
இந்த ஒரு வடிவமைப்புத் தேர்வு தனியுரிமையைப் பாதுகாப்பதோடு, enumeration attacks எனப்படும் தாக்குதல்களையும் தடுக்கிறது.
Blade Template-ஐ வடிவமைத்தல்
உங்கள் சான்றிதழ் வடிவமைப்பு ஒரு சாதாரண Blade view-இல் இருக்கும், ஆனால் அதை ஒரு சாதாரண வலைப்பக்கத்திலிருந்து மாறுபட்டதாக நீங்கள் கையாள வேண்டும். PDF rendering engines உலாவிகளைப் (browsers) போலச் செயல்படுவதில்லை. வெளிப்புற ஸ்டைல்ஷீட்கள் (External stylesheets) நம்பகமானவை அல்ல, ஏனெனில் PDF converter அவற்றைச் சரியான சூழலில் பெறாமல் போகலாம். எனவே, inline CSS-ஐ மட்டுமே பயன்படுத்தவும்.
இயற்பியல் அளவுகளைக் (physical dimensions) கருத்தில் கொள்ளுங்கள். உங்களுக்கு landscape முறையில் சான்றிதழ் வேண்டுமென்றால், container-இன் அகலம் மற்றும் உயரத்தை நேரடியாக அமைக்கவும்:
<div style="width: 11in; height: 8.5in; position: relative; padding: 40px; font-family: Georgia, serif;">
அந்த container-இன் உள்ளே signatures, seals மற்றும் borders ஆகியவற்றை absolute positioning மூலம் அமைக்கவும். Web-safe fonts-களைப் பயன்படுத்துவதே பாதுகாப்பானது, இருப்பினும் நீங்கள் கவனமாக இருந்தால் சில PDF engines எழுத்துருக்களை (fonts) இணைக்க அனுமதிக்கின்றன. உங்கள் rendering engine அதை ஆதரிக்கிறது என்று உங்களுக்குத் தெரிந்தால் ஒழிய, CSS Grid அல்லது மேம்பட்ட Flexbox-ஐ அதிகம் சார்ந்திருப்பதைத் தவிர்க்கவும். பரந்த இணக்கத்தன்மைக்காக (broad compatibility), நவீன CSS-ஆல் ஒரு PDF engine-க்குள் உறுதி செய்ய முடியாத சீரமைப்புப் (alignment) பிரச்சினைகளை பழைய முறையிலான table layouts இன்றும் தீர்க்கின்றன.
markup-ஐத் தூய்மையாக வைத்திருக்கவும். HTML எவ்வளவு எளிமையாக இருக்கிறதோ, அவ்வளவு குறைவாகவே converter சிதைந்த வடிவமைப்பை (broken layout) உங்களுக்குத் தரும்.
QR Code-ஐச் சேர்த்தல்
Simple QRCode தொகுப்பை (package) நிறுவவும். உங்கள் சரிபார்ப்புப் பக்கத்திற்கு நேரடியாகச் செல்லும் ஒரு QR code உங்களுக்குத் தேவை. உங்கள் Blade template-இல், அதை இவ்வாறு உருவாக்கவும்:
<img src="{!! QrCode::size(150)->generate(route('certificates.verify', $certificate->uuid)) !!}" style="position: absolute; bottom: 40px; right: 40px;">
ஒரு முதலாளி அந்த குறியீட்டைத் தனது தொலைபேசியால் ஸ்கேன் செய்யும்போது, அவர் உங்கள் Laravel app-க்குச் சென்று நேரடிப் பதிவைப் பார்ப்பார். அந்த இயற்பியல்-டிஜிட்டல் இணைப்புதான் (physical-to-digital bridge) சான்றிதழைச் சரிபார்க்கக்கூடியதாக மாற்றுகிறது. ஒரு அழகான PDF மட்டும் எதையும் நிரூபிப்பதில்லை. QR code அந்த நம்பிக்கையை உடனடியாகவும் காட்சிரீதியாகவும் மாற்றுகிறது.
PDF Engine-ஐத் தேர்ந்தெடுத்தல்
Laravel டெவலப்பர்கள் பொதுவாக மூன்று வழிகளில் ஒன்றைத் தேர்ந்தெடுப்பார்கள். ஒவ்வொன்றிலும் சில சாதக பாதகங்கள் (trade-offs) உள்ளன.
DomPDF முழுமையாக PHP-இல் இயங்குகிறது. இதை Composer மூலம் நிறுவி, உங்கள் Blade-ஆல் உருவாக்கப்பட்ட HTML-ஐ அதற்கு அனுப்பி, வெளியீட்டைச் சேமிக்கலாம். இதற்குத் கூடுதல் சர்வர் மென்பொருள் தேவையில்லை, எனவே நீங்கள் shared hosting பயன்படுத்துபவர் என்றால் இது மிகவும் வசதியானது. இதன் குறைபாடு CSS ஆதரவு (support) ஆகும். Flexbox மற்றும் Grid போன்ற நவீன வடிவமைப்பு கருவைகள் பகுதியளவு மட்டுமே ஆதரிக்கப்படுகின்றன அல்லது சரியாகச் செயல்படுவதில்லை. Custom webfonts சிக்கலானதாக இருக்கலாம், மேலும் சிக்கலான பின்னணிகள் (backgrounds) பெரும்பாலும் தவறாகத் தெரியக்கூடும். உங்கள் சான்றிதழ் வடிவமைப்பு எளிமையானதாக இருந்தால், DomPDF போதுமானது. ஆனால் உங்களுக்குத் துல்லியமான வடிவமைப்பு தேவைப்பட்டால், இது உங்களுக்கு ஏமாற்றத்தைத் தரும்.
Browsershot ஒரு மாறுபட்ட அணுகுமுறையைக் கொண்டுள்ளது. இது Puppeteer-ஐப் பயன்படுத்தி ஒரு headless Chrome instance-ஐ இயக்கி, உங்கள் HTML-ஐ ஒரு உலாவியில் பார்ப்பது போலவே துல்லியமாகத் திரையில் காட்டி, ஒரு PDF-ஆக ஏற்றுமதி செய்கிறது. இது உண்மையான Chrome என்பதால், உங்கள் Tailwind styles, custom fonts மற்றும் responsive layouts அனைத்தும் மிகச்சரியாகத் தெரியும். இதில் உள்ள சவால் சர்வர் அமைப்பில்தான் (server setup) உள்ளது. இதற்கு Node.js, Puppeteer மற்றும் Chrome ஆகியவை நிறுவப்பட்டிருக்க வேண்டும். சில தளங்களில், செயல்முறைகள் (processes) நின்றுவிடாமல் இருக்க, நீங்கள் Chrome sandbox-ஐ முடக்க வேண்டும் அல்லது நினைவகத்தை (memory) கவனமாக நிர்வகிக்க வேண்டும். உங்கள் சர்வர் உங்கள் கட்டுப்பாட்டில் இருந்து, உங்களுக்கு மிகத் துல்லியமான (pixel-perfect) வடிவமைப்புத் தேவைப்பட்டால், Browsershot-க்கு நிகர் வேறில்லை.
HTML to PDF API என்பது மூன்றாவது வழிமுறை. நீங்கள் உங்கள் Blade HTML-ஐ ஒரு string ஆகச் சேகரித்து, அதை ஒரு வெளிப்புறச் சேவைக்கு (external service) POST செய்து, பதிலுக்கு ஒரு PDF-ஐப் பெறுகிறீர்கள். இதன் நடைமுறைப் பயன் என்னவென்றால், இதற்கு சர்வர் பக்கச் சார்பு (server-side dependency) ஏதும் இல்லை. நீங்கள் Chrome-ஐ நிறுவ வேண்டியதில்லை. PHP எழுத்துரு (font) சிக்கல்களைத் தீர்க்க வேண்டிய அவசியமும் இல்லை. உங்களுக்குச் சரியாக வடிவமைக்கப்பட்ட ஒரு vector PDF கிடைக்கும். இந்தச் சேவைகளில் பெரும்பாலானவை ஆவணத்திற்குத் தனித்தனியாகக் கட்டணம் வசூலிக்கின்றன, ஆனால் பல பயன்பாடுகளுக்கு, அதன் செயல்பாட்டு எளிமை அந்தச் செலவை விடப் பயனுள்ளதாக இருக்கும். சிஸ்டம் அட்மின் (sysadmin) வேலைகள் இன்றி உயர்தர வெளியீட்டைப் பெற விரும்பினால், இது பொதுவாகத் தயாரிப்பு நிலையை (production) அடைய மிக வேகமான வழியாகும்.
முழுமையான பணிப்பாய்வு (Workflow)
நீங்கள் ஒரு முறையைத் தேர்ந்தெடுத்தவுடன், அதன் செயல்முறை மிகவும் எளிமையானது. ஒரு பாடநெறி நிறைவு நிகழ்வு (course completion event), பின்வருவனவற்றைச் செய்யும் ஒரு listener-ஐத் தூண்ட வேண்டும்:
- ஒரு UUID-ஐ உருவாக்கி
Certificateபதிவை உருவாக்குங்கள். view('certificates.pdf', compact('certificate'))->render()என்பதைப் பயன்படுத்தி Blade view-வை ஒரு HTML string ஆக மாற்றவும்.- அந்த HTML string-ஐ நீங்கள் தேர்ந்தெடுத்த PDF சேவை அல்லது தொகுப்பிற்கு (package) அனுப்பவும்.
- உருவான கோப்பை
certificates/2024/06/uuid.pdfபோன்ற ஒரு தர்க்கரீதியான பாதையின் (logical path) கீழ்storage/app/certificates/இல் சேமிக்கவும். - அந்தத் கோப்பை ஒரு அறிவிப்புடன் (notification) இணைத்து, தானாகவே கற்பவருக்கு மின்னஞ்சல் செய்யவும்.
Laravel-ன் அறிவிப்பு அமைப்பு (notification system) மின்னஞ்சலைச் சிறப்பாகக் கையாளும். HTML உருவாக்குவதற்கு ஒரு வினாடிக்கும் மேலாகத் தேவைப்பட்டால், அந்த வேலையை ஒரு Queue-வில் வைக்கவும். ஒரு பக்கம் லோட் ஆகும் போது, கற்பவர் PDF-க்காகக் காத்திருக்கக் கூடாது.
பயனர் கோப்பைப் பதிவிறக்கம் செய்யும்போது, எந்தவொரு PDF viewer-லும் திறக்கக்கூடிய ஒரு தரமான PDF அவர்களுக்குக் கிடைக்கும். அவர்கள் அதை அச்சிடும்போது, vector எழுத்துக்கள் மிகத் தெளிவாக இருக்கும். ஒரு முதலாளி QR குறியீட்டை ஸ்கேன் செய்யும்போது, உங்கள் Laravel செயலி தரவுத்தளத்துடன் (database) UUID-ஐ ஒப்பிட்டுச் சரிபார்த்துத் தகவல்களைக் காண்பிக்கும்.
ஏன் Vector வெளியீடு தவிர்க்க முடியாதது
சில PDF உருவாக்கும் முறைகள் rasterized வெளியீட்டைத் தருகின்றன. அதாவது, ஒவ்வொரு எழுத்தும் ஒரு படமாக மாறிவிடும். ஜூம் செய்யும்போது எழுத்துக்கள் மங்கலாகத் தெரியும். கோப்பு அளவு (file size) மிக அதிகமாகும். ஸ்கிரீன் ரீடர்கள் மற்றும் தேடுபொறிகளால் (search engines) அந்த உரையைத் (text) பிரித்தெடுக்க முடியாது.
நீங்கள் தேர்ந்தெடுத்த முறை உண்மையான vector PDF-ஐத் தருகிறதா என்பதை எப்போதும் சரிபார்க்கவும். உரையைத் தேர்ந்தெடுக்க (selectable) முடிய வேண்டும். 400 சதவீத ஜூமிலும் கோடுகள் தெளிவாக இருக்க வேண்டும். உங்கள் கற்பவர்கள் ஒரு அதிகாரப்பூர்வமான ஆவணத்தைப் பெறத் தகுதியானவர்கள், வெறும் PDF ஆகச் சேமிக்கப்பட்ட ஸ்கிரீன்ஷாட் அல்ல.
Vector வெளியீடு உங்கள் சேமிப்புச் செலவையும் (storage costs) குறைக்கும். ஒரு பக்க vector உரை ஐம்பது கிலோபைட்களாக இருக்கலாம். அதே பக்கம் ஒரு உயர் தெளிவுத்திறன் கொண்ட படமாக இருந்தால் இரண்டு மெகாபைட்டுகளுக்கு மேல் இருக்கலாம். பெரிய அளவில் செயல்படும்போது, இந்த வேறுபாடு முக்கியமானது.
நீங்கள் பயன்படுத்தக்கூடிய ஒரு முக்கியக் குறிப்பு
இதை நீங்களே உருவாக்குவது என்பது ஒரு SaaS சான்றிதழ் தளத்திற்கான பணத்தைச் சேமிப்பது மட்டுமல்ல; இது நம்பகத்தன்மையைப் பற்றியது. ஒரு கற்பவர் ஒரு ஆவணத்தை அச்சிட்டு, அதை ஒருவரிடம் கொடுத்து, அவர் ஒரு தொலைபேசி மூலம் அதை உடனடியாகச் சரிபார்க்கும்போது, நீங்கள் அவர்களுக்கு ஒரு நிரந்தரமான விஷயத்தைக் கொடுத்துள்ளீர்கள். வடிவமைப்பைக் கட்டுப்படுத்துவது நீங்கள். தரவைக் கட்டுப்படுத்துவது நீங்கள். அந்த நம்பிக்கை உங்கள் பிராண்டிற்குச் சொந்தமானது, ஒரு விற்பனையாளரின் (vendor) துணைப் பெயரினத்திற்கு (subdomain) அல்ல.
உங்கள் சொந்த Laravel செயலிகளில் சான்றிதழ் உருவாக்கம் மற்றும் சரிபார்ப்பை எவ்வாறு கையாளுகிறீர்கள்? உங்களுக்கு எது சிறப்பாகச் செயல்பட்டது என்பதைத் தெரிந்துகொள்ள விரும்புகிறேன், கருத்துப் பெட்டியில் (comments) பகிருங்கள்.
