عند إنشاء ملفات PDF في Laravel باستخدام DomPDF، قد يكون التعامل مع الصور أمرًا صعبًا. أحد التحديات الشائعة هو استهلاك الذاكرة، خاصة عند التعامل مع صور متعددة في ملف PDF واحد. في هذا المنشور، سأشارك حلاً قويًا لتضمين الصور في ملفات Laravel PDF أثناء إدارة الذاكرة بكفاءة.
يتطلب DomPDF أن يتم تضمين الصور مباشرة في HTML كسلاسل مشفرة بـ base64. ومع ذلك، فإن تحميل صور متعددة في الذاكرة في وقت واحد يمكن أن يتجاوز بسرعة حدود ذاكرة PHP، خاصة عند إنشاء كتالوجات أو تقارير كبيرة.
لقد قمت بتطوير منهج فعال للذاكرة:
إليك الحل الكامل:
@php ini_set('memory_limit', '256M'); function processImage($imagePath) { if (!file_exists($imagePath)) { // Return a 1-pixel transparent image as fallback return 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; } // Read file in chunks to avoid memory issues $handle = fopen($imagePath, 'rb'); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); // Read 8KB at a time } fclose($handle); return base64_encode($contents); } @endphp
دعونا نحلل المكونات الرئيسية:
ini_set('memory_limit', '256M');
نبدأ بوضع حد معقول للذاكرة. عادةً ما تكون المساحة 256 ميجابايت كافية لمعظم مهام إنشاء ملفات PDF مع منع استخدام الذاكرة الجامحة.
$handle = fopen($imagePath, 'rb'); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); }
بدلاً من تحميل الصورة بأكملها إلى الذاكرة مرة واحدة باستخدام file_get_contents()، نقوم بما يلي:
هذا الأسلوب يقلل بشكل كبير من استخدام الذاكرة عند معالجة الصور الكبيرة.
if (!file_exists($imagePath)) { return 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; }
إذا كان ملف الصورة مفقودًا، فإننا نعيد ملف PNG شفافًا بتشفير Base64 مقاس 1 × 1 بدلاً من إلقاء خطأ. وهذا يضمن أن إنشاء ملف PDF الخاص بك لن يفشل بسبب فقدان الصور.
إليك كيفية تنفيذ هذا الحل في قالب Blade الخاص بك:
@php $imagePath = $item['image_url']; if (empty($item['image_url'])) { $imagePath = public_path('images/placeholder.jpg'); } $base64Image = processImage($imagePath); @endphp![]()
القالب:
يحمل $item['image_url'] المسار المطلق الكامل للصورة مثل /var/www/html/....
لضمان عرض صورك بشكل صحيح في ملف PDF، خذ بعين الاعتبار خصائص CSS التالية:
.item-image img { object-fit: cover; object-position: center; border-radius: 0.375rem; max-width: 100%; height: auto; }
وهذا يضمن الصور:
يقدم هذا الحل العديد من المزايا:
لا يجب أن يكون إنشاء ملفات PDF تحتوي على صور في Laravel عملية تستهلك الكثير من الذاكرة. من خلال تنفيذ قراءة الملفات المستندة إلى أجزاء ومعالجة الأخطاء بشكل صحيح، يمكنك إنشاء أنظمة قوية لإنشاء ملفات PDF تعمل بشكل موثوق على نطاق واسع.
تذكر ضبط حد الذاكرة وحجم القطعة بناءً على احتياجاتك المحددة وقيود الخادم. راقب استخدام ذاكرة تطبيقك في الإنتاج لضمان الأداء الأمثل.
يعد هذا الحل مفيدًا بشكل خاص لإنشاء كتالوجات المزادات أو قوائم المنتجات أو أي مستندات PDF أخرى تتطلب صورًا متعددة مع الحفاظ على الأداء والموثوقية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3