ماذا علي أن أفعل إذا كان بإمكاني النقر فوق صفحة جدول محتويات ملف PDF ولكنني فقدت المستوى بعد الاستخراج؟

يجب التحقق من التسلسل الهرمي للإشارات المرجعية قبل الكتابة. العنصر الأول هو مستوى واحد، ويمكن زيادة العناصر اللاحقة بمستوى واحد على الأكثر؛ يرفض المثال المستويات غير القانونية وأرقام الصفحات المتجاوزة للحدود، ولا يغير المستوى تلقائيًا لتكوين بنية الدليل. تبدأ أرقام صفحات الإشارة المرجعية من الرقم واحد، وتبدأ فهارس الصفحات عادةً من الصفر.

يمكن إعادة توجيه صفحة جدول محتويات ملف PDF بشكل طبيعي في القارئ، ولكن بعد استخراجها باستخدام برنامج نصي، قد يكون التسلسل الهرمي مسطحًا، أو قد تكون أرقام الصفحات في غير مكانها، أو حتى الفهرس قد يكون غير طبيعي. يعد هذا النوع من المشكلات شائعًا عند دمج الملفات الممسوحة ضوئيًا أو الملفات ذات بنيات الإشارات المرجعية غير المنتظمة. إذا تم تسليم نتائج الاستخراج مباشرة إلى المستخدمين النهائيين، فقد تحدث أخطاء في تجزئة الترجمة والربط.

هذه المقالة مخصصة للمطورين وفرق التوثيق الذين يحتاجون إلى معالجة كتالوجات PDF دفعة واحدة. بعد القراءة، يمكنك فهم معنى القيمة المرجعة get_toc()، وإتقان قواعد التحقق للمستويات وأرقام الصفحات، ومعرفة المواقف التي يجب تحويلها إلى التحقق اليدوي. تستخدم هذه المقالة نموذجًا اصطناعيًا لتوضيح طريقة المعالجة، وقد تم فحص التعليمات البرمجية بواسطة العينة في بيئة معزولة، ولكن هذا لا يمثل ضمانًا لجميع الملفات الحقيقية أو تأثيرات المنتج. قبل معالجة المستندات المهمة، يرجى الاحتفاظ بالنسخ الأصلية ومراجعتها وفقًا للحدود وبنود القبول في النص.

ماذا علي أن أفعل إذا كان من الممكن النقر فوق صفحة جدول محتويات PDF، ولكن تم فقدان التسلسل الهرمي بعد الاستخراج؟ استنتاج جملة واحدة

تحقق أولاً، ثم اكتب: يجب التحقق من مستوى الإشارة المرجعية أولاً، ويعتبر العنصر الأول هو المستوى الأول، ويجب ألا تتجاوز المستويات اللاحقة العنصر السابق زائد واحد، ولن تتم كتابة الإدخالات التي تحتوي على أرقام صفحات خارج الحدود.

حالتكالممارسات الموصى بهاسبب
يمكن النقر فوق صفحة الدليل، ويكون التسلسل الهرمي مسطحًا أو غير محاذٍ بعد الاستخراج.استخدم أولاً get_toc() للحصول على القائمة الأصلية، ثم تحقق منها واحدًا تلو الآخر قبل استخدامها.القائمة الأصلية التي أرجعتها get_toc() ليس لها أي تحقق منظم
رقم الصفحة هو 0 أو يتجاوز العدد الإجمالي للصفحاتتجاهل الإدخال والسجلسوف تتسبب أرقام الصفحات خارج الحدود في فشل القفز
تقوم get_toc() بإرجاع قائمة فارغةاستخدم تحليل تخطيط النص بدلاً من ذلك ولا تحاول إعادة المحاولة بشكل أعمىقد لا يحتوي الملف على بيانات تعريف إشارة مرجعية مضمنة
نفس العنوان يتوافق مع عدة أرقام صفحات مختلفةوضع علامة غامضة، ونقل إلى التحقق اليدويغير قادر على تحديد رقم الصفحة الصحيح تلقائيًا

لماذا تفقد نتيجة الاستخلاص مستوياتها؟

يقوم get_toc() افتراضيًا بإخراج قائمة ثلاثية [level, title, page]. من بينها، page هو رقم الصفحة الفعلي الذي يبدأ من 1، ويمثل level عمق التداخل فقط ولا يضمن الاستمرارية أو الشرعية.

