العمل مع طبقات PDF باستخدام Python

تتيح لك طبقات PDF، والتي تسمى أيضًا مجموعات المحتوى الاختيارية (OCGs)، تنظيم المحتوى في مجموعات مرئية منفصلة يمكن عرضها أو إخفاؤها في برامج عرض PDF المتوافقة. في Aspose.PDF، يتم إنشاء عمليات الطبقة حول Layer API.

باستخدام Aspose.PDF لبيثون عبر .NET، يمكنك:

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

إضافة طبقات إلى PDF

يقوم هذا المثال بإنشاء PDF بثلاث طبقات. يستخدم Document، يضيف Page، ويلحق Layer الكائنات على تلك الصفحة.

  1. قم بإنشاء ملف جديد Document وأضف Page.
  2. قم بإنشاء وإضافة الطبقة الحمراء.
  3. قم بإنشاء وإضافة الطبقة الخضراء.
  4. قم بإنشاء وإضافة الطبقة الزرقاء.
  5. احفظ مستند PDF.

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

import aspose.pdf as ap

def add_layers(outfile: str) -> None:
    document = ap.Document()
    page = document.pages.add()

    # Red layer
    layer = ap.Layer("oc1", "Red Line")
    layer.contents.append(ap.operators.SetRGBColorStroke(1, 0, 0))
    layer.contents.append(ap.operators.MoveTo(500, 700))
    layer.contents.append(ap.operators.LineTo(400, 700))
    layer.contents.append(ap.operators.Stroke())
    page.layers.append(layer)

    # Green layer
    layer = ap.Layer("oc2", "Green Line")
    layer.contents.append(ap.operators.SetRGBColorStroke(0, 1, 0))
    layer.contents.append(ap.operators.MoveTo(500, 750))
    layer.contents.append(ap.operators.LineTo(400, 750))
    layer.contents.append(ap.operators.Stroke())
    page.layers.append(layer)

    # Blue layer
    layer = ap.Layer("oc3", "Blue Line")
    layer.contents.append(ap.operators.SetRGBColorStroke(0, 0, 1))
    layer.contents.append(ap.operators.MoveTo(500, 800))
    layer.contents.append(ap.operators.LineTo(400, 800))
    layer.contents.append(ap.operators.Stroke())
    page.layers.append(layer)

    document.save(outfile)
    print(f"Layers added successfully. File saved at {outfile}")

قفل طبقة PDF

يفتح هذا المثال ملف PDF، ويغلق طبقة معينة في الصفحة الأولى، ويحفظ الملف المحدث.

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

الأساليب والخصائص المتاحة:

  1. افتح وثيقة PDF.
  2. قم بالوصول إلى الصفحة الأولى من PDF.
  3. تحقق مما إذا كانت الصفحة تحتوي على طبقات.
  4. احصل على الطبقة الأولى وقفلها.
  5. احفظ ملف PDF المحدث.

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

import aspose.pdf as ap

def lock_layer(infile: str, outfile: str) -> None:
    document = ap.Document(infile)
    page = document.pages[1]

    if len(page.layers) > 0:
        layer = page.layers[0]
        layer.lock()
        document.save(outfile)
        print(f"Layer locked successfully. File saved at {outfile}")
    else:
        print("No layers found in the document.")

استخراج عناصر طبقة PDF

يستخدم هذا المثال Aspose.PDF لـ Python عبر مكتبة.NET لاستخراج الطبقات الفردية من الصفحة الأولى من مستند PDF وحفظ كل طبقة كملف PDF منفصل باستخدام Layer.save().

لإنشاء PDF جديد من طبقة، يمكن استخدام مقتطف الشفرة التالي:

  1. قم بتحميل ملف PDF Document.
  2. الوصول إلى الطبقات في الصفحة من 1 إلى Page.
  3. تحقق من وجود الطبقات.
  4. قم بالتكرار من خلال الطبقات وحفظ كل منها.
import aspose.pdf as ap

def extract_layers(infile: str, outfile: str) -> None:
    document = ap.Document(infile)
    layers = document.pages[1].layers

    if len(layers) == 0:
        print("No layers found in the document.")
        return

    index = 1
    for layer in layers:
        output_file = outfile.replace(".pdf", f"{index}.pdf")
        layer.save(output_file)
        print(f"Layer {index} saved to {output_file}")
        index += 1

من الممكن استخراج عناصر طبقة PDF وحفظها في دفق ملفات PDF جديد:

from io import FileIO
import aspose.pdf as ap

def extract_layers_stream(infile: str, outfile: str) -> None:
    document = ap.Document(infile)

    if len(document.pages[1].layers) == 0:
        print("No layers found in the document.")
        return

    layer = document.pages[1].layers[0]

    with FileIO(outfile, "wb") as output_layer:
        layer.save(output_layer)
    print(f"Layer extracted to stream: {outfile}")

قم بتسوية ملف PDF ذي الطبقات

يستخدم هذا البرنامج النصي Aspose.PDF لـ Python عبر .NET لتسوية جميع الطبقات في الصفحة الأولى من مستند PDF. تعمل التسوية على دمج المحتوى المرئي لكل طبقة في طبقة واحدة موحدة، مما يسهل الطباعة أو المشاركة أو الأرشفة دون فقدان الدقة المرئية أو البيانات الخاصة بالطبقة. يتم تنفيذ العملية مع Layer.flatten().

  1. قم بتحميل وثيقة PDF.
  2. طبقات الوصول في الصفحة 1.
  3. تحقق من وجود الطبقات.
  4. قم بتسطيح كل طبقة بـ layer.flatten(True).
  5. احفظ المستند المعدل.
import aspose.pdf as ap

def flatten_layers(infile: str, outfile: str) -> None:
    document = ap.Document(infile)
    layers = document.pages[1].layers

    if len(layers) == 0:
        print("No layers found in the document.")
        return

    for layer in layers:
        layer.flatten(True)

    document.save(outfile)
    print(f"Layers flattened successfully. File saved at {outfile}")

دمج جميع الطبقات في PDF في واحدة

يستخدم مقتطف الشفرة هذا Aspose.PDF لدمج جميع الطبقات في الصفحة الأولى من PDF في طبقة موحدة باسم مخصص باستخدام Page.merge_layers().

  1. قم بتحميل وثيقة PDF.
  2. قم بالوصول إلى الصفحة 1 واسترجع طبقاتها.
  3. تحقق من وجود الطبقات.
  4. حدد اسم طبقة جديدة.
  5. ادمج الطبقات في طبقة واحدة.
  6. احفظ المستند.
import aspose.pdf as ap

def merge_layers(infile: str, outfile: str) -> None:
    document = ap.Document(infile)
    page = document.pages[1]

    if len(page.layers) == 0:
        print("No layers found in the document.")
        return

    new_layer_name = "LayerNew"
    page.merge_layers(new_layer_name)
    document.save(outfile)
    print(f"Layers merged successfully. File saved at {outfile}")

موضوعات الطبقة ذات الصلة