معالجة محتوى PDF باستخدام API الجديدة لـ محرر ملفات ONLYOFFICE PDF

١٨ مارس ٢٠٢٦بواسطة Moncif

طرحت ONLYOFFICE مؤخرًا PDF API جديدة، مما يوفر دعم وحدات الماكرو إلى ملفات PDF. باستخدام هذه الطرق الجديدة، يمكنكم التفاعل مع مستندات PDF برمجيًا — مما يؤدي إلى أتمتة المهام التي كانت تتطلب عملاً يدويًا بخلاف ذلك. في منشور المدونة هذا، سنستكشف ثلاث وحدات ماكرو عملية توضح ما يمكنكم القيام به باستخدام واجهة برمجة التطبيقات (API) الجديدة.
معالجة محتوى PDF باستخدام API الجديدة لـ PDF محرر ملفات ONLYOFFICE

طرق PDF API الجديدة

فيما يلي نظرة عامة على الطرق الجديدة المستخدمة عبر ثلاثة أمثلة لوحدات الماكرو:

  • GetPagesCount() تُرجع إجمالي عدد الصفحات في مستند PDF.
  • GetPage(index) تسترد عنصر صفحة محددًا بواسطة فهرسه، وتُرجع عنصر ApiPage.
  • GetAllAnnots() تُرجع مصفوفة من جميع عناصر التعليقات التوضيحية في صفحة معينة.
  • GetContents() تسترد المحتوى النصي لتعليق توضيحي.
  • GetAllDrawings() تُرجع مصفوفة من جميع عناصر الرسم (الأشكال والمخططات والصور).
  • SetPosition(x, y) تضع عنصر رسم مباشرة على الصفحة باستخدام الإحداثيات المطلقة.
  • AddObject(object) تضيف عنصر رسم (شكل، مخطط، صورة) إلى صفحة محددة
  • Delete() تزيل العنصر المحدد من المستند.

تنتمي هذه الطرق إلى فئات ApiDocument و ApiPage و ApiBaseAnnotation و ApiDrawing . يمكن دمجها مع طرق Office API الحالية التي قد تكونون على دراية بها بالفعل.

المثال 1: إزالة التعليقات التوضيحية بواسطة كلمة رئيسية

يقوم الماكرو الأول الخاص بنا بالبحث عن جميع التعليقات التوضيحية التي تحتوي على كلمة رئيسية محددة وحذفها. دعونا نستعرضه خطوة بخطوة.

إعداد الكلمة الرئيسية والمستند

const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;

أولاً، نحدد الكلمة الرئيسية المستهدفة — ستتم إزالة أي تعليق توضيحي تتضمن محتوياته هذه الكلمة. بعد ذلك، نسترد المستند الحالي ونحصل على إجمالي عدد الصفحات باستخدام GetPagesCount(). سيتتبع متغير deletedCount عدد التعليقات التوضيحية التي نقوم بحذفها.