إذا تم إنشاء ملف PDF المصدر بواسطة أداة دمج المسح الضوئي، فستتضمن المشكلات الشائعة ما يلي:

  • القفز على المستوى: على سبيل المثال، القفز مباشرة من 1 إلى 3
  • استثناء رقم الصفحة: رقم الصفحة هو 0 أو يتجاوز إجمالي عدد الصفحات
  • استثناء العنوان: يحتوي العنوان على أحرف تحكم

إذا تم استخدامه مباشرة للمهام النهائية، فسوف يسبب ارتباكًا في أجزاء الترجمة أو فشل الارتباط. والأمر الأكثر مكرًا هو أن بعض ملفات PDF تحتوي على صفحة جدول محتويات مرئية ولكن لا تحتوي على بيانات تعريف إشارة مرجعية مضمنة. من الطبيعي أن تقوم get_toc() بإرجاع قائمة فارغة في هذا الوقت، ويجب استخدام تحليل تخطيط النص بدلاً من ذلك.

مثال على تكوين قائم بذاته

راجع قائمة الاستيراد على سبيل المثال التبعيات. يقوم الكود ببناء الإدخال في الذاكرة، ويتم توفير سجلات التشغيل بشكل منفصل ولا تمثل ضمانًا لجميع الملفات الحقيقية.

import pymupdf
def validate(rows, pages):
    previous = 0
    for level, title, page in rows:
        if type(level) is not int or level < 1 or level > previous + 1:
            raise ValueError("invalid hierarchy")
        if type(page) is not int or not 1 <= page <= pages:
            raise ValueError("invalid destination")
        if not isinstance(title, str) or not title.strip():
            raise ValueError("empty title")
        previous = level
    return rows
with pymupdf.open() as doc:
    for _ in range(3):
        doc.new_page()
    rows = [[1, "Chapter", 1], [2, "Section", 2], [1, "Appendix", 3]]
    doc.set_toc(validate(rows, doc.page_count))
    assert doc.get_toc() == rows
    assert len(doc.get_toc()) == 3
    for bad in [[[2, "Bad", 1]], [[1, "Bad", 99]], [[1, "", 1]]]:
        try:
            validate(bad, doc.page_count)
        except ValueError:
            pass
        else:
            raise AssertionError("invalid outline accepted")

قواعد معالجة المدخلات القانونية وغير القانونية

يجب أن يفي الإدخال الصحيح بما يلي: قائمة الثلاثيات ذات المستويات المستمرة وأرقام الصفحات في النطاق [1, doc.page_count]. على سبيل المثال، [[1, "引言", 1], [2, "背景", 2], [1, "方法", 5]] قانوني، ويظهر المستوى الثاني بعد المستوى الأول، ويتوافق مع بناء جملة مخطط PDF.

تشمل المدخلات غير الصحيحة الشائعة ما يلي:

  • المستوى 0 أو سلبي
  • رقم الصفحة هو 0
  • عدد الصفحات يتجاوز العدد الإجمالي للصفحات
  • العنوان عبارة عن سلسلة فارغة أو يحتوي على أحرف مسافات بيضاء فقط

في هذه الحالات، الطرق الواردة في المقالة هي كما يلي:

  1. تخطي الإدخالات التي تحتوي على أرقام صفحات غير صالحة وقم بتسجيل تحذير.
  2. احتفظ بالعناصر النائبة مثل [untitled] للعناوين الفارغة للحفاظ على التكامل الهيكلي.
  3. لا تقاطع تحليل الدليل بأكمله بسبب خطأ واحد.

فيما يتعلق بالحالة التي يكون فيها المستوى أقل من 1، هناك استراتيجيتان يجب الانتباه إليهما: الجزء التلخيصي من المثال يدعو إلى رفض المستويات غير القانونية وعدم تصحيحها تلقائيًا، في حين أن وصف القاعدة في المقالة هو إجبارها على 1. يرجى الاختيار بين الاثنين وفقًا لعمليتك. لاحظ أيضًا أن هذه القواعد مصممة لضمان قوة العمليات النهائية وليست متطلبات إلزامية لمعيار PDF. وجد الاختبار الفعلي أنه عندما يتجاوز رقم الصفحة الحدود، سيطبع PyMuPDF تحذيرًا ولكن لن يطرح استثناءً. لذلك، يجب أن تقوم وظيفة التحقق بالتصفية النشطة ولا يمكنها الاعتماد على سلوك المكتبة.

