معالجة مستندات PDF في بايثون

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

معالجة وثيقة PDF في بايثون

التحقق من صحة وثيقة PDF لمعيار PDF A (A 1A و A 1B)

للتحقق من صحة وثيقة PDF لتوافق PDF/A-1a أو PDF/A-1b، استخدم مستند صنف التحقق من صحة طريقة. تسمح لك هذه الطريقة بتحديد اسم الملف الذي سيتم حفظ النتيجة فيه ونوع التحقق المطلوب (تعداد PDF_Format: PDF_A_1A أو PDF_A_1B).

يوضح لك مقتطف الشفرة التالي كيفية التحقق من صحة مستند PDF لـ PDF/A-1A.

import sys
from os import path
import aspose.pdf as ap


def validate_pdfa_standard_a1a(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    document.validate(output_pdf, ap.PdfFormat.PDF_A_1A)

يوضح لك مقتطف الشفرة التالي كيفية التحقق من صحة مستند PDF لـ PDF/a-1b.

import sys
from os import path
import aspose.pdf as ap


def validate_pdfa_standard_a1b(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    document.validate(output_pdf, ap.PdfFormat.PDF_A_1B)

العمل مع TOC

إضافة جدول المحتويات إلى ملف PDF الحالي

يرمز TOC في PDF إلى «جدول المحتويات». إنها ميزة تتيح للمستخدمين التنقل بسرعة عبر المستند من خلال تقديم نظرة عامة على أقسامه وعناوينه.

لإضافة جدول المحتويات إلى ملف PDF موجود، استخدم فئة العنوان في aspose.pdf مساحة الاسم. ال aspose.pdf يمكن لمساحة الاسم إنشاء ملفات PDF جديدة ومعالجتها. لإضافة جدول المحتويات إلى PDF موجود، استخدم مساحة الاسم Aspose.Pdf. يوضح مقتطف الشفرة التالي كيفية إنشاء جدول محتويات داخل ملف PDF موجود باستخدام Python عبر .NET.

import sys
from os import path
import aspose.pdf as ap


def add_table_of_contents(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    toc_page = document.pages.insert(1)
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    toc_page.toc_info = toc_info

    titles = ["First page", "Second page"]
    for index, title_text in enumerate(titles[:2]):
        heading = ap.Heading(1)
        segment = ap.text.TextSegment(title_text)
        heading.toc_page = toc_page
        heading.segments.append(segment)
        destination_page = document.pages[index + 2]
        heading.destination_page = destination_page
        heading.top = destination_page.rect.height
        toc_page.paragraphs.add(heading)

    document.save(output_pdf)

قم بتعيين TabLeaderType مختلفة لمستويات جدول المحتويات المختلفة

يسمح Aspose.PDF لبيثون أيضًا بتعيين TabLeaderType مختلفة لمستويات جدول المحتويات المختلفة. تحتاج إلى ضبط لين_داش ملكية لـ معلومات مركز التنسيق.

import sys
from os import path
import aspose.pdf as ap


def set_toc_levels(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    toc_page = document.pages.add()
    toc_info = ap.TocInfo()
    toc_info.line_dash = ap.text.TabLeaderType.SOLID
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 30
    toc_info.title = title
    toc_page.toc_info = toc_info

    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.left = 0
    toc_info.format_array[0].margin.right = 30
    toc_info.format_array[0].line_dash = ap.text.TabLeaderType.DOT
    toc_info.format_array[0].text_state.font_style = (
        ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    )
    toc_info.format_array[1].margin.left = 10
    toc_info.format_array[1].margin.right = 30
    toc_info.format_array[1].line_dash = 3
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].margin.left = 20
    toc_info.format_array[2].margin.right = 30
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].line_dash = ap.text.TabLeaderType.SOLID
    toc_info.format_array[3].margin.left = 30
    toc_info.format_array[3].margin.right = 30
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD

    page = document.pages.add()
    for level in range(1, 5):
        heading = ap.Heading(level)
        heading.is_auto_sequence = True
        heading.toc_page = toc_page
        heading.text_state.font = ap.text.FontRepository.find_font("Arial")
        segment = ap.text.TextSegment(f"Sample Heading{level}")
        heading.segments.append(segment)
        heading.is_in_list = True
        page.paragraphs.add(heading)

    document.save(output_pdf)

إخفاء أرقام الصفحات في TOC

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

import sys
from os import path
import aspose.pdf as ap


def hide_page_numbers_in_toc(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    toc_page = document.pages.add()
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    toc_info.is_show_page_numbers = False
    toc_page.toc_info = toc_info

    toc_info.format_array_length = 4
    toc_info.format_array[0].margin.right = 0
    toc_info.format_array[0].text_state.font_style = (
        ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
    )
    toc_info.format_array[1].margin.left = 30
    toc_info.format_array[1].text_state.underline = True
    toc_info.format_array[1].text_state.font_size = 10
    toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD

    page = document.pages.add()
    for level in range(1, 2):
        heading = ap.Heading(level)
        heading.toc_page = toc_page
        heading.is_auto_sequence = True
        heading.is_in_list = True
        segment = ap.text.TextSegment(f"this is heading of level {level}")
        heading.segments.append(segment)
        page.paragraphs.add(heading)

    document.save(output_pdf)

تخصيص أرقام الصفحات أثناء إضافة TOC

من الشائع تخصيص ترقيم الصفحات في جدول المحتويات أثناء إضافة جدول المحتويات في مستند PDF. على سبيل المثال، قد نحتاج إلى إضافة بعض البادئات قبل رقم الصفحة مثل P1 و P2 و P3 وما إلى ذلك. في مثل هذه الحالة، يوفر Aspose.PDF لبيثون بادئة أرقام الصفحات ملكية لـ معلومات مركز التنسيق فئة يمكن استخدامها لتخصيص أرقام الصفحات كما هو موضح في نموذج التعليمات البرمجية التالي.

import sys
from os import path
import aspose.pdf as ap


def customize_page_numbers_in_toc(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    toc_page = document.pages.insert(1)
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table Of Contents")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    toc_info.page_numbers_prefix = "P"
    toc_page.toc_info = toc_info

    for index, page in enumerate(document.pages, start=1):
        heading = ap.Heading(1)
        heading.toc_page = toc_page
        heading.destination_page = page
        heading.top = page.rect.height
        segment = ap.text.TextSegment(f"Page {index}")
        heading.segments.append(segment)
        toc_page.paragraphs.add(heading)

    document.save(output_pdf)

كيفية تعيين تاريخ انتهاء صلاحية PDF

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

import sys
from os import path
import aspose.pdf as ap


def set_pdf_expiry_date(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    document.pages.add()
    document.pages[1].paragraphs.add(ap.text.TextFragment("Hello World..."))
    script = ap.annotations.JavascriptAction(
        "var year=2017;"
        "var month=5;"
        "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
        "expiry = new Date(year, month);"
        "if (today.getTime() > expiry.getTime())"
        "app.alert('The file is expired. You need a new one.');"
    )
    document.open_action = script
    document.save(output_pdf)

تسطيح ملف PDF قابل للتعبئة في بايثون

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

import sys
from os import path
import aspose.pdf as ap


def flatten_fillable_pdf(input_pdf, output_pdf):
    document = ap.Document(input_pdf)
    if document.form and document.form.fields:
        for field in document.form.fields:
            field.flatten()
    document.save(output_pdf)

موضوعات المستندات ذات الصلة