استخراج أول وآخر صفحة من ملف PDF
تحوّل أداة استخراج الصفحة الأولى والأخيرة من PDF عدد الصفحات المعروف إلى تعليمة استخراج دقيقة وحتمية.
شغّل الأداة مجانًا
أدخلوا العدد الإجمالي، فتحدّد الصفحة 1 والصفحة النهائية وتعيد بيان PDF من صفحتين باسم ملف ثابت ونوع وسائط واضح. يجب أن يحتوي المستند على صفحتين على الأقل، لأن الملف ذا الصفحة الواحدة لا يملك حدّين مختلفين. تفيد النتيجة عندما تعرف مرحلة سابقة عدد الصفحات وتحتاج إلى اختيار لا لبس فيه لعملية PDF لاحقة.
احتفظوا بالصفحتين اللتين تحدّان المستند
غالباً ما تضع ملفات PDF الطويلة أهم معلوماتها التأطيرية عند طرفين متقابلين. فقد تتضمن الصفحة الأولى غلافاً أو عنواناً أو هوية حساب أو فترة تقرير أو مرجع تقديم، بينما قد تتضمن الصفحة الأخيرة توقيعات أو نص اعتماد أو مجاميع أو ملاحق أو أختام إيداع. تعبّر هذه الإمكانية عن العملية الشائعة للاحتفاظ بصفحتي الحد من دون أن تضطروا إلى حساب رقم الصفحة النهائية بصورة منفصلة. أدخلوا العدد الإجمالي لصفحات PDF، فتحدّد النتيجة صفحة المصدر 1 وصفحة المصدر التي يساوي رقمها ذلك العدد. يصف البيان دائماً ملف PDF من صفحتين بالترتيب الأصلي نفسه: الصفحة الأولى أولاً ثم الصفحة الأخيرة. كما يوفّر نوع وسائط PDF واسماً متوقعاً للتنزيل، مما يسهّل تمرير النتيجة إلى مسار ينتج ملفاً. لا يُعدّل المستند الأصلي. ولأن الاختيار يعتمد على مواضع الصفحات فقط، فهو لا يفحص محتوى الصفحتين ولا يصنّفه أو يلخّصه أو يعيد تفسيره.
افهموا التحقق من الإدخال وترقيم الصفحات
يبدأ ترقيم الصفحات من واحد، كما في أدوات PDF المعتادة: صفحة البداية هي 1 وليست 0. يجب أن تكون قيمة `page_count` عدداً صحيحاً محدوداً وألا تقل عن 2. تُرفض الكسور والسلاسل الرقمية والقيم المفقودة والمصفوفات والكائنات بدلاً من تحويلها بصمت. تمنع هذه الصرامة ظهور طلب الاستخراج كأنه صالح عندما تكون بيانات المصدر الوصفية غير سليمة. ويُرفض أيضاً ملف PDF ذو الصفحة الواحدة لأن صفحته الأولى والأخيرة هما الصفحة المادية نفسها، في حين تضمن هذه الإمكانية صفحتي حد مختلفتين. في مستند من 2 صفحة يكون الاختيار 1 و2، وفي مستند من 300 صفحة يكون 1 و300. تعرض النتيجة العدد الأصلي وعدد الصفحات الجديد 2 معاً، ولذلك لا يحتاج البرنامج اللاحق إلى استنتاج الرقم الذي يصف كل مستند. كما تعيد أرقام صفحات المصدر المختارة صراحةً، كي توضّح السجلات والواجهات ومراحل المعالجة اللاحقة ما طُلب بدقة.
استخدموا البيان بأمان في مسار PDF آلي
صُممت هذه الإمكانية لتكون حتمية ومحدودة. فهي لا ترسل طلبات عبر الشبكة ولا تقرأ أسراراً ولا تخزّن مستنداً، ولا تستخدم الوقت الحالي أو أي قيمة عشوائية. لذلك ينتج العدد الصحيح نفسه بيان الاستخراج نفسه في كل مرة. يحصل المسار المعتاد على عدد موثوق أثناء فحص PDF، ثم يستدعي هذه الإمكانية لتحديد صفحتي الحد ويمرر `extracted_pages` إلى المكوّن الذي ينسخ الصفحتين من بايتات المصدر إلى PDF جديد. يفيد فصل الاختيار عن نقل البيانات في أدوات المتصفح وقوائم الانتظار وأنظمة التدقيق، حيث يقع الوصول إلى الملف وقواعد العمل في مراحل مختلفة. تحققوا من أن العدد يخص ملف PDF نفسه الذي تستلمه مرحلة النسخ؛ فقد تشير قيمة قديمة إلى صفحة تتجاوز نهاية نسخة أحدث. تبلغ كلفة التشغيل الآلي عبر API مقدار $0.002 لكل طلب، ويمكن تشغيل منطق الاختيار الخالص في المتصفح أيضاً. لا تغيّر الاستجابة المصدر أبداً؛ اختاروا سياسة مستقلة للاحتفاظ بالملف الناتج.
حالات الاستخدام
جهّزوا الغلاف وصفحة التوقيعات
اختاروا الغلاف الأول وصفحة التوقيعات الأخيرة من حزمة عقد لإنشاء ملف مراجعة موجز.
أرشفوا حدّي التقرير
سجّلوا صفحة العنوان وصفحة التصديق الختامية لتقرير طويل من دون حساب الموضع الأخير في البرنامج.
أنشئوا مسار معالجة PDF
حوّلوا بيانات عدد الصفحات إلى اختيار صريح من صفحتين يستطيع ناسخ PDF لاحق تنفيذه.
الأسئلة الشائعة
ما كلفة طلب API؟
تبلغ كلفة كل طلب API مقدار $0.002. ويمكن تشغيل منطق الاختيار الحتمي في المتصفح أيضاً.
لماذا تُرفض ملفات PDF ذات الصفحة الواحدة؟
تتطابق الصفحة الأولى والأخيرة في ملف PDF ذي الصفحة الواحدة. تتطلب هذه الإمكانية صفحتي مصدر مختلفتين.
هل يبدأ ترقيم الصفحات من صفر أم من واحد؟
يبدأ من واحد. صفحة المصدر الأولى هي 1، والأخيرة تساوي `page_count`.
هل يتغير ملف PDF الأصلي؟
لا. تصف الاستجابة بصورة حتمية ملف PDF جديداً من صفحتين وتترك المصدر من دون تغيير.
هل يمكن إدخال عدد الصفحات كسلسلة نصية؟
لا. أدخلوا `page_count` كعدد صحيح. تُرفض السلاسل الرقمية والكسور لتجنب الإدخال الملتبس.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/pdf/first-last-page-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_count":12}'const res = await fetch("https://api.kit.forhosting.com/pdf/first-last-page-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_count": 12
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/first-last-page-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_count": 12
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/first-last-page-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_count":12}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_count":12}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/first-last-page-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"page_count": 12
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.first_last_page_extract",
"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 | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |