أبعاد صفحات PDF .NET - استخراج العرض والارتفاع باستخدام C#

مقدمة

هل وجدت نفسك تتعامل مع مستندات PDF في تطبيق .NET الخاص بك، وتحتاج إلى get pdf page size لكل صفحة؟ أنت لست وحدك. سواء كنت تبني عارض مستندات، أو تنشئ تخطيطات طباعة، أو تعالج نماذج، فإن أبعاد الصفحة الدقيقة هي العمود الفقري لتجربة مستخدم مصقولة.

في هذا الدليل الشامل، سنرشدك إلى استخراج أبعاد صفحات PDF باستخدام GroupDocs.Annotation for .NET—واحدة من أكثر المكتبات موثوقية لهذا الغرض. في النهاية، ستحصل على كود يعمل يسترجع العرض والارتفاع وغيرها من البيانات الوصفية الأساسية من أي مستند PDF.

إجابات سريعة

  • كيف أحصل على حجم صفحة PDF في .NET؟ استخدم Annotator.GetDocumentInfo() واقرأ PageInfo.Width / PageInfo.Height.
  • أي مكتبة تدعم استخراج عرض وارتفاع صفحة PDF؟ GroupDocs.Annotation for .NET (v25.4.0+).
  • هل أحتاج إلى ترخيص لاستخراج الأبعاد الأساسية؟ الإصدار التجريبي المجاني يعمل؛ الترخيص التجاري مطلوب للإنتاج.
  • ما الوحدات التي يتم إرجاعها؟ النقاط (1/72 inch)؛ يمكن التحويل إلى بوصات أو مليمترات حسب الحاجة.
  • هل يمكنني معالجة ملفات PDF الكبيرة بكفاءة؟ نعم—GroupDocs.Annotation يقرأ البيانات الوصفية دون تحميل الملف بالكامل في الذاكرة.

ما هو get pdf page size؟

Get pdf page size يشير إلى استرجاع عرض وارتفاع صفحة PDF برمجياً. هذه العملية أساسية لحسابات التخطيط، وإعداد الطباعة، وتحديد موضع حقول النماذج في تطبيقات .NET.

لماذا أبعاد صفحات PDF مهمة في تطوير .NET

قبل أن ننتقل إلى الكود، دعنا نستكشف لماذا معرفة pdf page width height مهمة. هذه الأرقام ليست مجرد معلومات ثانوية—إنها تدعم وظائف حقيقية في العالم الواقعي:

  • Layout Management – يمكن للعارضات المتجاوبة أن تقوم بالتحجيم تلقائياً بناءً على حجم الصفحة الدقيق، مما يلغي أشرطة التمرير غير المريحة.
  • Print Optimization – الأبعاد الدقيقة تمنع إهدار الورق والطباعة غير المتطابقة في سير العمل التجاري.
  • Form Processing – إحداثيات الاستخراج تعتمد على حجم الصفحة الدقيق؛ خطأ بمقدار 2 مم قد يفسد جمع البيانات.
  • Resource Planning – ملفات PDF الكبيرة والمتنوعة الأحجام تتطلب استراتيجيات ذاكرة مختلفة؛ معرفة الحجم مبكراً تمكّن من تجميع ذكي.

المتطلبات المسبقة

المكتبات المطلوبة والإصدارات

  • GroupDocs.Annotation for .NET (الإصدار 25.4.0 أو أحدث). هذا الإصدار يدعم أكثر من 50 تنسيق إدخال وإخراج ويمكنه التعامل مع ملفات PDF مئات الصفحات دون تحميل الملف بالكامل في الذاكرة.
  • .NET Framework 4.6.1+ أو .NET Core 2.0+

متطلبات إعداد البيئة

  • Visual Studio 2019 أو أحدث (إصدار Community يعمل بشكل ممتاز)
  • ملف PDF تجريبي (سنوضح لك كيفية التعامل مع الأنواع المختلفة)
  • إلمام أساسي بـ using statements وإدارة التخلص من الكائنات في C#

المتطلبات المعرفية

كل ما تحتاجه هو:

  • أساسيات C#
  • أساسيات إدارة حزم NuGet
  • إدخال/إخراج ملفات بسيط في .NET

هل جهزت كل شيء؟ رائع—لنقم بإعداد المكتبة.

إعداد GroupDocs.Annotation لـ .NET

