Manipuler les documents PDF en Python

Cette page est utile lorsque vous devez valider la conformité des PDF, créer ou personnaliser une table des matières, définir le comportement d’expiration du document, ou aplatir les PDF remplissables dans les flux de travail Python.

Manipuler le Document PDF en Python

Valider le document PDF pour la norme PDF/A (A 1A et A 1B)

Pour valider un document PDF pour la compatibilité PDF/A-1a ou PDF/A-1b, utilisez le Document classe validate méthode. Cette méthode vous permet de spécifier le nom du fichier dans lequel le résultat doit être enregistré et le type de validation requis, l’énumération PdfFormat : PDF_A_1A ou PDF_A_1B.

L’extrait de code suivant vous montre comment valider un document PDF pour 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)

Le fragment de code suivant vous montre comment valider un document PDF pour 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)

Travailler avec TOC

Ajouter une table des matières au PDF existant

TOC dans PDF signifie “Table of Contents”. C’est une fonctionnalité qui permet aux utilisateurs de naviguer rapidement dans un document en fournissant un aperçu de ses sections et titres.

Pour ajouter une TOC à un fichier PDF existant, utilisez la classe Heading dans le aspose.pdf espace de noms. Le aspose.pdf L’espace de noms peut à la fois créer de nouveaux fichiers PDF et manipuler des fichiers PDF existants. Pour ajouter une TOC à un PDF existant, utilisez l’espace de noms Aspose.Pdf. Le fragment de code suivant montre comment créer une table des matières dans un fichier PDF existant en utilisant Python via .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)

Définir un TabLeaderType différent pour chaque niveau de TOC

Aspose.PDF for Python permet également de définir différents TabLeaderType pour différents niveaux de TOC. Vous devez définir line_dash propriété de TocInfo.

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)

Masquer les numéros de page dans le TOC

Dans le cas où vous ne voulez pas afficher les numéros de page, ainsi que les titres dans le TOC, vous pouvez utiliser is_show_page_numbers propriété de TocInfo Classe comme false. Veuillez vérifier le fragment de code suivant pour masquer les numéros de page dans la table des matières :

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)

Personnaliser les numéros de page lors de l’ajout de la TOC

Il est courant de personnaliser la numérotation des pages dans la TOC lors de l’ajout de la TOC dans un document PDF. Par exemple, nous pourrions avoir besoin d’ajouter un préfixe avant le numéro de page comme P1, P2, P3, etc. Dans un tel cas, Aspose.PDF for Python fournit page_numbers_prefix propriété de TocInfo classe pouvant être utilisée pour personnaliser les numéros de page comme illustré dans l’exemple de code suivant.

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)

Comment définir la date d’expiration du PDF

Nous appliquons des privilèges d’accès sur les fichiers PDF afin qu’un groupe particulier d’utilisateurs puisse accéder à des fonctionnalités/objets spécifiques des documents PDF. Pour restreindre l’accès aux fichiers PDF, nous utilisons généralement le chiffrement et il peut y avoir une exigence de définir une expiration du fichier PDF, afin que l’utilisateur accédant/visualisant le document reçoive une invite valide concernant l’expiration du fichier 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)

Aplatir le PDF remplissable en Python

Les documents PDF incluent souvent des formulaires avec des widgets interactifs remplissables tels que des boutons radio, des cases à cocher, des zones de texte, des listes, etc. Pour les rendre non modifiables à diverses fins d’application, nous devons aplatir le fichier PDF. Aspose.PDF fournit la fonction pour aplatir votre PDF en Python avec seulement quelques lignes de code :

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)

Sujets de documents associés