Manipuler un document PDF en Python via .NET

Manipuler un document PDF en Python

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

Pour valider un document PDF pour la compatibilité avec PDF/A-1a ou PDF/A-1b, utilisez la méthode validate de la classe Document. 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 de l’énumération PdfFormat : PDF_A_1A ou PDF_A_1B.

L’exemple de code suivant montre comment valider un document PDF pour PDF/A-1A.


    import aspose.pdf as ap

    # Ouvrir le document
    document = ap.Document(input_pdf)

    # Valider le PDF pour PDF/A-1a
    document.validate(output_xml, ap.PdfFormat.PDF_A_1A)

L’exemple de code suivant montre comment valider un document PDF pour PDF/A-1b.


    import aspose.pdf as ap

    # Ouvrir le document
    document = ap.Document(input_pdf)

    # Valider le PDF pour PDF/A-1b
    document.validate(output_xml, ap.PdfFormat.PDF_A_1B)

Travailler avec TOC

Ajouter TOC à un PDF existant

TOC dans un PDF signifie “Table des matières”. C’est une fonctionnalité qui permet aux utilisateurs de naviguer rapidement dans un document en fournissant une vue d’ensemble de ses sections et titres.

Pour ajouter une TOC à un fichier PDF existant, utilisez la classe Heading dans l’espace de noms aspose.pdf. L’espace de noms aspose.pdf 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. L’extrait de code suivant montre comment créer une table des matières à l’intérieur d’un fichier PDF existant en utilisant Python via .NET.


    import aspose.pdf as ap

    # Charger un fichier PDF existant
    doc = ap.Document(input_pdf)

    # Accéder à la première page du fichier PDF
    tocPage = doc.pages.insert(1)

    # Créer un objet pour représenter les informations du TOC
    tocInfo = ap.TocInfo()
    title = ap.text.TextFragment("Table des matières")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD

    # Définir le titre pour le TOC
    tocInfo.title = title
    tocPage.toc_info = tocInfo

    # Créer des objets chaîne qui seront utilisés comme éléments du TOC
    titles = ["Première page", "Deuxième page", "Troisième page", "Quatrième page"]
    for i in range(0, 2):
        # Créer un objet Heading
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = tocPage
        heading2.segments.append(segment2)

        # Spécifier la page de destination pour l'objet heading
        heading2.destination_page = doc.pages[i + 2]

        # Page de destination
        heading2.top = doc.pages[i + 2].rect.height

        # Coordonnée de destination
        segment2.text = titles[i]

        # Ajouter le heading à la page contenant le TOC
        tocPage.paragraphs.add(heading2)

    # Enregistrer le document mis à jour
    doc.save(output_pdf)

Définir différents TabLeaderType pour différents niveaux de TOC

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


    import aspose.pdf as ap

    doc = ap.Document()
    tocPage = doc.pages.add()
    toc_info = ap.TocInfo()

    # définir le LeaderType
    toc_info.line_dash = ap.text.TabLeaderType.SOLID
    title = ap.text.TextFragment("Table des Matières")
    title.text_state.font_size = 30
    toc_info.title = title

    # Ajouter la section de la liste à la collection de sections du document Pdf
    tocPage.toc_info = toc_info
    # Définir le format de la liste à quatre niveaux en définissant les marges de gauche
    # et
    # les paramètres de format de texte de chaque niveau

    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

    # Créer une section dans le document Pdf
    page = doc.pages.add()

    # Ajouter quatre titres dans la section
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        heading2.toc_page = tocPage
        segment2.text = "Titre Exemple" + str(Level)
        heading2.text_state.font = ap.text.FontRepository.find_font("Arial")

        # Ajouter le titre dans la Table des Matières.
        heading2.is_in_list = True
        page.paragraphs.add(heading2)

    # enregistrer le Pdf
    doc.save(output_pdf)

Masquer les numéros de page dans le sommaire

