استيراد SVG إلى Form XObject
تحلّل THotPDF.ImportSVGFormXObject SVG مرة واحدة وتسجّل PDF Form XObject واحدًا قابلًا لإعادة الاستخدام، بينما تضعه THPDFPage.DrawSVGFormXObject بأي حجم، وتنشئ اختياريًا annotations من نوع رابط على الصفحة
التصريح
function ImportSVGFormXObject(const Input: TBytes): AnsiString; overload;
function ImportSVGFormXObject(
const Input: TBytes;
out Statistics: THPDFSVGImportStatistics
): AnsiString; overload;
procedure DrawSVGFormXObject(
const FormName: AnsiString;
X, Y, W, H: Single;
AddLinks: Boolean = True
);
ملف تعريف متجهي (Vector)
- تشمل الأشكال الهندسية مسارات ذات أقواس إهليلجية، ومستطيلات، ومستطيلات مدوَّرة الزوايا، ودوائر، وأشكال بيضاوية، وخطوطًا، وخطوطًا متعددة، ومضلعات، وتحويلات، ومجموعات، ورموزًا، ومراجع
useالخاصة بالأجزاء فقط - يشمل الدهان ألوان RGB الصلبة، وشفافية التعبئة والحد (stroke)، وقواعد التعبئة، وأطراف الخطوط ووصلاتها، ومصفوفات الشرطات (dash) والإزاحات الموروثة، وحدود miter، ونطاقات التدرج المتجهي الخطي والشعاعي، وحدود تدرج مدعومة بأنماط بلاط ملونة، ومسارات القص
- تستخدم عتامة الكائنات والمجموعات أشكال شفافية متجهية معزولة، فيُركَّب السليل المتداخل قبل تطبيق عتامته المحيطة
- تصبح الأقنعة موارد Form بمجموعات شفافية مع أقنعة PDF الناعمة من نوع Alpha أو Luminosity، بما في ذلك قص منطقة القناع و
maskUnitsوmaskContentUnitsومراجع الأقنعة المتداخلة المحدودة - يشمل CSS محدِّدات النوع والصنف والمعرّف والمركّبة المضمَّنة، وسمات العرض، والأنماط المضمَّنة، والخصوصية (specificity)، وترتيب المصدر، وقيمة
!important - تضمّ استيرادات المستند مجموعات خطوط Unicode مقسَّمة وخرائط
ToUnicodeعبر محرك التأليف الأصلي، وتستخدم سلاسل خط الاحتياط المهيأة، وتحاذي تشغيلات الاحتياط على خط أساس أبجدي مشترك، وتحسب تثبيت النص من تقدّمات المحارف الفعلية - تصبح صور PNG وJPEG المضمَّنة Image XObjects قابلة لإعادة الاستخدام، وتحتفظ بألفا PNG كقناع ناعم، وتدعم
preserveAspectRatio="none"وmeetالموسَّط وsliceالموسَّط - تُحفَظ روابط HTTP وHTTPS والبريد كـ annotations روابط PDF مدركة للتموضع دون أن تصبح جزءًا من stream الـForm القابل لإعادة الاستخدام
حدود النص والدهان
يدعم النص تعبئة صلبة، ونُسخًا غامقة ومائلة، وحجم خط، وتحويلات، وتثبيتًا (anchoring)، وعتامة، وقصًا هندسيًا؛ ودهان النص المتدرج يفشل فشلًا آمنًا، وتبقى كل عقدة نص أو tspan تشغيلة مستقلة التموضع لا محرك تخطيط تدفق نص SVG كاملًا
يحتفظ استيراد نص المستند بالوجه الغامق والمائل المحدَّد عبر فحوص محارف مدركة للنمط وتخطيط احتياطي، ويحفظ حدود الحبر المقيسة، ويرفض المحارف غير المحلولة فعلًا
يحفظ نص UTF-8 ومراجع محارف XML الست عشرية أو العشرية القيمَ القياسية Unicode نفسها على Delphi وFPC، بما فيها القيم التكميلية الممثَّلة بأزواج UTF-16 البديلة
تستخدم نسخة HPDFBuildSVGFormData المستقلة بلا باني نصٍّ تقدّمات مقيسة لعائلات Base 14 وهي Helvetica وTimes وCourier وترفض المحارف خارج WinAnsi بدل استبدالها بعلامات استفهام؛ وتقبل النسخة المزوَّدة بـTHPDFSVGTextRunBuilder أشكال نص مضمَّنة ومقاييس يوفرها المستدعي
يحتفظ التدرج بتقريب النطاقات المتجهية المحدود؛ وتتطلب الموارد الشفافة إصدار PDF 1.4 ويرفضها الملف التعريفي الصارم PDF/A-1
أنماط الحدود
تعمل stroke-dasharray وstroke-dashoffset وstroke-miterlimit عبر سمات العرض وCSS المضمَّن والأنماط المضمَّنة والوراثة، بما في ذلك المجموعات ونسخ use الخاصة بالأجزاء
تقبل مصفوفات الشرطات أعدادًا مفصولة بفواصل أو فراغات وأطوالًا مدعومة؛ وتستخدم النسب المئوية قطر viewport المُطبَّع، المحسوب كـ sqrt((viewWidth * viewWidth + viewHeight * viewHeight) / 2)
تُكرَّر المصفوفات ذات الطول الفردي لتكوّن نمطًا زوجي الطول، ويبدأ كل مسار فرعي النمط من جديد، وتلتف الإزاحات الموجبة أو السالبة حول النمط الكامل؛ وتنتج none والمصفوفات الصفرية كلها حدودًا صلبة
تحتفظ شرطات الطول الصفري المرسومة بعلامات أطراف دائرية أو مربعة؛ وتتشارك الحدود الصلبة العادية وأنماط حدود التدرج والقصوص والأقنعة ومجموعات العتامة المعزولة إعدادات الحد المختارة
حد miter الافتراضي هو 4؛ وتُقبل قيم SVG 2 بين 0 و1 وتستخدم وصلات مشطوفة (bevel) حيث يتجاوز miter الحد، بينما تحتفظ حدود موارد التدرج والشفافية بوصلات حادة ضمن الحد المختار
يستخدم العرض الأصلي هندسة شرطات محدودة لحفظ الإزاحات والأطوال الكسرية والمصفوفات الأطول من حد قلم GDI، مع تسطيح منحنيات تكيّفي ووصلات مرسومة متصلة عبر حدود المقاطع
يبقى معايرة الشرطات عبر pathLength خارج هذا الملف التعريفي؛ والأشكال التي تجمع مصفوفة شرطات غير صلبة مع pathLength تفشل فشلًا آمنًا بدل استخدام أطوال غير معايرة بصمت
تتبع دلالات الحد نموذج حدود SVG 2 ضمن ميزانيات المحلِّل والعارض الموضحة أدناه
إعداد تشكيل النص
يستخدم نص SVG المضمَّن إعدادات المستند المستورد ShapingFeatures وAutoShapeArabic وAutoShapeSyriac وAutoShapeNko وAutoShapeAdlam وAutoShapeHanifiRohingya، مع اختيارات GSUB للنص البرمجي واللغة وسلاسل خط الاحتياط
تنطبق هذه الإعدادات أثناء قياس التقدّمات وتوليد مظاهر النص معًا دون تغيير إعدادات المستدعي؛ ويبقى التشكيل اختياريًا (opt-in) ويتطلب خطًا يوفر المحارف وجداول OpenType المطلوبة
يقبل كل مظهر نص مولَّد 256 اختيار خط تشكيل مختلفًا على الأكثر و64 ميبيبايت من بيانات الخط الخام التراكمية؛ وبيانات الخط غير المدعومة أو تجاوز الحد يُخفقان الاستيراد ذريًا
عتامة الكائنات والمجموعات
تنطبق opacity مرة واحدة على نتيجة الدهان الكاملة لعقدتها ولا تُورَّث للسليل؛ بينما تحتفظ fill-opacity وstroke-opacity بقيم دهانهما الموروثة المنفصلتين
يظل مستطيلان أحمران معتمان متداخلان داخل <g opacity="0.5"> شفافين بالدرجة نفسها في منطقة تداخلهما، بينما يصير مستطيلان شفافان مستقلان أغمق حيث يتداخلان
تُركَّب المجموعات المتداخلة بالترتيب: فعتامتان محيطتان بقيمة 0.5 تعطيان 0.25 فعلية فوق سليل معتم، ولا تتجاوز عتامة صريحة بقيمة 1 لدى سليلٍ عتامةَ مجموعته المحيطة
تستخدم عقد SVG الجذرية والحاويات والروابط ومراجع الأجزاء والنص والصور والأشكال مسار عتامة الكائنات نفسه؛ وتحفظ مراجع use الخاصة بالأجزاء أنماط النسخة والعقدة المشار إليها معًا
تبقى ألفا التعبئة والحد مستقلتين، بما في ذلك عند تداخلهما داخل كائن شفاف، وتُجمَع ألفا مواقف التدرج مع ألفا الدهان ذي الصلة قبل تركيب الكائن
تخص تأثيرات القص والإقناع عقدتها بدل وراثتها كإعدادات دهان للسليل؛ وتبقى هندسة الروابط مدركة للتموضع، وتحتفظ حدود الـForm المعزولة تحفظيًا بالحدود المحوَّلة والأطراف
يحتفظ المستورِد بالعمليات المتجهية وأشكال النص المضمَّنة وموارد الصور والأنماط والأقنعة داخل المجموعات المعزولة؛ ولا يُسطّح SVG كله إلى bitmap
يتبع السلوك المدعوم نموذج عتامة الكائنات والمجموعات في SVG؛ وتبقى سائر قيود النص والتدرج والهندسة المحدودة في هذه الصفحة سارية
الأمان والميزانيات
يقبل المستورِد SVG عاديًا أو مضغوطًا بـgzip حتى 8 ميبيبايت، ويحدّ المدخل الموسَّع بـ32 ميبيبايت، والعمليات المجمَّعة للمحتوى الرئيسي والأنماط والأقنعة والمجموعات بـ16 ميبيبايت، والعقد بـ4,096، والتداخل بـ64 مستوى، وقواعد CSS بـ256، وقيم المسار بـ100,000
تقبل الصور المضمَّنة حمولات data:image/png;base64, وdata:image/jpeg;base64, بـ Base64 صارم فقط، بحد أقصى 128 صورة و16,384 بكسلًا لكل بُعد و16,777,216 بكسل مفكوكًا عبر كل الصور؛ وتُفحص الأبعاد قبل فك الترميز الأصلي
يقتصر النص على 128 تشغيلة و65,536 وحدة UTF-16 للتشغيلة، وتقتصر أنماط حدود التدرج والأقنعة ومجموعات العتامة المعزولة على 128 موردًا لكل منها؛ ومراجع الأقنعة العودية تفشل فشلًا آمنًا
تحوي مصفوفات الشرطات 64 مدخل مصدر على الأكثر قبل توسعة المصفوفات الفردية؛ ويجب ألا تقل المدخلات الموجبة عن 0.000001 وحدة مستخدم، وألا تتجاوز الأطوال المفردة والدورة المُطبَّعة 1,000,000,000، وألا تتجاوز الإزاحات المطلقة 1,000,000,000، وأن يبقى حد miter بين 0 و1,000,000
تقتصر تأثيرات الشفافية المتداخلة الفعلية على ثمانية مستويات لمطابقة العارض الأصلي، بصرف النظر عن حد عمق شجرة SVG؛ والحاويات المتداخلة العادية بلا تأثيرات شفافية لا تستهلك هذا العدد
يجب أن تكون حدود تأثيرات الشفافية منتهية وأن تبقى كل إحداثية ضمن قيمة مطلقة تبلغ 1,000,000,000؛ والاستيرادات خارج هذا الملف التعريفي الإحداثي المحدود تفشل قبل تسجيل المجموعات أو الأقنعة
يرجع الاستيراد الفاشل الكائنات المولَّدة وأشكال النص المضمَّنة ومدخلات السجل وحالة الإصدار وألوان الجهاز، بحيث يستطيع المستدعي إعادة استخدام المستند نفسه والحفاظ على معاملة رسم بياني محيطة
تُرفض بأمان (fail closed) السكربتات، ومعالجات الأحداث، وDTDs، وعنصر foreignObject، وأنواع وسائط data غير المدعومة، وروابط JavaScript، وروابط الدهان أو موارد الصور الخارجية
تبقى مراجع الأجزاء مثل url(#gradient) وurl(#clip) وhref="#symbol" داخل المستند المُحلَّل، ولا تُطلق أبدًا وصولًا إلى ملف أو شبكة
الإحصاءات
تُبلغ THPDFSVGImportStatistics بعدد العقد، وقواعد CSS، والتدرجات، وحدود التدرج، والأقنعة، والصور، والروابط، ومقاطع النص، ومجموعات العتامة المعزولة عبر GroupCount، وبايتات العمليات المولَّدة المجمَّعة للمحتوى الرئيسي والأنماط والأقنعة والمجموعات
تعرض HPDFBuildSVGFormData المحلِّل المحدود بشكل منفصل عبر THPDFSVGFormData وTHPDFSVGLinkInfo للمستدعين الذين يحتاجون محتوى Form أو الأبعاد الجوهرية أو موارد العتامة أو حمولات الصور أو streams الأنماط والأقنعة أو أسماء موارد النص أو بيانات الروابط الوصفية قبل التسجيل؛ ويوفر Groups streams عمليات المجموعات المعزولة وحدود Form المتحفظة
مثال
Document.BeginDoc;
FormName := Document.ImportSVGFormXObject(SVGBytes, Statistics);
if FormName = '' then
raise Exception.Create('SVG import failed');
Document.CurrentPage.DrawSVGFormXObject(
FormName,
36,
72,
240,
120,
True
);
Document.CurrentPage.DrawSVGFormXObject(
FormName,
320,
72,
120,
60,
False
);
انظر أيضًا: THotPDF.ImportSVGFormXObject، THPDFPage.DrawSVGFormXObject، استيراد HTML5 ذو الوسائط المُقسَّمة إلى صفحات