تخطَّ إلى المحتوى

البدء السريع — أول ملف PDF لك في CodeIgniter 4

استدعِ الخدمة pdf داخل متحكّم، وأضِف محتوى إلى المستند، ثم أعِد استجابة تنزيل. يمنحك ذلك ملفًا بصيغة ⁨Portable Document Format⁩ (⁨PDF⁩) في ثلاثة أسطر، مع استجابة ⁨Hypertext Transfer Protocol⁩ (⁨HTTP⁩) واحدة.

Terminal window
composer require nextpdf/codeigniter

للاطّلاع على المتطلّبات وفحوص اكتشاف الحزمة، راجِع /⁨integrations/codeigniter/install/.⁩

أنشئ متحكّمًا يُعيد ملف ⁨PDF.⁩ تنشئ مكتبة Pdf مستندًا جديدًا لك، ثم تحوّل ذلك المستند إلى DownloadResponse من ⁨CodeIgniter.⁩

يضع كل مثال ⁨PHP⁩ في هذه الصفحة declare(strict_types=1); بعد وسم الفتح مباشرةً، في سطر مستقلّ (⁨PSR-12⁩ §⁨x1.x3.p11⁩؛ §⁨x1.x3.p34⁩).

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
use NextPDF\CodeIgniter\Config\Services;
final class InvoiceController extends BaseController
{
public function download(int $id): DownloadResponse
{
$pdf = Services::pdf();
$pdf->document()->addPage();
$pdf->document()->cell(0, 10, "Invoice #{$id}");
return $pdf->download("invoice-{$id}.pdf");
}
}

يُعيد Services::pdf() كائن Pdf جديدًا. وتتحقّق مجموعة الاختبارات الوظيفية للحزمة أيضًا من أن المستند الأساسي يكون جديدًا في كل استدعاء. يُنتج استدعاء download() كائن DownloadResponse مع وضع التوزيع attachment.

اربُط مسارًا بدالة المتحكّم داخل app/Config/Routes.php:

$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');

افتح /invoices/42/pdf. سيُنزّل المتصفّح invoice-42.pdf. تتضمّن الاستجابة Content-Type: application/pdf وترويسات تحصين الاستجابة الخاصة بالحزمة.

تنويعة — معاينة مضمَّنة باستخدام الدالة المساعِدة

قسم بعنوان «تنويعة — معاينة مضمَّنة باستخدام الدالة المساعِدة»

الدالة المساعِدة العامة pdf() مكافئة لـ Services::pdf(). استدعِ inline() لعرض ملف ⁨PDF⁩ في المتصفّح بدل تنزيله:

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
final class ReportController extends BaseController
{
public function preview(): DownloadResponse
{
$pdf = pdf();
$pdf->document()->addPage();
$pdf->document()->cell(0, 10, 'Monthly Report');
return $pdf->inline('report.pdf');
}
}

تنويعة — المستند المباشر و⁨PdfResponse⁩

قسم بعنوان «تنويعة — المستند المباشر و⁨PdfResponse⁩»

إذا كان لديك بالفعل كائن Document، فابنِ الاستجابة مباشرةً باستخدام PdfResponse. تمنحك الدالة المساعِدة pdf_document() مستندًا جديدًا ومهيّأً مسبقًا.

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
use NextPDF\CodeIgniter\Http\PdfResponse;
final class DocumentController extends BaseController
{
public function generate(): DownloadResponse
{
$document = pdf_document();
$document->addPage();
$document->cell(0, 10, 'Hello World');
return PdfResponse::download($document, 'hello.pdf');
}
}
  • متحكّم يستدعي خدمة ⁨NextPDF⁩ ويُعيد كائن DownloadResponse محدّد النوع.
  • نقطتا دخول متكافئتان: الصنف Services والدالتان المساعِدتان pdf() / pdf_document().
  • استجابة تحمل application/pdf، وترويسات الأمان الخاصة بالحزمة، واسم ملف منقّى.

للحفاظ على تركيز هذه المقدّمة الأولى، يتجاوز هذا الدليل التعليمي معالجة الأخطاء. للحصول على متحكّمات إنتاجية مع حقن التبعيات، ومعالجة الاستثناءات، وقابلية المراقبة، ومهمّة قائمة الانتظار، تابِع إلى /⁨integrations/codeigniter/production-usage/.⁩ تعرض تلك الصفحة التنويعات المحصّنة.

  • وسم فتح ⁨PHP⁩ في سطر مستقلّ ضمن أمثلة الشيفرة (⁨PSR-12 Extended Coding Style⁩ §⁨x1.x3.p11⁩).
  • صيغة عبارة ⁨declare⁩(⁨strict_types⁩=1) ضمن أمثلة الشيفرة (⁨PSR-12 Extended Coding Style⁩ §⁨x1.x3.p34⁩).
  • /⁨integrations/codeigniter/overview/⁩ — كامل سطح واجهة برمجة التطبيقات ⁨application programming interface⁩ (⁨API⁩).
  • /⁨integrations/codeigniter/configuration/⁩ — تغيير القيم الافتراضية والمسارات.
  • /⁨integrations/codeigniter/production-usage/⁩ — متحكّمات بمستوى الإنتاج ومهام غير متزامنة.
  • /⁨integrations/codeigniter/troubleshooting/⁩ — عندما لا يُعيد المسار أيّ ملف ⁨PDF.⁩