Dans le cas où vous ne souhaitez pas afficher les numéros de page avec les en-têtes dans le sommaire, vous pouvez utiliser la propriété is_show_page_numbers de la classe TocInfo comme false. Veuillez consulter l’extrait de code suivant pour masquer les numéros de page dans le sommaire :


    import aspose.pdf as ap

    doc = ap.Document()
    toc_page = doc.pages.add()
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table des Matières")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    toc_info.title = title
    # Ajouter la section de liste à la collection de sections du document Pdf
    toc_page.toc_info = toc_info
    # Définir le format de la liste à quatre niveaux en configurant les marges de gauche et
    # les paramètres de format de texte de chaque niveau

    toc_info.is_show_page_numbers = False
    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 = doc.pages.add()
    # Ajouter quatre en-têtes dans la section
    for Level in range(1, 5):
        heading2 = ap.Heading(Level)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        heading2.is_auto_sequence = True
        segment2.text = "Ceci est l'en-tête du niveau " + str(Level)
        heading2.is_in_list = True
        page.paragraphs.add(heading2)
    doc.save(output_pdf)

Personnaliser les numéros de page lors de l’ajout de la table des matières

Il est courant de personnaliser la numérotation des pages dans la table des matières lors de l’ajout de celle-ci 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 ce cas, Aspose.PDF pour Python fournit la propriété page_numbers_prefix de la classe TocInfo qui peut être utilisée pour personnaliser les numéros de page comme montré dans l’exemple de code suivant.


    import aspose.pdf as ap

    # Charger un fichier PDF existant
    doc = ap.Document(input_pdf)
    # Accéder à la première page du fichier PDF
    toc_page = doc.pages.insert(1)
    # Créer un objet pour représenter les informations de la table des matières
    toc_info = ap.TocInfo()
    title = ap.text.TextFragment("Table des Matières")
    title.text_state.font_size = 20
    title.text_state.font_style = ap.text.FontStyles.BOLD
    # Définir le titre pour la table des matières
    toc_info.title = title
    toc_info.page_numbers_prefix = "P"
    toc_page.toc_info = toc_info
    for i in range(len(doc.pages)):
        # Créer un objet de titre
        heading2 = ap.Heading(1)
        segment2 = ap.text.TextSegment()
        heading2.toc_page = toc_page
        heading2.segments.append(segment2)
        # Spécifier la page de destination pour l'objet de titre
        heading2.destination_page = doc.pages[i + 1]
        # Page de destination
        heading2.top = doc.pages[i + 1].rect.height
        # Coordonnée de destination
        segment2.text = "Page " + str(i)
        # Ajouter le titre à la page contenant la table des matières
        toc_page.paragraphs.add(heading2)

    # Enregistrer le document mis à jour
    doc.save(output_pdf)

Comment définir la date d’expiration d’un PDF

Nous appliquons des privilèges d’accès sur les fichiers PDF afin qu’un certain groupe d’utilisateurs puisse accéder à des fonctionnalités/objets particuliers des documents PDF. Afin de restreindre l’accès au fichier PDF, nous appliquons généralement un cryptage et nous pouvons avoir besoin de définir l’expiration du fichier PDF, de sorte que l’utilisateur accédant/visualisant le document reçoive une invite valide concernant l’expiration du fichier PDF.


    import aspose.pdf as ap

    # Instancier un objet Document
    doc = ap.Document()
    # Ajouter une page à la collection de pages du fichier PDF
    doc.pages.add()
    # Ajouter un fragment de texte à la collection de paragraphes de l'objet page
    doc.pages[1].paragraphs.add(ap.text.TextFragment("Bonjour le monde..."))
    # Créer un objet JavaScript pour définir la date d'expiration du PDF
    javaScript = 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('Le fichier est expiré. Vous avez besoin d'un nouveau.');"
    )
    # Définir JavaScript comme action d'ouverture du PDF
    doc.open_action = javaScript

    # Enregistrer le document PDF
    doc.save(output_pdf)

Aplatir un 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 le rendre non modifiable à des fins d’application variées, nous devons aplatir le fichier PDF. Aspose.PDF fournit la fonction pour aplatir votre PDF en Python avec seulement quelques lignes de code :


    import aspose.pdf as ap

    # Charger le formulaire PDF source
    doc = ap.Document(input_pdf)

    # Aplatir le PDF remplissable
    if len(doc.form.fields) > 0:
        for item in doc.form.fields:
            item.flatten()

    # Enregistrer le document mis à jour
    doc.save(output_pdf)