توليد تقارير PDF بلغة Swift (iOS/macOS)
يعد إنشاء مستندات PDF على منصات Apple إحدى المهام الأساسية عند تطوير تطبيقات الأعمال أو التقارير المالية أو أنظمة إدارة المستندات. على عكس مجموعة الويب، حيث يتم استخدام العديد من المكتبات الخارجية، في نظام Swift البيئي للعمل مع PDF، توجد أطر عمل مدمجة قوية وحلول خارجية متخصصة. في هذه المقالة، سنستعرض بالتفصيل جميع الأدوات الرئيسية لتوليد تقارير PDF بلغة Swift لنظامي iOS وmacOS.
أطر Apple المدمجة
توفر Apple طريقتين رئيسيتين لإنشاء مستندات PDF: UIGraphicsPDFRenderer (لـ UIKit) وPDFKit (للعمل مع ملفات PDF الموجودة). كما يتوفر في macOS NSGraphicsContext مع دعم PDF.
UIGraphicsPDFRenderer (iOS 10+)
هذه هي الأداة الرئيسية لتوليد PDF من محتوى UIKit. تتيح لك رسم النصوص والصور والجداول والرسومات التعسفية في سياق صفحة PDF.
import UIKit
func generateReport(data: String) -> Data { let pageSize = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4 let renderer = UIGraphicsPDFRenderer(bounds: pageSize) return renderer.pdfData { context in context.beginPage() // العنوان let title = "تقرير المبيعات" let attributes: [NSAttributedString.Key: Any] = [ .font: UIFont.boldSystemFont(ofSize: 24), .foregroundColor: UIColor.darkGray ] title.draw(at: CGPoint(x: 50, y: 50), withAttributes: attributes) // المحتوى let textAttributes: [NSAttributedString.Key: Any] = [ .font: UIFont.systemFont(ofSize: 14) ] data.draw(at: CGPoint(x: 50, y: 100), withAttributes: textAttributes) // خط فاصل context.cgContext.setStrokeColor(UIColor.lightGray.cgColor) context.cgContext.setLineWidth(1) context.cgContext.move(to: CGPoint(x: 50, y: 90)) context.cgContext.addLine(to: CGPoint(x: 545, y: 90)) context.cgContext.strokePath() }}PDFKit (iOS 11+, macOS 10.13+)
PDFKit هو إطار عمل عالي المستوى يسمح ليس فقط بإنشاء ملفات PDF، بل أيضاً بتحريرها. يدعم التعليقات التوضيحية والنماذج والإشارات المرجعية والعمل مع المستندات متعددة الصفحات.
import PDFKit
func createPDFWithText() -> PDFDocument { let page = PDFPage() let pdfDocument = PDFDocument() // إنشاء صفحة مع نص let text = "يتيح PDFKit إضافة النصوص والتعليقات التوضيحية بسهولة" let textAnnotation = PDFAnnotation( bounds: CGRect(x: 50, y: 700, width: 500, height: 100), forType: .freeText, withProperties: nil ) textAnnotation.contents = text textAnnotation.font = UIFont.systemFont(ofSize: 18) page.addAnnotation(textAnnotation) pdfDocument.insert(page, at: 0) return pdfDocument}المكتبات الخارجية لـ Swift
على الرغم من أن الأدوات المدمجة تغطي معظم المهام، إلا أن هناك حالات تتطلب وظائف متخصصة: العمل مع القوالب، أو التصدير إلى PDF من SwiftUI، أو دعم التخطيط المعقد.
SwiftUI وPDF (iOS 14+, macOS 11+)
بدءاً من iOS 14، يمكن تحويل عرض SwiftUI إلى PDF باستخدام ImageRenderer:
import SwiftUI
struct ReportView: View { var body: some View { VStack(alignment: .leading) { Text("التقرير الشهري") .font(.largeTitle) .foregroundColor(.blue) Text("بيانات شهر أغسطس 2024") .font(.headline) Divider() Text("الإيرادات: 1,234,567 ₽") .font(.body) } .padding() }}
func generatePDFFromSwiftUI() -> Data { let vie