تثبيت GroupDocs.Annotation سهل، لكن هناك عدة طرق للقيام بذلك حسب سير عملك.

الطريقة 1: باستخدام وحدة تحكم مدير الحزم NuGet

Open the Package Manager Console in Visual Studio and run:

Install-Package GroupDocs.Annotation -Version 25.4.0

الطريقة 2: باستخدام .NET CLI

If you prefer command‑line tools:

dotnet add package GroupDocs.Annotation --version 25.4.0

الطريقة 3: مدير الحزم البصري

  1. انقر بزر الماوس الأيمن على مشروعك في Solution Explorer
  2. اختر Manage NuGet Packages
  3. ابحث عن GroupDocs.Annotation
  4. انقر Install

خيارات الترخيص (اختر ما يناسبك)

  • Free Trial – الميزات الأساسية، بما في ذلك استخراج الأبعاد، متاحة مع حدود استخدام بسيطة—مثالية لأعمال إثبات المفهوم.
  • Temporary License – اطلب مفتاحًا مؤقتًا لمدة 30 يوماً للحصول على جميع الوظائف أثناء التقييم.
  • Commercial License – مطلوب للنشر في بيئات الإنتاج؛ الأسعار تتدرج حسب عدد المطورين ونموذج النشر.

التحقق السريع من الإعداد

Here’s a simple test to confirm everything is wired correctly:

using GroupDocs.Annotation;

// This should compile without errors if installation succeeded
using (Annotator annotator = new Annotator(@"path\to\your\test.pdf"))
{
    Console.WriteLine("GroupDocs.Annotation is ready to use!");
}

ما هي فئة Annotator؟

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

كيفية get pdf page size باستخدام GroupDocs.Annotation؟

GetDocumentInfo() تُعيد كائن DocumentInfo يحتوي على البيانات الوصفية العامة للـ PDF، بما في ذلك عدد الصفحات ومجموعة من تفاصيل الصفحات. حمّل ملف PDF باستخدام new Annotator("file.pdf") واستدعِ هذه الطريقة؛ كل PageInfo في مجموعة Pages يحتوي على Width و Height. هذه العملية ذات الخطوتين توفر الأبعاد بالنقاط فورًا، دون تحليل الملف بالكامل.

دليل التنفيذ خطوة بخطوة

الخطوة 1: تهيئة Annotator مع ملف PDF الخاص بك

Create an Annotator instance pointing to your PDF file. Always wrap it in a using block so the file handle is released promptly.

using (Annotator annotator = new Annotator(@"YOUR_DOCUMENT_DIRECTORY\INPUT_PDF"))
{
    // All our dimension extraction magic happens here
}

نصيحة احترافية: التخلص السليم يمنع تسرب الذاكرة، خاصةً عند معالجة العشرات من ملفات PDF الكبيرة في وظيفة دفعة.

الخطوة 2: استرجاع معلومات المستند

DocumentInfo is an object that holds overall PDF metadata such as total page count and a collection of PageInfo objects for each page.
GroupDocs.Annotation makes metadata extraction a one‑liner:

IDocumentInfo info = annotator.Document.GetDocumentInfo();

كائن DocumentInfo المرجع يمنحك:

  • إجمالي عدد الصفحات
  • تفاصيل تنسيق الملف
  • قائمة Pages حيث يحتوي كل إدخال على العرض، الارتفاع، الدوران، وأكثر

الخطوة 3: التحقق من صحة البيانات المسترجعة

Before you start looping over pages, confirm the document info isn’t null and that the page collection contains entries.

if (info.PagesInfo != null && info.PagesInfo.Count > 0)
{
    Console.WriteLine($"\t Document info: Type {info.FileType}, size = {info.Size}, pages = {info.PageCount}");
}
else
{
    Console.WriteLine("No page information available - check your PDF file");
    return;
}

هذا الفحص الوقائي يتجنب استثناءات المرجع الفارغ ويوفر ملاحظات مبكرة إذا كان ملف PDF تالفًا.

الخطوة 4: استخراج العرض والارتفاع لكل صفحة

PageInfo represents a single page’s properties, including its width, height, and rotation angle.
Iterate through the Pages collection and read Width and Height. Remember that the values are expressed in points (1 point = 1/72 inch).

foreach (var page in info.PagesInfo)
{
    Console.WriteLine($"\t\t page #{page.PageNumber}: {page.Width}x{page.Height}");
}

