option

Utilisez cette fonctionnalité chaque fois que l'utilisateur souhaite effectuer une opération sur des fichiers PDF. Cela inclut la lecture ou l'extraction de texte/tableaux à partir de fichiers PDF, la combinaison ou la fusion de plusieurs fichiers PDF en un seul, le fractionnement de fichiers PDF, la rotation de pages, l'ajout de filigranes, la création de nouveaux fichiers PDF, le remplissage de formulaires PDF, le chiffrement/déchiffrement de fichiers PDF, l'extraction d'images et la reconnaissance optique de caractères (OCR) sur des fichiers PDF numérisés afin de les rendre consultables. Si l'utilisateur mentionne un fichier .pdf ou demande d'en créer un, utilisez cette compétence.

...Développer tout
52
Heure mise à jour 11 août 2026

PDF Guide de traitement

Présentation

Ce guide couvre les opérations de traitement essentielles d'PDF s à l'aide de bibliothèques Python et d'outils en ligne de commande. Pour les fonctionnalités avancées, les bibliothèques JavaScript et des exemples détaillés, consultez REFERENCE.md. Si vous devez remplir un formulaire PDF, lisez FORMS.md et suivez les instructions qui y figurent.

Démarrage rapide

from pypdf import PdfReader, Pdf Writer# Lire un PDF
reader = PdfReader("document.pdf")
print(f"Pages : {len(reader.pages)}")# Extraire le texte
text = ""
for page in reader.pages:
    text += page.extract_text()

Bibliothèques Python

pypdf - Opérations de base

Fusionner des fichiers « PDFs»
from pypdf import PdfWriter, PdfReader writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
    reader = PdfReader(pdf_file)
   for page in reader.pages:
        writer.add_page(page)with open("merged.pdf", "wb") as output:
    writer.write(output)
Fusionner PDF
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as output:
        writer.write(output)
Extraire les métadonnées
reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Titre : {meta.title}")
print(f"Auteur : {meta.author}")
print(f"Sujet : {meta.subject}")
print(f"Créateur : {meta.creator}")
Faire pivoter les pages
reader = PdfReader("input.pdf")
writer = PdfWriter()page = reader.pages[0]
page.rotate(90)  # Rotation de 90 degrés dans le sens des aiguilles d'une montre
writer.add_page(page)with open("rotated.pdf", "wb") as output:
    writer.write(output)

pdfplumber - Extraction de texte et de tableaux

Extraction de texte avec mise en page
import pdfplumberwith pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)
Extraire les tableaux
avec pdfplumber.open("document.pdf") as pdf:
    for i, page in enumerate(pdf.pages) :
        tables = page.extract_tables()
        for j, table in enumerate(tables):
            print(f"Tableau {j+1} à la page {i+1}:")
            for row in table:
                print(row)
