توليد PDF في Swift (iOS/macOS): نظرة عامة على الأدوات والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

توليد PDF في Swift (iOS/macOS): دليل شامل



يعد إنشاء مستندات PDF إحدى المهام الرئيسية عند تطوير التطبيقات لنظامي iOS وmacOS. التقارير والفواتير والشهادات والكتب الإلكترونية - كل هذا يتطلب أداة موثوقة ومرنة لتوليد PDF. في نظام Swift البيئي، توجد عدة طرق: من أطر Apple المدمجة إلى المكتبات الخارجية ذات الإمكانيات المتقدمة. في هذه المقالة، سنستعرض الطرق الرئيسية لتوليد PDF ومزاياها وعيوبها، بالإضافة إلى تقديم أمثلة كود عملية.



1. PDFKit - إطار Apple المدمج



PDFKit هو إطار عمل قوي من Apple، متاح على iOS 11+ وmacOS 10.13+. يوفر واجهة برمجة تطبيقات عالية المستوى لإنشاء وعرض وتحرير مستندات PDF. الإمكانيات الرئيسية:

  • إنشاء PDF من UIView أو UIImage أو نص
  • إضافة التعليقات التوضيحية والنماذج والروابط التشعبية
  • العمل مع المستندات متعددة الصفحات
  • دعم Core Graphics للرسم المخصص


مثال على إنشاء PDF من UIView:

import PDFKit

func generatePDF(from view: UIView) -> Data? { let pdfData = NSMutableData() UIGraphicsBeginPDFContextToData(pdfData, view.bounds, nil) UIGraphicsBeginPDFPage() guard let context = UIGraphicsGetCurrentContext() else { return nil } view.layer.render(in: context) UIGraphicsEndPDFContext() return pdfData as Data}


هذه الطريقة مناسبة إذا كنت بحاجة إلى "التقاط صورة" سريعة لواجهة موجودة. ومع ذلك، بالنسبة للتنسيقات المعقدة (الجداول، الرؤوس والتذييلات، الخطوط المخصصة)، من الأفضل استخدام Core Graphics مباشرة.



2. Core Graphics (Quartz 2D) - حل منخفض المستوى



يمنحك Core Graphics تحكمًا كاملاً في عملية الرسم. أنت تعمل مع سياق PDF، وترسم الخطوط والنصوص والصور، وتدير الصفحات. هذه هي الطريقة الأكثر مرونة، ولكنها أيضًا الأكثر استهلاكًا للوقت.



مثال على إنشاء PDF بسيط مع نص:

import UIKit

func createPDFWithText() -> Data? { let pageSize = CGRect(x: 0, y: 0, width: 612, height: 792) // A4 let data = NSMutableData() UIGraphicsBeginPDFContextToData(data, pageSize, nil) UIGraphicsBeginPDFPage() guard let context = UIGraphicsGetCurrentContext() else { return nil } let text = "مرحباً، عالم PDF!" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 24), .foregroundColor: UIColor.black ] text.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) UIGraphicsEndPDFContext() return data as Data}


بالنسبة للمستندات المعقدة (الجداول، الصور، ترقيم الصفحات)، ستحتاج إلى كتابة الكثير من الكود المساعد. لكن في المقابل، تحصل على أقصى أداء وأصغر حجم ملف.



3. TPPDF - مكتبة خارجية مفتوحة المصدر



TPPDF (GitHub: techprimate/TPPDF) هي مكتبة Swift لتوليد PDF ببناء جملة تصريحي. تدعم:

  • النصوص والصور والجداول والقوائم
  • الرؤوس والتذييلات وترقيم الصفحات
  • النقل التلقائي للمحتوى بين الصفحات
  • الخطوط والألوان والحدود المخصصة


التثبيت عبر Swift Package Manager:

// Package.swiftdependencies: [    .package(url: "https://github.com/techprimate/TPPDF.git", from: "2.0.0")]


مثال على إنشاء مستند بجدول:

import TPPDF

func generateInvoice() -> Data? { let document = PDFDocument(format: .a4) // إضافة عنوان document.add(text: "فاتورة رقم 123", style: PDFTextStyle.heading1) // إنشاء جدول let table = PDFTable(rows: 3, columns: 2) table[0][0].content = "المنتج" table[0][1].content = "السعر" table[1][

توصيات