نقاط رئيسية

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

مثال عملي كامل (طريقة)

You can wrap the above steps into a reusable method:

using GroupDocs.Annotation;
using System;

public void ExtractPdfPageDimensions(string pdfPath)
{
    try
    {
        using (Annotator annotator = new Annotator(pdfPath))
        {
            IDocumentInfo info = annotator.Document.GetDocumentInfo();
            
            if (info.PagesInfo != null && info.PagesInfo.Count > 0)
            {
                Console.WriteLine($"Document: {info.FileType}, {info.Size} bytes, {info.PageCount} pages");
                
                foreach (var page in info.PagesInfo)
                {
                    Console.WriteLine($"Page {page.PageNumber}: {page.Width} x {page.Height} points");
                }
            }
            else
            {
                Console.WriteLine("Could not retrieve page information");
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error processing PDF: {ex.Message}");
    }
}

المشكلات الشائعة وكيفية تجنبها

Even with straightforward code, developers encounter predictable issues. Below are the most common traps and proven solutions.

مشاكل مسار الملف

المشكلة: “File not found” errors during development.
الحل: Use absolute paths while testing and always verify the file exists before creating the Annotator.

if (!File.Exists(pdfPath))
{
    throw new FileNotFoundException($"PDF file not found: {pdfPath}");
}

مشاكل الأذونات

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

معالجة ملفات PDF التالفة

المشكلة: بعض ملفات PDF تالفة جزئيًا أو تستخدم ميزات غير قياسية.
الحل: ضع منطق الاستخراج داخل كتلة try‑catch واظهر رسالة خطأ واضحة. سيقوم GroupDocs.Annotation برمي استثناء DocumentException للهيكليات غير المدعومة.

تسرب الذاكرة مع الملفات الكبيرة

المشكلة: معالجة العديد من ملفات PDF الكبيرة دون التخلص من مثيلات Annotator يؤدي إلى تعطل بسبب نفاد الذاكرة.
الحل: استخدم دائمًا عبارات using وفكر في معالجة الملفات على دفعات أصغر أو وضع البث.

توافق الإصدارات

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

تطبيقات واقعية

فهم retrieve pdf width height يفتح سيناريوهات قوية:

تطبيقات عرض المستندات

Responsive viewers can automatically set the initial zoom level based on page dimensions, delivering a “fit‑to‑screen” experience without manual tweaking.

// Example: Calculate optimal zoom for viewport
double optimalZoom = Math.Min(viewportWidth / pageWidth, viewportHeight / pageHeight);

إنشاء تقارير تلقائي

When merging multiple PDFs into a single report, knowing each page’s size ensures consistent scaling and avoids unexpected page breaks.

أنظمة إدارة الطباعة

Exact dimensions let you calculate optimal paper usage, detect portrait vs. landscape orientation, and pre‑flight documents before sending them to commercial printers.

حلول معالجة النماذج

Accurate coordinates derived from page size enable reliable extraction of checkboxes, signatures, and text fields across PDFs of varying layouts.

إدارة الأصول الرقمية

Tag PDFs with size metadata to facilitate quick searches (e.g., “show all A4‑sized documents”) and improve cataloging efficiency.

نصائح تحسين الأداء

When you move from a prototype to production, performance becomes critical.

استراتيجية المعالجة الدفعية

Group similar operations to reduce overhead. For example, read metadata for a batch of files, store the results, then process annotations in a second pass.

var results = new List<PageDimensionResult>();
foreach (var pdfFile in pdfFiles.Take(10)) // Process in batches of 10
{
    // Extract dimensions and add to results
}

تخزين الأبعاد المتكررة في الذاكرة المؤقتة

If the same PDFs are queried repeatedly, cache their DocumentInfo objects in a thread‑safe dictionary. Remember to invalidate the cache when the source file changes.

private static readonly Dictionary<string, IDocumentInfo> _dimensionCache = 
    new Dictionary<string, IDocumentInfo>();

المعالجة غير المتزامنة للملفات الكبيرة

Leverage async/await patterns to keep UI threads responsive while GroupDocs.Annotation reads metadata in the background.

public async Task<List<PageInfo>> ExtractDimensionsAsync(string pdfPath)
{
    return await Task.Run(() => {
        // Your dimension extraction code here
    });
}

أفضل ممارسات إدارة الذاكرة

  • تخلص من كل مثيل Annotator على الفور.
  • عالج المجموعات الكبيرة على دفعات من 20–50 ملفًا للحفاظ على بصمة الذاكرة منخفضة.
  • راقب استهلاك الذاكرة باستخدام عدادات الأداء أو أدوات التحليل.
  • استخدم مراجع ضعيفة للكائنات المخزنة مؤقتًا إذا كنت تتوقع معدل تبديل عالي.

حالات الاستخدام المتقدمة

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

معالجة المستندات ذات الأحجام المختلطة

Some PDFs contain pages of different sizes (e.g., a cover page in A4 followed by A5 inner pages). Detect size changes by comparing consecutive PageInfo.Width/Height values and apply conditional logic.

var pageSizes = info.PagesInfo.Select(p => new { p.PageNumber, p.Width, p.Height }).ToList();
var uniqueSizes = pageSizes.Select(p => new { p.Width, p.Height }).Distinct().Count();

if (uniqueSizes > 1)
{
    Console.WriteLine("Document contains multiple page sizes");
}

اكتشاف الاتجاه

Determine portrait vs. landscape by comparing width and height. This is useful for auto‑rotating pages in viewers or for generating orientation‑aware thumbnails.

foreach (var page in info.PagesInfo)
{
    string orientation = page.Width > page.Height ? "Landscape" : "Portrait";
    Console.WriteLine($"Page {page.PageNumber}: {orientation}");
}

التكامل مع ميزات GroupDocs الأخرى

Combine dimension extraction with annotation APIs to place stamps precisely, or with conversion APIs to generate images that respect the original page size.

الأسئلة الشائعة

س: هل يمكنني استخراج أبعاد صفحات PDF دون ترخيص؟
ج: نعم. يدعم الإصدار التجريبي المجاني استخراج الأبعاد الأساسية، رغم أنه قد يفرض حدًا على عدد الصفحات التي يمكن معالجتها في كل جلسة.

س: ما الوحدات التي تُقاس بها العرض والارتفاع؟
ج: تُعيد GroupDocs.Annotation الأبعاد بـ النقاط (1 نقطة = 1/72 بوصة). يمكن التحويل إلى بوصات بقسمة القيمة على 72، أو إلى مليمترات بضربها في 0.352778.

س: كيف أتعامل مع ملفات PDF المحمية بكلمة مرور؟
ج: مرّر كلمة المرور عبر LoadOptions عند إنشاء Annotator: new Annotator(path, new LoadOptions { Password = "your‑password" }).

س: هل يمكن أن يعمل هذا مع ملفات PDF المخزنة في سحابة مثل Azure أو AWS؟
ج: نعم. قم بتنزيل الملف إلى Stream محلي أولاً، ثم استخدم مُنشئ Annotator القائم على الـ Stream لتجنب الملفات الوسيطة.

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

س: كيف أتعامل مع ملفات PDF ذات الصفحات المدارة؟
ج: خاصية PageInfo.Rotation تشير إلى زاوية الدوران. إذا كانت الصفحة مدارة 90° أو 270°، قم بتبديل قيم العرض والارتفاع للحصول على الأبعاد المعروضة.

س: هل يمكن استخراج الأبعاد من صفحات محددة فقط؟
ج: نعم. بعد استدعاء GetDocumentInfo()، قم بفلترة مجموعة Pages حسب PageNumber لاستهداف الصفحات الفردية.

س: هل يعمل هذا مع مستندات بصيغة PDF/A؟
ج: بالتأكيد. يدعم GroupDocs.Annotation بالكامل معايير PDF/A‑1 و PDF/A‑2 و PDF/A‑3.

س: كيف أحل أخطاء “Unable to load document”؟
ج: تحقق من أذونات الملف، تأكد من أن الملف غير تالف بفتحه في قارئ PDF، وتأكد من أنك تستخدم نسخة PDF مدعومة (1.4–2.0).

س: هل يمكن الحصول على الأبعاد بالبكسل بدلاً من النقاط؟
ج: قم بالتحويل يدويًا: pixels = points * DPI / 72. بالنسبة إلى DPI الشاشة النموذجية 96، اضرب النقاط في 1.3333.

الموارد الأساسية


آخر تحديث: 2026-06-16
تم الاختبار مع: GroupDocs.Annotation 25.4.0 for .NET
المؤلف: GroupDocs

دروس ذات صلة