Extraction avancée de tableaux
import pandas aspdwith pdfplumber.open("document.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            if table:  # Vérifier que le tableau n'est pas vide
                df = pd.DataFrame(table[1:], columns=table[0])
                all_tables.append(df)# Combiner toutes les tables
if all_tables:
    combined_df = pd.concat(all_tables,ignore_index=True)
    combined_df.to_excel("extracted_tables.xlsx",index=False)

reportlab - Créer des fichiers « PDFs»

Création d’un document « PDF » de base
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter# Ajouter du texte
c.drawString(100, height - 100, "Hello World!")
c.drawString(100, height - 120, "Ceci est un PDF créé avec reportlab")# Ajouter une ligne
c.line(100, height - 140, 400, height - 140)# Enregistrer
c.save()
Créer un PDF e comportant plusieurs pages
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheetdoc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []# Ajouter du contenu
title = Paragraph("Titre du rapport", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))body = Paragraph("Ceci est le corps du rapport. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())# Page 2
story.append(Paragraph("Page 2", styles['Heading1']))
story.append(Paragraph("Contenu de la page 2", styles['Normal']))# Générer l'PDF
doc.build(story)
Indices et exposants

IMPORTANT: N’utilisez jamais les caractères Unicode en indice ou en exposant (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) dans les documents ReportLab PDF. Les polices intégrées ne contiennent pas ces glyphes, ce qui entraîne leur affichage sous forme de carrés noirs pleins.

Utilisez plutôt les balises XML de ReportLab dans les objets Paragraph :

from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheetstyles = getSampleStyleSheet()# Indices : utilisez la balise  chemical = Paragraph("H2O", styles['Normal'])# Exposants : utilisez la balise  squared = Paragraph("x² +y²", styles['Normal'])

Pour le texte dessiné sur le canevas (et non les objets Paragraph), ajustez manuellement la taille et la position de la police plutôt que d’utiliser les indices et exposants Unicode.

Outils en ligne de commande

pdftotext (poppler-utils)

# Extraire du texte
pdftotext input.pdf output.txt# Extraire du texte en conservant la mise en page
pdftotext -layout input.pdf output.txt# Extraire des pages spécifiques
pdftotext -f 1 -l 5 input.pdf output.txt  # Pages 1 à 5

qpdf

# Fusionner des pages PDFqpdf --empty --pages file1.pdf file2.pdf -- merged.pdf# Diviser les pages
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf# Faire pivoter les pages
qpdf input.pdf output.pdf --rotate=+90:1  # Faire pivoter la page 1 de 90 degrés# Supprimer le mot de passe
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf

pdftk (si disponible)

# Fusionner
pdftk file1.pdf file2.pdf cat output merged.pdf# Diviser
pdftk input.pdf  burst# Faire pivoter
pdftk input.pdf rotate 1east output rotated.pdf

Tâches courantes

Extraire du texte à partir d’ PDFs numérisées

# Pré-requis : pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path# Convertir des fichiers « PDF » en images
images = convert_from_path('scanned.pdf')# Effectuer la reconnaissance optique de caractères (OCR) sur chaque page
text = ""
for i, image in enumerate(images):
    text += f"Page {i+1}:\n"
    text += pytesseract.image_to_string(image)
    text += "\n\n"print(text)

Ajouter un filigrane

from pypdf import PdfReader, Pdf Writer# Créer un filigrane (ou charger un filigrane existant)
watermark = PdfReader("watermark.pdf").pages[0]# Appliquer à toutes les pages
reader = PdfReader("document.pdf")
writer = PdfWriter()for page in reader.pages:
    page.merge_page(filigrane)
    writer.add_page(page)with open("watermarked.pdf", "wb") as output:
    writer.write(output)

Extraire les images

# Utilisation de la commande « pdf» (poppler-utils)
pdfimages -j input.pdf  output_prefix# Cela extrait toutes les images sous la forme output_prefix-000.jpg, output_prefix-001.jpg, etc.

Protection par mot de passe

from pypdf import PdfReader, PdfWriterreader = PdfReader("input.pdf")
writer = PdfWriter()for page in reader.pages:
    writer.add_page(page)# Ajouter un mot de passe
writer.encrypt("userpassword", "ownerpassword")with open("encrypted.pdf", "wb") as output:
    writer.write(output)

Référence rapide

Étapes suivantes

  • Pour une utilisation avancée de pypdfium2, consultez REFERENCE.md
  • Pour les bibliothèques JavaScript (pdf-lib), consultez REFERENCE.md
  • Si vous devez remplir un formulaire d'PDF, suivez les instructions fournies dans FORMS.md
  • Pour les guides de dépannage, consultez REFERENCE.md
Voir sur GitHub

PDF Processing Guide

Overview

This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.

Quick Start

from pypdf import PdfReader, PdfWriter# Read a PDF
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")# Extract text
text = ""
for page in reader.pages:
    text += page.extract_text()

Python Libraries

pypdf - Basic Operations

Merge PDFs
from pypdf import PdfWriter, PdfReaderwriter = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)with open("merged.pdf", "wb") as output:
    writer.write(output)
Split PDF
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as output:
        writer.write(output)
Extract Metadata
reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Title: {meta.title}")
print(f"Author: {meta.author}")
print(f"Subject: {meta.subject}")
print(f"Creator: {meta.creator}")
Rotate Pages
reader = PdfReader("input.pdf")
writer = PdfWriter()page = reader.pages[0]
page.rotate(90)  # Rotate 90 degrees clockwise
writer.add_page(page)with open("rotated.pdf", "wb") as output:
    writer.write(output)

pdfplumber - Text and Table Extraction

Extract Text with Layout
import pdfplumberwith pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)
Extract Tables
with pdfplumber.open("document.pdf") as pdf:
    for i, page in enumerate(pdf.pages):
        tables = page.extract_tables()
        for j, table in enumerate(tables):
            print(f"Table {j+1} on page {i+1}:")
            for row in table:
                print(row)