📊 المقارنة الأساسية

في مواقف المستندات المختلفة، تختلف النتائج وطرق المعالجة المقترحة لـ get_toc():

التوثيقنتائج get_toc()العلاج الموصى به
هناك إشارات مرجعية والهيكل قانونيإرجاع قائمة الثلاثياتاستخدم مباشرة بعد التحقق
توجد إشارات مرجعية ولكن المستوى أو رقم الصفحة غير طبيعيإرجاع قائمة تحتوي على عناصر الاستثناءتصفية السجلات وتسجيلها، ونقلها إلى التشغيل اليدوي إذا لزم الأمر
بصريًا، يوجد جدول محتويات ولكن لا توجد إشارات مرجعيةإرجاع القائمة الفارغةاستخدم تحليل تخطيط النص بدلاً من ذلك
EPUB ومستندات إعادة التدفق الأخرىتنسيق رقم الصفحة هو (الفصل، pno)منطق التحقق من رقم الصفحة هذا غير قابل للتطبيق ويتطلب معالجة خاصة.

معايير القبول وحدود المراجعة اليدوية

يركز الجدول التالي فقط على استخراج البيانات التعريفية لكتالوج PDF:

مراقبة الظواهرقرار المعالجةما إذا كانت الأتمتة قابلة للتطبيق
رقم الصفحة هو 0 أو أكبر من إجمالي عدد الصفحاتتجاهل الإدخال وقم بتسجيلهنعم
المستوى أقل من 1 أو غير صحيحتتم العملية وفقًا للقواعد المذكورة أعلاه (انظر التعليمات السابقة)نعم
العنوان فارغ تمامًا أو رموز خالصةاستبدل بـ [untitled]نعم
القفز على المستوى (على سبيل المثال، من 1 إلى 3)احتفظ بالطبقة الأصلية ولا تقم بإضافة طبقات متوسطةنعم (الهيكل قانوني)
نفس العنوان يتوافق مع عدة أرقام صفحات مختلفةوضع علامة غامضة، ونقل إلى الدليللا
عدد الإدخالات يتجاوز 200 ولا يوجد أي تغيير في المستوىفي حالة الاشتباه في حدوث خطأ في التعرف الضوئي على الحروف، يلزم التحقق اليدوي.لا
يحتوي على URI خارجي أو إجراء JavaScriptتصفية عناصر الانتقال غير المتعلقة بالصفحةنعم (سياسة الأمان)
إعادة ترتيب المستندات مثل EPUB، وأرقام الصفحات هي (الفصل، pno)منطق التحقق من رقم الصفحة هذا غير قابل للتطبيقلا (يتطلب معالجة خاصة)

تجدر الإشارة إلى أن العرض التوضيحي للكود يتحقق فقط من شرعية البنية، ويجب دمج التأثير الشامل مع العرض للتحقق من دقة القفزة.

🎯 ما هي الطريقة المناسبة لك؟

إذا كنت بحاجة إلى استخراج الدلائل على دفعات

قم أولاً بإجراء التحقق الهيكلي على نتيجة get_toc()، ثم قم بكتابتها في العملية اللاحقة، واحتفظ بالسجل للمراجعة.

إذا كان ملف PDF الخاص بك يحتوي بشكل مرئي على جدول محتويات ولكن الاستخراج فارغ

لا تقم بإعادة محاولة get_toc() بشكل متكرر، استخدم معالجة تحليل تخطيط النص بدلاً من ذلك.

إذا ظهر إدخال الدليل الخاص بك على صفحات مختلفة بنفس الاسم

قم بتحويل هذه الإدخالات إلى التحقق اليدوي ولا تحدد أحد أرقام الصفحات تلقائيًا.

إذا كنت تقوم بإرسال مستندك إلى عملية الترجمة

تأكد أولاً من صحة بنية الدليل وأرقام الصفحات قبل الترجمة لتجنب ارتباك التجزئة.

