بعد التدوير ما زالت مكتبة البرمجة تقرأ عرض الصفحة وارتفاعها القديمين، لماذا؟
لأن الأداة تخزن الزاوية كقيمة تدوير للصفحة ولا تعيد ترتيب محتواها، فيبقى MediaBox المسجل في الملف بعرضه وارتفاعه الأصليين. برامج القراءة تطبق التدوير عند العرض فقط. في الكود اقرأ قيمة التدوير أيضًا، وبدّل العرض والارتفاع حين تكون 90 أو 270.
ما الذي تغيّر في الملف بالضبط؟
كل صفحة PDF تحمل صندوقًا يحدد أبعادها، اسمه MediaBox، وقيمة منفصلة اسمها Rotate. تدوير صفحات PDF تلمس الثانية فقط: تضيف زاويتك إلى قيمة Rotate الموجودة وتحفظ النتيجة بين 0 و359. المحتوى نفسه والصندوق لا يتغيران. هذا هو ما يحفظ جودة الصفحة، لأن شيئًا لا يُعاد رسمه، لكنه يعني أن من يقرأ الصندوق وحده يرى الأبعاد القديمة.
صفحة بحجم A4 طولية: MediaBox عرضه نحو 595 وارتفاعه نحو 842 نقطة، وقيمة التدوير 0.
بعد «يمين 90°» تصبح قيمة التدوير 90، ويبقى MediaBox بعرض 595 وارتفاع 842.
برنامج القراءة يعرضها صفحة عرضية بعرض 842 وارتفاع 595.
كيف تقرأ الأبعاد الظاهرة في الكود؟
القاعدة: الأبعاد الظاهرة هي أبعاد الصندوق، مع تبديل العرض والارتفاع إذا كانت قيمة التدوير 90 أو 270. في مكتبة pdf-lib مثلًا:
const { width, height } = page.getSize();
const angle = page.getRotation().angle;
const turned = angle % 180 !== 0;
const shown = turned ? { width: height, height: width } : { width, height };
وفي مكتبة pdf.js، دالة getViewport تطبق تدوير الصفحة تلقائيًا، فالعرض والارتفاع اللذان تعيدهما هما الظاهران. المشكلة تظهر عادة حين يقرأ الكود الصندوق مباشرة، أو حين تحسب مكتبة أخرى مواضع النص من أبعاد الصندوق الخام.
أخطاء شائعة بعد التدوير
- وضع ختم أو رقم صفحة في «أسفل يمين» الصفحة بإحداثيات الصندوق: على صفحة قيمتها 90 سيظهر الختم على حافة أخرى تمامًا عند العرض. احسب الموضع بعد تطبيق التدوير.
- تصنيف الصفحات إلى طولية وعرضية بمقارنة العرض بالارتفاع فقط: صفحة الصندوق فيها طولي وقيمة تدويرها 90 تظهر عرضية.
- افتراض أن قيمة التدوير 0 أو 90 فقط: قد تكون 180 أو 270، والأداة تحفظ أي مضاعف لتسعين.
- تجاهل التدوير الموروث: بعض الملفات تضع قيمة التدوير على مستوى أعلى من الصفحة، والمكتبات الجيدة تقرؤه لك، فاستخدم دوالها بدل قراءة الحقل يدويًا.
إن كنت تحتاج صندوقًا بأبعاد جديدة فعلًا
هذه الأداة لا تفعل ذلك، فهي مصممة لتغيير الاتجاه دون لمس المحتوى. بعض الأنظمة القديمة لا تحترم قيمة التدوير، وإن كان نظامك منها فالحل أن تتعامل مع التدوير في الكود كما في المثال، لا أن تتوقع من الملف أن يغير أبعاده.
أسئلة شائعة
هل تغيّر الأداة CropBox أيضًا؟
لا. الأداة تغير قيمة التدوير فقط، وكل صناديق الصفحة تبقى كما كانت.
لماذا لا تعيد الأداة رسم الصفحة بأبعاد جديدة؟
لأن إعادة الرسم قد تمس جودة المحتوى وإمكانية تحديد النص. تغيير قيمة التدوير يعطي النتيجة نفسها عند العرض دون أي خسارة.
