توليد PDF في Swift (iOS/macOS): دليل شامل
إنشاء مستندات PDF هي إحدى المهام الشائعة في تطبيقات iOS وmacOS: بدءًا من إنشاء التقارير والفواتير وصولاً إلى تصدير البيانات وإنشاء الكتب الإلكترونية. في Swift، توجد عدة أدوات مدمجة وخارجية لذلك. في هذه المقالة، سنشرح بالتفصيل الطرق الرئيسية لتوليد PDF على منصات Apple، وإمكانياتها وأمثلة على استخدامها.
أطر عمل Apple المدمجة
توفر بيئة Apple أدوات قوية للعمل مع PDF دون الحاجة إلى تبعيات خارجية. أهمها:
- UIGraphicsPDFRenderer (iOS 10+) — واجهة برمجة تطبيقات حديثة لإنشاء PDF في UIKit.
- PDFKit — إطار عمل لعرض وتحرير وإنشاء PDF (متاح على iOS 11+ وmacOS 10.13+).
- Core Graphics (Quartz 2D) — واجهة برمجة تطبيقات منخفضة المستوى تعتمد على C للرسم وتوليد PDF.
1. UIGraphicsPDFRenderer — بداية بسيطة وسريعة
هذه هي الطريقة الأكثر ملاءمة لنظام iOS. تتيح لك إنشاء PDF متعدد الصفحات عن طريق الرسم باستخدام UIKit (UIView، UIImage، نص، إلخ).
import UIKit
func generatePDF() -> Data? { let pageSize = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4 let renderer = UIGraphicsPDFRenderer(bounds: pageSize)
let data = renderer.pdfData { context in context.beginPage()
// رسم النص let text = "مرحباً، عالم PDF!" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 24), .foregroundColor: UIColor.black ] text.draw(at: CGPoint(x: 50, y: 100), withAttributes: attributes)
// رسم الصورة if let image = UIImage(named: "logo") { image.draw(in: CGRect(x: 50, y: 200, width: 200, height: 100)) }
// الصفحة الثانية context.beginPage() let text2 = "هذه هي الصفحة الثانية" text2.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) }
return data}
// حفظ في ملفif let pdfData = generatePDF() { let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let pdfURL = documentsPath.appendingPathComponent("document.pdf") try? pdfData.write(to: pdfURL) print("تم حفظ PDF: \\(pdfURL)")}2. PDFKit — للعمل المتقدم مع المستندات
يوفر PDFKit الفئات PDFDocument وPDFPage. إنه مثالي لإنشاء PDF من نص منسق وجداول وصور. يدعم العمل مع التعليقات التوضيحية والإشارات المرجعية والنماذج.
import PDFKit
func createPDFWithPDFKit() -> PDFDocument { let document = PDFDocument()
// إنشاء صفحة عبر NSAttributedString let pageRect = CGRect(x: 0, y: 0, width: 612, height: 792) // US Letter let text = NSAttributedString(string: "مثال PDF باستخدام PDFKitالسطر الثاني") let page = PDFPage()
// التقديم في سياق الصفحة let renderer = UIGraphicsImageRenderer(bounds: pageRect) let image = renderer.image { ctx in text.draw(at: CGPoint(x: 72, y: 72)) }
// إنشاء صفحة من الصورة (مبسط) // في المشروع الحقيقي، استخدم PDFPage مع drawBlock let finalPage = PDFPage(image: image) ?? PDFPage() document.insert(finalPage, at: 0)
return document}
// حفظif let document = createPDFWithPDFKit() as? PDFDocument { let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("pdfkit_example.pdf") document.write(to: url)}هام: PDFKit متاح فقط على iOS 11+/macOS 10.13+. للإصدارات الأقدم، استخدم UIGraphicsPDFRenderer.
3. Core Graphics (Quartz 2D) — أقصى تحكم
إذا كا
أيضاً في المكتبة
معالجة Markdown في C# (.NET): المكتبات والأدوات
توليد PDF في Swift (iOS/macOS): UIGraphicsPDFRenderer و PDFKit و Core Graphics
دليل Chalk لجافا سكريبت (Node.js): شامل مع أمثلة
العمل مع CSV في Swift (iOS/macOS) — المكتبات وأمثلة الكود
اختبار C++: نظرة عامة على الأطر والأدوات (Google Test, Catch2, doctest)