أضف علامة مرجعية إلى PDF وتحقق من صفحتها
في ملف PDF من 32 صفحة تشير فيه Cover وMethods وAppendix إلى الصفحات 1 و8 و27، تأتي علامة Results للصفحة 18 في المرتبة الثالثة. أدخل عدد الصفحات والعلامات الحالية والعنوان والصفحة لتحصل على الفهرس المحدّث. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- عدد الصفحات
- 32
- العنوان
- Results
- الصفحة
- 18
- الكمية
- 4
- الفهرس المُدرج
- 2
أضف عنصر تنقل موثوقًا إلى مخطط ملف PDF من دون تخمين ما إذا كانت وجهته موجودة أو الموضع الذي ينبغي أن يشغله. أدخل عدد صفحات المستند وعلاماته المرجعية الحالية ذات المستوى الأعلى وعنوانًا وصفحة وجهة يبدأ ترقيمها من واحد. تتحقق الإمكانية من الوجهة الجديدة وفق النطاق الفعلي للصفحات، وتفحص المخطط الحالي، ثم تدرج العلامة بحسب ترتيب الصفحات. وتعيد مخططًا منظمًا جديدًا مع فهرس موضع الإدراج، مما يسهل تمريره إلى مرحلة لاحقة لكتابة PDF أو التحقق منه ضمن سير عمل آلي للمستندات.
صِف ملف PDF والعلامة المرجعية المراد إضافتها
ابدأ بإدخال العدد الإجمالي لصفحات PDF، لأن هذه القيمة تحدد جميع الوجهات الصالحة. بعد ذلك، قدّم المخطط الحالي من المستوى الأعلى في صورة مصفوفة من السجلات التي يحتوي كل منها على عنوان وصفحة، وبالترتيب المستخدم في المستند. يبدأ ترقيم الصفحات من واحد؛ فالصفحة 1 هي أول صفحة ظاهرة في PDF وليست إزاحة داخلية قيمتها صفر.
ثم أدخل عنوان العلامة المراد إضافتها وصفحة وجهتها. تُزال المسافات البيضاء من طرفي العنوان حتى لا تظهر في التسمية المرئية مسافات أضيفت عرضًا من نموذج أو جدول بيانات. تعمل الإمكانية على تمثيل المخطط ولا تفك ترميز وحدات البايت الثنائية لملف PDF ولا تعيد كتابتها.
لذلك تناسب المرحلة التالية لقراءة الملف بواسطة محلل أو المرحلة السابقة لكتابة المخطط المحدث بواسطة مكتبة PDF. ويُقبل المخطط الفارغ، ولذلك يمكن ببنية الطلب نفسها إنشاء أول علامة مرجعية أو توسيع جدول محتويات قائم من دون وضع تشغيل منفصل.
تحقق من حدود الصفحات وحافظ على ترتيب متوقع
لا تفيد العلامة المرجعية إلا إذا كان من الممكن أن توجد وجهتها. تؤدي الصفحة صفر والأرقام السالبة والكسور والقيم التي تتجاوز الصفحة الأخيرة إلى خطأ إدخال غير صالح يوضح النطاق المقبول. وتخضع العلامات الحالية للقاعدة نفسها حتى لا يحتفظ تعديل يبدو ناجحًا بوجهات معطلة.
كما يجب أن تتضمن عناوينها نصًا ظاهرًا. ينبغي أن يكون المخطط المرسل مرتبًا تصاعديًا حسب صفحة الوجهة؛ إذ إن قبول قائمة غير مرتبة يجعل الموضع الصحيح ملتبسًا وقد يعيد ترتيب التنقل الذي قصده المؤلف من دون تنبيه. بعد نجاح التحقق، تمسح الخوارزمية السجلات حتى تصل إلى أول علامة تشير إلى صفحة لاحقة، ثم تدرج العلامة الجديدة قبلها.
وإذا كانت عدة علامات تشير بالفعل إلى الصفحة المطلوبة، توضع العلامة الجديدة بعدها مع الحفاظ على ترتيبها النسبي. لا تتغير مصفوفة الإدخال ولا سجلاتها.
طبّق المخطط المعاد في سير عمل المستند
لا ترتبط البيانات المعادة بمكتبة بعينها؛ إذ يستطيع التطبيق ربط كل عنوان وصفحة مرقمة من واحد بكائنات الوجهة التي تتطلبها أداة كتابة PDF المختارة. لا تعدل هذه الإمكانية وحدات بايت PDF، ولا تستنتج العناوين من نص الصفحات، ولا تنشئ عناصر فرعية متداخلة، ولا تصلح مخططًا غير مرتب. تتطلب هذه المهام تحليلًا أو قرارات هرمية أو تسلسلًا خارج هذه العملية المحددة.
يسهل فصل الإدراج تشخيص الأخطاء، لأن أخطاء النطاق تتوقف هنا قبل إنتاج مستند ذي تنقل معطل. احتفظ بعدد الصفحات المستخرج من نسخة PDF نفسها التي ستكتبها في النهاية.
حالات الاستخدام
إضافة فصل مكتوب حديثًا
أدرج تسمية الفصل في صفحة بدايته التي جرى التحقق منها قبل أن يكتب محرر المستند ملف PDF المنقح.
أتمتة التنقل في التقارير
أضف علامة لملحق أو ملخص مولد وارفض القوالب التي تحسب وجهة يستحيل وجودها.
مراجعة تغييرات المخطط
اعرض فهرس الإدراج والمخطط المحدث في واجهة موافقة قبل تغيير الملف الأصلي.
الأسئلة الشائعة
هل تعدل هذه الإمكانية ملف PDF نفسه؟
لا. إنها تعيد تمثيلًا محدثًا للمخطط كي تطبقه أداة كتابة PDF أو سير عمل المستند.
أين توضع العلامة إذا استُخدمت الصفحة نفسها سابقًا؟
تُدرج بعد جميع العلامات الحالية في تلك الصفحة مع الحفاظ على ترتيبها المرسل.
هل يمكن إضافة علامات مرجعية متداخلة؟
لا. تضيف هذه العملية المحددة علامة من المستوى الأعلى إلى مخطط مرتب حسب الصفحات.
هل يمكنني إضافة أول علامة مرجعية إلى ملف PDF لا يحتوي على أي علامة؟
نعم. الفهرس الفارغ مقبول، لذلك تصلح العملية نفسها لإنشاء أول علامة أو لتوسيع فهرس طويل دون تغيير الوضع.
ماذا يحدث إذا لم تكن العلامات الحالية مرتبة حسب الصفحات؟
تُرفض. يجب أن تكون العلامات الموجودة مرتبة من الصفحة الأصغر إلى الأكبر، لأن قبول قائمة غير مرتبة يجعل الموضع الصحيح غامضًا وقد يعيد ترتيب تنقل المؤلف دون علم.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/pdf/bookmarks-add \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}'const res = await fetch("https://api.kit.forhosting.com/pdf/bookmarks-add", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/bookmarks-add",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/bookmarks-add", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/bookmarks-add", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.bookmarks_add",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 25 |
max_pages | 200 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تحقق من حدود الصفحات وحافظ على ترتيب متوقع
لذلك يجب أن تكون الصفحة المطلوبة عددًا صحيحًا من 1 إلى page_count شاملة الحدين. وبغياب الشبكة والطوابع الزمنية والمعرفات العشوائية والمقارنات المعتمدة على المنطقة، ينتج إدخال JSON نفسه المخرجات نفسها دائمًا.
طبّق المخطط المعاد في سير عمل المستند
تتضمن الاستجابة page_count والعدد النهائي للعلامات وinserted_index يبدأ من صفر والمخطط المحدث كاملًا. استخدم inserted_index إذا كان على واجهة المراجعة تمييز الصف المنشأ حديثًا، أو تجاهله ومرر المخطط مباشرة إلى المرحلة التالية. تتيح أداة المتصفح للمحرر فحص الوجهة سريعًا قبل النشر، بينما تلائم مكالمة API بسعر $0.002 العمليات المتكررة مثل إضافة إشعار قانوني أو ملحق أو ملاحظات إصدار أو فصل مولد.
أسئلة تقنية
كيف يجري ترقيم الصفحات؟
يبدأ الترقيم من واحد؛ فالرقم 1 هو الصفحة الأولى وpage_count هو آخر وجهة صالحة.
ماذا يحدث إذا كانت صفحة الوجهة خارج النطاق؟
يفشل الطلب بالرمز invalid_input مع رسالة توضح نطاق الصفحات الصالح.
ما تكلفة طلب API؟
يكلف طلب API الناجح $0.002، ويمكن تنفيذ العملية الحتمية نفسها مجانًا في المتصفح.