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