❓ الأسئلة الشائعة (الأسئلة الشائعة)

1. لماذا يبدأ رقم الصفحة من 1، بينما يبدأ فهرس الصفحات عادة من 0؟

أرقام صفحات الإشارة المرجعية هي أرقام صفحات فعلية تبدأ من 1، بينما تبدأ فهارس الصفحات في المكتبات مثل PyMuPDF عادةً عند 0. يجب عليك الانتباه إلى هذا الاختلاف عند التحويل، وإلا فسيتم محاذاة أرقام الصفحات بشكل غير صحيح.

2. إذا قام get_toc() بإرجاع قائمة فارغة، فهل يعني ذلك أن هناك خطأ ما في الملف؟

غير مؤكد. تحتوي بعض ملفات PDF بشكل مرئي على صفحة جدول محتويات، ولكنها لا تتضمن بيانات تعريف الإشارة المرجعية. من الطبيعي إرجاع قائمة فارغة. في هذه الحالة، يجب استخدام تحليل تخطيط النص بدلاً من ذلك.

3. عندما يتجاوز رقم الصفحة الحدود، هل ستبلغ المكتبة عن خطأ مباشرة؟

متعود. وجد القياس الفعلي في هذه المقالة أن PyMuPDF سيطبع تحذيرًا، لكنه لن يطرح استثناءً عندما يتجاوز رقم الصفحة الحدود، لذلك يجب أن تتم تصفية وظيفة التحقق بشكل نشط.

4. هل تحتاج إلى ملء الطبقات الوسطى لقفزات المستوى (مثل الانتقال مباشرة من 1 إلى 3)؟

الاقتراح الوارد في المقالة هو الاحتفاظ بالتسلسل الهرمي الأصلي وعدم إضافة طبقات وسيطة، لأن هذا الهيكل لا يزال قانونيًا.

📝 ملخص

يجب التحقق من التسلسل الهرمي وأرقام الصفحات لدليل PDF قبل الاستخدام. لا يمكن اعتبار الإخراج الأصلي لـ get_toc() بمثابة بنية موثوقة بشكل مباشر. عند مواجهة الغموض أو عدم وجود إشارات مرجعية، فإن التبديل إلى العمل اليدوي أو استخدام طرق أخرى في الوقت المناسب يمكن أن يتجنب الأخطاء في العمليات النهائية.

جربه الآن: قم بتحميل المستند لبدء الترجمة، مع الاحتفاظ بالتخطيط الأصلي

المراجع والخطوات التالية

الخطوة التالية المقترحة: إعداد ملف PDF اختباري يحتوي على مشكلات الدليل المعروفة، وتشغيل البرنامج النصي للتحقق أعلاه، وحساب نسبة الحالات الشاذة المختلفة. في حالة حدوث قفزات في المستوى أو تغيرات في أرقام الصفحات بشكل متكرر، فكر في إضافة خطوة إعادة بناء الدليل قبل الترجمة.

استخدم قائمة المراجعة هذه لترجمة المستندات

تحقق أولاً من ترتيب الصفحة وموقع المصدر وسلامة النص، ثم أرسل نفس العينة غير الحساسة إلى عملية الترجمة. بعد الترجمة، لا تزال بحاجة إلى التحقق مما إذا كان العنوان والنص والرسوم التوضيحية متطابقين بشكل صحيح. لا يمكنك فقط التحقق مما إذا كان النص سلسًا.

توفر OmniDoc بوابة لترجمة المستندات متعددة التنسيقات، ويقدم الموقع الرسمي وظائف التعرف الضوئي على الحروف (OCR) والمسرد ووظائف المقارنة ثنائية اللغة. بالنسبة للفرق التي تتطلع إلى بدء العمل مباشرة من الملفات، فهذا مسار يستحق التقييم باستخدام عينات من الحياة الواقعية. الرجاء استخدام الملفات غير الحساسة التي لديك إذن بتحميلها، واستخدام عناصر الاختيار في هذه المقالة لمراجعة النتائج. لا يوجد ادعاء هنا بأن OmniDoc يستخدم المكتبات مفتوحة المصدر أو الخوارزميات الداخلية في هذه المقالة، ولا يحل المثال محل اختبار أداء المنتج.

تاريخ التحديث: 2026-11-15