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