for (let i = 0; i < pagesCount; i++) {
    const page = doc.GetPage(i);
    const annots = page.GetAllAnnots();

if (!annots || annots.length === 0) continue;

تتكرر حلقة for عبر كل صفحة. لكل صفحة، نستخدم GetPage() للحصول على عنصر ApiPage و GetAllAnnots() لاسترداد جميع التعليقات التوضيحية في تلك الصفحة. إذا لم تكن الصفحة تحتوي على تعليقات توضيحية، فإننا نتخطاها وننتقل إلى الصفحة التالية.

مطابقة التعليقات التوضيحية وحذفها

for (let j = annots.length - 1; j >= 0; j--) {
    const annot = annots[j];
    const contents = (annot.GetContents() || "").toLowerCase();

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

if (contents.includes(KEYWORD.toLowerCase())) {
    annot.Delete();
    deletedCount++;
}

إذا كان نص التعليق التوضيحي يتضمن الكلمة الرئيسية المستهدفة، فإننا نستدعي Delete() لإزالتها من المستند وزيادة العداد.

console.log("Deleted annotations containing keyword:", KEYWORD);

console.log("Total deleted:", deletedCount);

في النهاية، يسجل الماكرو الكلمة الرئيسية التي تم البحث عنها وإجمالي عدد التعليقات التوضيحية المحذوفة في وحدة التحكم.

كود الماكرو الكامل:

(function () {
    const KEYWORD = "example";
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let deletedCount = 0;

for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const annots = page.GetAllAnnots();

if (!annots || annots.length === 0) continue;

for (let j = annots.length - 1; j >= 0; j--) {
            const annot = annots[j];
            const contents = (annot.GetContents() || "").toLowerCase();

if (contents.includes(KEYWORD.toLowerCase())) {
                annot.Delete();
                deletedCount++;
            }
        }
    }

console.log("Deleted annotations containing keyword:", KEYWORD);
    console.log("Total deleted:", deletedCount);
})();

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

معالجة محتوى PDF باستخدام API الجديدة لـ PDF محرر ملفات ONLYOFFICE

المثال 2: إزالة جميع الرسومات

يقوم هذا الماكرو بفحص كل صفحة وحذف جميع عناصر الرسم — أو نوع محدد فقط. يستخدم GetAllDrawings() لاسترداد جميع العناصر المرئية في كل صفحة، و GetClassType() للتحقق من نوعها قبل الحذف.

يتحكم متغير targetType الموجود في الأعلى في ما يتم إزالته. اضبطوه على “all” لإزالة كل شيء، أو استخدموا “shape” أو “image” أو “chart” لاستهداف نوع معين من الرسومات.

(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let totalDeleted = 0;

const targetType = "all";

for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const drawings = page.GetAllDrawings();

for (let j = 0; j < drawings.length; j++) {
            if (targetType === "all" || drawings[j].GetClassType() === targetType) {
                drawings[j].Delete();
                totalDeleted++;
            }
        }
    }

console.log("Deleted " + totalDeleted + " drawing(s) from " + pagesCount + " page(s).");
})();

سواء كنتم تقومون بإعداد مستند للطباعة، أو إزالة المخططات القديمة، أو تجريد الصور قبل إعادة التوزيع — فإن هذا الماكرو يتولى الأمر. من خلال تعديل متغير targetType، يمكنكم التبديل بين التنظيف الكامل والانتقائي دون تعديل أي جزء آخر من الكود.

معالجة محتوى PDF باستخدام API الجديدة لـ PDF محرر ملفات ONLYOFFICE

المثال 3: إضافة علامة مائية إلى كل صفحة

يقوم الماكرو الأخير الخاص بنا بإنشاء شكل علامة مائية قابل للتخصيص ويضعه على كل صفحة من صفحات المستند. يستخدم SetPosition() لوضع الشكل في إحداثيات دقيقة على الصفحة و AddObject() لإضافته إلى كل صفحة.

يتم تعريف جميع الخصائص الرئيسية كمتغيرات في الجزء العلوي، مما يجعل من السهل ضبط نص العلامة المائية، والألوان، وحجم الخط، والموضع، وزاوية الدوران.

(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();

const watermarkText = "DRAFT";
    const bgColor = Api.CreateRGBColor(200, 200, 200);
    const textColor = Api.CreateRGBColor(255, 255, 255);
    const fontSize = 72;
    const positionX = 1200000;
    const positionY = 4000000;
    const rotation = -45;

for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const fill = Api.CreateSolidFill(bgColor);
        const stroke = Api.CreateStroke(0, Api.CreateNoFill());
        const watermark = Api.CreateShape("rect", 160 * 36000, 20 * 36000, fill, stroke);
        watermark.SetPosition(positionX, positionY);
        watermark.SetRotation(rotation);

const content = watermark.GetContent();
        const para = content.GetElement(0);
        para.SetJc("center");
        const run = para.AddText(watermarkText);
        run.SetFontSize(fontSize);
        run.SetBold(true);
        run.SetFill(Api.CreateSolidFill(textColor));

page.AddObject(watermark);
    }
})();

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

معالجة محتوى PDF باستخدام API الجديدة لـ PDF محرر ملفات ONLYOFFICE

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

ONLYOFFICE ١. أنشئ حسابك المجاني من

،٢. قم بعرض و تحرير أو التعاون على المستندات، الجداول ، العروض التقديمية