Advanced Table Extraction
import pandas as pdwith pdfplumber.open("document.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            if table:  # Check if table is not empty
                df = pd.DataFrame(table[1:], columns=table[0])
                all_tables.append(df)# Combine all tables
if all_tables:
    combined_df = pd.concat(all_tables, ignore_index=True)
    combined_df.to_excel("extracted_tables.xlsx", index=False)

reportlab - Create PDFs

Basic PDF Creation
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvasc = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter# Add text
c.drawString(100, height - 100, "Hello World!")
c.drawString(100, height - 120, "This is a PDF created with reportlab")# Add a line
c.line(100, height - 140, 400, height - 140)# Save
c.save()
Create PDF with Multiple Pages
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheetdoc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []# Add content
title = Paragraph("Report Title", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))body = Paragraph("This is the body of the report. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())# Page 2
story.append(Paragraph("Page 2", styles['Heading1']))
story.append(Paragraph("Content for page 2", styles['Normal']))# Build PDF
doc.build(story)
Subscripts and Superscripts

IMPORTANT: Never use Unicode subscript/superscript characters (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab PDFs. The built-in fonts do not include these glyphs, causing them to render as solid black boxes.

Instead, use ReportLab's XML markup tags in Paragraph objects:

from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheetstyles = getSampleStyleSheet()# Subscripts: use <sub> tag
chemical = Paragraph("H<sub>2</sub>O", styles['Normal'])# Superscripts: use <super> tag
squared = Paragraph("x<super>2</super> + y<super>2</super>", styles['Normal'])

For canvas-drawn text (not Paragraph objects), manually adjust font the size and position rather than using Unicode subscripts/superscripts.

Command-Line Tools

pdftotext (poppler-utils)

# Extract text
pdftotext input.pdf output.txt# Extract text preserving layout
pdftotext -layout input.pdf output.txt# Extract specific pages
pdftotext -f 1 -l 5 input.pdf output.txt  # Pages 1-5

qpdf

# Merge PDFs
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf# Split pages
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf# Rotate pages
qpdf input.pdf output.pdf --rotate=+90:1  # Rotate page 1 by 90 degrees# Remove password
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf

pdftk (if available)

# Merge
pdftk file1.pdf file2.pdf cat output merged.pdf# Split
pdftk input.pdf burst# Rotate
pdftk input.pdf rotate 1east output rotated.pdf

Common Tasks

Extract Text from Scanned PDFs

# Requires: pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path# Convert PDF to images
images = convert_from_path('scanned.pdf')# OCR each page
text = ""
for i, image in enumerate(images):
    text += f"Page {i+1}:\n"
    text += pytesseract.image_to_string(image)
    text += "\n\n"print(text)

Add Watermark

from pypdf import PdfReader, PdfWriter# Create watermark (or load existing)
watermark = PdfReader("watermark.pdf").pages[0]# Apply to all pages
reader = PdfReader("document.pdf")
writer = PdfWriter()for page in reader.pages:
    page.merge_page(watermark)
    writer.add_page(page)with open("watermarked.pdf", "wb") as output:
    writer.write(output)

Extract Images

# Using pdfimages (poppler-utils)
pdfimages -j input.pdf output_prefix# This extracts all images as output_prefix-000.jpg, output_prefix-001.jpg, etc.

Password Protection

from pypdf import PdfReader, PdfWriterreader = PdfReader("input.pdf")
writer = PdfWriter()for page in reader.pages:
    writer.add_page(page)# Add password
writer.encrypt("userpassword", "ownerpassword")with open("encrypted.pdf", "wb") as output:
    writer.write(output)

Quick Reference

Next Steps

  • For advanced pypdfium2 usage, see REFERENCE.md
  • For JavaScript libraries (pdf-lib), see REFERENCE.md
  • If you need to fill out a PDF form, follow the instructions in FORMS.md
  • For troubleshooting guides, see REFERENCE.md

Installer pdf

Téléchargez et décompressez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez le dépôt et copiez les fichiers de compétence dans votre projet.

git clone https://github.com/anthropics/skills/tree/main/skills/pdf # Copy the skill folder to .claude/skills/ or .codex/skills/

Copier Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ ; Claude la détectera automatiquement et l'utilisera.

Compétences similaires

agentwallet
Heure mise à jour 7 juillet 2026
humanize
Heure mise à jour 7 juillet 2026
trello
Heure mise à jour 1 juillet 2026
brightdata-cli
Heure mise à jour 29 juin 2026
OR