Pro الإصدارالاستقرار: تجريبي
حالة قدرة معاينة C2PA
لمحة سريعة
قسم بعنوان «لمحة سريعة»حالة قدرة معاينة. غير متوفّرة عامًا أبدًا. تذكر هذه الصفحة ما يفعله سطح C2PA اليوم بوصفه معاينة. وهي ليست ادّعاء مطابقة، ولا اعتمادًا، ولا عبارةً بأن NextPDF يُنتج ملفات موقَّعة بـ C2PA. والسطح معاينة ولا يُوصَف أبدًا بأنه متوفّر عامًا.
يكشف NextPDF Pro عن سطح معاينة لاعتمادات المحتوى (C2PA) عبر
C2paCapabilityStatus. وهذه الصفحة هي الحدّ الصادق لذلك السطح: ما هو
متوفّر دائمًا، وما يبقى خلف عَلَم مسوّد اختياري، ولماذا لا يُقدَّم أي
ادّعاء بالحالة النهائية.
طبقتان: وصلة مستقرّة مقابل توليف مُبوَّب
قسم بعنوان «طبقتان: وصلة مستقرّة مقابل توليف مُبوَّب»للسطح طبقتان مفصولتان بوضوح، والتمييز بينهما هو كامل المقصد من الحدّ:
- متوفّرة دائمًا — الوصلة المستقرّة. يشكّل
ManifestStoreوواجهةC2paManifestEmbedderوصلةً مُجمَّدة محايدة المورِّد. ويمكنهما حمل مخزن بيان في الاتجاهين: يكتبembed()بايتات مخزن قدّمه المُستدعي في PDF، ويُحلِّلextract()مخزنًا خارجًا منه (مُعيدًاnullعند عدم وجود أي منها). وهذه الوصلة لا تُولِّف أي ادّعاء — فهي لا تُجمِّع تأكيدات أو ادّعاءات بنفسها؛ بل تنقلManifestStoreمعتمًا يملكه المُستدعي بالفعل. - خلف العَلَم الاختياري — توليف الادّعاء. أما بناء مخزن بيان
فعليًّا (تجميع الادّعاء وتأكيد تجزئة المُكوِّن) فيقع فقط في
ExperimentalC2paEmbedder، مُبوَّبًا خلف عَلَم بيئة مُعطَّل افتراضيًا. وهذا هو الجزء ذو الشكل المسوّد، الذي يتغيّر دون إشعار.
فالعبارة الدقيقة هي: الاستخراج وحمل البايتات قابلان للوصول دائمًا؛ وتوليف محتويات البيان قابل للوصول فقط عند تفعيل عَلَم المعاينة صراحةً.
لماذا يعمل بهذه الطريقة
قسم بعنوان «لماذا يعمل بهذه الطريقة»القرار الحامل يفصل وصلة نقل مستقرّة عن مسار التوليف المتقلّب، لا
مُضمِّنًا واحدًا يفعل كل شيء. فملف C2PA-PDF لا يزال تملكه مجموعة عمل
خارجية وهو غير مُجمَّد. وصندوق توقيع الادّعاء فيه (c2cs، بنية COSE_Sign1)
هو الجزء الأكثر احتمالًا للانحراف. لذا يُغفِل التوليف ذلك الصندوق
ويقع خلف عَلَم مُعطَّل افتراضيًا، بينما لا يعتمد الاستخراج والحمل على أي
حقل غير مُجمَّد ويبقى قابلًا للوصول للجميع. ويكشف كائن الحالة النضج
كبيانات، مع ترميز generallyAvailable وconformanceClaimed بصلابة على
false، بحيث لا يخلط المُستدعون نيّة المُنتِج بنتيجة مُتحقَّق منها. ويتيح
ذلك الفصل للفرق تبنّي الوصلة الدائمة الآن وإضافة محوِّل موقَّع لاحقًا، دون
أي وعد بتنسيق سلكي لا يستطيع NextPDF الوفاء به بعد.
خلفية التصميم: المطابقة التي يمكنك تسليمها لمُدقِّق.
حالة قدرة المعاينة
قسم بعنوان «حالة قدرة المعاينة»يُبلِغ C2paCapabilityStatus عن حالة السطح صراحةً كبيانات، لا
نثرًا. وخاصّيتاه generallyAvailable وconformanceClaimed مُرمَّزتان
بصلابة على false وتبقيان false بصرف النظر عن العَلَم؛ وتفعيل المعاينة
يقلب فقط previewEnabled. ورمز maturity هو التسمية غير المُدَّعية
preview-draft، ويُسجِّل specPin التزام المسودّة المُثبَّت. ويقرأ المُستدعي
“معاينة”، لا “موقَّع ومُتحقَّق منه”.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;
// Reads the env flag live; performs no I/O.$status = C2paCapabilityStatus::current();
$status->previewEnabled; // bool — true only if the opt-in env flag is set$status->generallyAvailable; // false (always)$status->conformanceClaimed; // false (always)$status->maturity; // 'preview-draft'$status->specPin; // '4e2afed8' (pinned draft commit, short)$status->envGate; // 'NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT'
echo $status->summary();// "C2PA preview-draft surface is present but switched off;// the C2PA-PDF profile is not yet final."تُديم مواصفة C2PA مجموعةُ عمل خارجية، والملف الذي سيستهدفه NextPDF غير مُجمَّد. ولأن الملف غير مُجمَّد، تمتنع المعاينة عمدًا عن أي ادّعاء بالحالة النهائية. وعندما يستقرّ ملف مجموعة العمل، فإن حالة السطح — لا تسويقه — هي ما سيتغيّر.
تفعيل المعاينة
قسم بعنوان «تفعيل المعاينة»الخيار الاختياري متغيّر بيئة عملية واحد،
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT. يُقرَأ حيًّا ويُقارَن بصرامة
بالسلسلة "1" — وأي قيمة أخرى (بما في ذلك 0 أو true أو yes أو
السلسلة الفارغة أو الغياب) تُعامَل على أنها مُعطَّلة. ولا يُفعِّله ترخيص
Pro وحده؛ بل يجب على المُشغِّل أن يختار الانضمام بوعي.
بداية سريعة
قسم بعنوان «بداية سريعة»// Opt in for the current process BEFORE constructing the embedder.putenv('NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1');
use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
$embedder = new ExperimentalC2paEmbedder();
// Synthesise a draft-shaped Manifest Store binding the host PDF by SHA-256.$pdfBytes = file_get_contents('input.pdf');$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');
// The result is an opaque ManifestStore; $store->toBytes() is its serialisation.استخدام بأسلوب الإنتاج
قسم بعنوان «استخدام بأسلوب الإنتاج»في نشر حقيقي، اضبط العَلَم عند الإقلاع (لا عبر putenv() في وقت التشغيل)،
وبوِّبه على انضمام بشري صريح، وتحقّق من حالة القدرة قبل
لمس المُضمِّن التجريبي بحيث لا يُبلَغ مسار المسودّة إلا عن قصد.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
// Set NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1 in the environment at process boot.
$status = C2paCapabilityStatus::current();
if (!$status->previewEnabled) { // Flag off: do NOT instantiate the experimental embedder — its // constructor would throw. Fall back to your non-preview path. return;}
// Surface the draft pin to the operator. The bytes are transient:// re-embed once a stable adapter ships. Run `composer c2pa:draft-status`// in CI to fail the build if the pinned snapshot goes stale.$pinnedDraft = ExperimentalC2paEmbedder::SPEC_PIN_SHA; // 4e2afed8…$pinnedDate = ExperimentalC2paEmbedder::SPEC_PIN_DATE; // 2026-04-26
$embedder = new ExperimentalC2paEmbedder();$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');الإغلاق الآمن عند إيقاف العَلَم
قسم بعنوان «الإغلاق الآمن عند إيقاف العَلَم»لا يوجد ارتداد صامت. إذا أُنشئ ExperimentalC2paEmbedder بينما
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT ليس "1" بالضبط، يطرح المُنشئ
LogicException تذكر رسالته العَلَم ومتغيّر البيئة وSHA/تاريخ
المسودّة المُثبَّت. ولا يمكن لمُستدعٍ أن يُسلسِل بايتات
ذات شكل مسوّد في PDF إنتاجي بمجرّد حيازته ترخيص Pro.
ومسار الاستخراج المستقرّ مُغلَق بأمان أيضًا، لكن بصورة مختلفة: يُعيد
extract() قيمة null عند عدم وجود مخزن بيان (الحالة الشائعة، تُبقى
رخيصةً وخاليةً من الاستثناءات)، ويطرح صنفًا فرعيًا من C2paException —
JumbfBombException أو JumbfCycleDetectedException أو
JumbfDepthExceededException أو MalformedJumbfException — عندما يكون مخزن
موجودًا لكنه ينتهك ثوابت التحصين العدائي في المُحلِّل (العمق،
والدورة، والحجم، والعدد). وهذه لا تُبتلَع بصمت أبدًا.
الحدّ الصادق
قسم بعنوان «الحدّ الصادق»اللغة التالية لا تُستخدم لهذا السطح، بحكم السياسة، وينبغي ألّا تظهر في أي وثائق أو واجهة مستخدم أو تسويق مُشتقّ منه:
- “C2PA conformant” أو “C2PA compliant”.
- “C2PA certified”.
- “C2PA signed” كقدرة منجَزة ومُؤكَّدة.
- “GA” / “generally available”.
ما هو السطح بصدق: وصلة مستقرّة يمكنها تحليل (استخراج) وحمل
(تضمين) مخزن بيان C2PA، بالإضافة إلى مُضمِّن تجريبي مُعطَّل افتراضيًا
يُولِّف محتويات بيان ذات شكل مسوّد، وكائن حالة يُبلِغ عن
حالة معاينته الذاتية. وما هو ليس: مُنتِجًا لاعتمادات C2PA موثَّقة وقابلة
للتحقّق. وتحديدًا، يُغفِل المُضمِّن التجريبي عمدًا صندوق توقيع الادّعاء
(c2cs) — وهو جزء COSE_Sign1 من المواصفة الأكثر احتمالًا للانحراف —
فحتى مع تفعيل العَلَم، تكون المُخرجات بايتات غير موقَّعة ذات شكل مسوّد. وملف
مجموعة العمل غير مُجمَّد؛ والحدّ هو المقصد.
التنسيق السلكي الذي يُصدره المُضمِّن التجريبي مُثبَّت على التزام مسودّة
من c2pa-org/specifications (SPEC_PIN_SHA = 4e2afed8…، بتاريخ 2026-04-26)،
مكشوف كثابت عام بحيث يمكن للمُستدعين تثبيت الـ SHA الذي يتوقّعونه.
سطح الـ API
قسم بعنوان «سطح الـ API»| الرمز | الدور |
|---|---|
C2paCapabilityStatus | كائن قيمة حالة صادق وقابل للقراءة آليًا. current() يقرأ عَلَم البيئة حيًّا؛ وgenerallyAvailable / conformanceClaimed دائمًا false؛ وsummary() لا يحمل أي ادّعاء توفّر عام/مطابقة. |
ManifestStore | كائن قيمة مخزن بيان غير قابل للتغيير. نوع الوصلة المستقرّة؛ يحمل البايتات في الاتجاهين. لا مُوصِّلات على مستوى الادّعاء. متوفّر دائمًا. |
C2paManifestEmbedder | SPI مُجمَّد محايد المورِّد: embed() / extract(). لا توليف ادّعاء. extract() يُعيد null عند عدم الوجود. متوفّر دائمًا. |
ExperimentalC2paEmbedder | توليف مُعطَّل افتراضيًا. buildManifestStore() يُجمِّع بيانًا مسوّدًا؛ ويطرح المُنشئ LogicException ما لم يكن عَلَم البيئة "1" بالضبط. |
Feature::PREVIEW_C2PA_DRAFT | عَلَم اختياري محصور. ENV_PREVIEW_C2PA_DRAFT = NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT؛ وisEnabled() صارم === '1'. |
الحالات الحدّية والمزالق
قسم بعنوان «الحالات الحدّية والمزالق»- مُعطَّل افتراضيًا، انضمام صارم. التوليف خلف
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT، يُقرَأ بصرامة كـ=== '1'. وأي شيء آخر مُعطَّل؛ ولا يُفعِّله ترخيص Pro وحده. - إغلاق آمن وقت الإنشاء.
new ExperimentalC2paEmbedder()يطرحLogicExceptionعند إيقاف العَلَم — لا عمليةً صامتةً بلا أثر أبدًا. - المُخرجات غير موقَّعة وعابرة. حتى مع تفعيل العَلَم، يُغفَل صندوق توقيع الادّعاء؛ عامِل البايتات على أنها ذات شكل مسوّد وأعِد التضمين بمجرّد شحن محوِّل مستقرّ.
- فحص قِدَم التثبيت. شغِّل
composer c2pa:draft-status(خروج 0 طازج / 1 تحذير ليّن / 2 فشل صارم) في CI لاكتشاف متى تقادمت لقطة المسودّة المُثبَّتة. - لا حُكم مطابقة. يُبلِغ كائن الحالة عن حالة المعاينة، لا نتيجة مطابقة. ومُتحقِّق خارجي وملف مجموعة عمل مُجمَّد سيكونان شرطين مسبقين لأي نقاش مطابقة، ولا يُفترَض أيٌّ منهما.
- انضباط اللغة. لا تصف المُخرجات بأنها “C2PA signed” أو “conformant” أو “compliant” أو “certified” أو “GA”. استخدم “حالة قدرة معاينة”.
ملاحظات أمنية
قسم بعنوان «ملاحظات أمنية»سطح المعاينة ليس ضابط أمان. وحمل أو توليف مخزن بيان مسوّد ليس كإنتاج أو التحقّق من توثيق — ويُغفِل المُضمِّن التجريبي صندوق توقيع الادّعاء كليًّا، فمُخرجاته غير موقَّعة بنية. لا تعتمد على هذه المعاينة لضمان المصدر في الإنتاج؛ فهي لا تُؤكِّد أن اعتمادًا صالح أو أن ملفًا موقَّع.
المطابقة
قسم بعنوان «المطابقة»لا يقدّم هذا السطح أي ادّعاء مطابقة. تُديم ملف C2PA مجموعةُ عمل خارجية وهو غير مُجمَّد؛ ولذلك يذكر NextPDF حالة قدرة معاينة وحدّ مسودّة/مجموعة عمل، لا مطابقةً أو اعتمادًا. ولا يُعاد إنتاج أي نص معياري.
حدّ النشر
قسم بعنوان «حدّ النشر»توثِّق هذه الصفحة السلوك القابل للملاحظة خارجيًا وسطح الـ API العام المدعوم فقط. أما مسارات فضاء الأسماء الداخلية، والأصناف المساعِدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر فخارج النطاق.
انظر أيضًا
قسم بعنوان «انظر أيضًا»- معاينة C2PA — المرجع العميق — مرجع الـ API الكامل لهذا السطح.
- أمان Pro
- توقيع Core
- صفحة المطابقة
- حالة قدرة معاينة التعمية ما بعد الكمّية