Convertir une collection d’images dispersées en un seul PDF consultable est une exigence fréquente pour les outils de reporting, les générateurs de factures et les systèmes d’archivage. Aspose.PDF for Python via .NET est un SDK puissant qui rend cette conversion rapide et fiable dans les applications Python. Ce guide vous accompagne dans l’installation du SDK, le chargement des images avec la Python Imaging Library, la création du PDF page par page, l’ajustement des paramètres de compression, et enfin l’enregistrement du résultat, le tout avec des exemples de code clairs.

Avant de commencer : prérequis et installation

Pour suivre ce tutoriel, vous avez besoin de :

  • Python 3.8 ou version plus récente installé sur votre machine de développement.
  • Un IDE ou éditeur de votre choix (VS Code, PyCharm, etc.).
  • Accès à Internet pour télécharger le package SDK.

Installez le SDK Aspose.PDF et la bibliothèque Pillow (la bibliothèque d’imagerie Python de facto) avec pip :

pip install aspose-pdf pillow

Vous pouvez également télécharger le SDK manuellement depuis la page officielle de publication : Aspose.PDF for Python via .NET Download. Après l’installation, importez les espaces de noms requis dans votre script.

Maintenant que l’environnement est prêt, plongeons dans l’implémentation.

Générer un PDF à partir d’images en Python : guide étape par étape

Étape 1 : Charger les images source

Tout d’abord, utilisez Pillow pour ouvrir chaque fichier image et les conserver dans une liste. Cela prépare les données d’image pour le générateur de PDF.

from PIL import Image
import os

image_folder = "input_images"
image_paths = [os.path.join(image_folder, f) for f in os.listdir(image_folder)
               if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]

images = [Image.open(p) for p in image_paths]

Étape 2 : Créer un nouveau document PDF

Instanciez l’objet Document d’Aspose.PDF qui contiendra les pages.

import aspose.pdf as ap

pdf_doc = ap.Document()

Pour plus de détails sur la classe Document, voir la référence API.

Étape 3 : Ajouter chaque image en tant que page distincte

Parcourez les images chargées, créez une page et intégrez l’image. Le SDK redimensionne automatiquement l’image pour l’adapter à la taille de la page.

for img in images:
    page = pdf_doc.pages.add()
    # Convert Pillow image to a byte stream compatible with Aspose.PDF
    with io.BytesIO() as img_stream:
        img.save(img_stream, format='PNG')
        img_stream.seek(0)
        page.resources.images.add(ap.Image(img_stream))
        # Fit the image to the page dimensions
        page.page_info.width = img.width
        page.page_info.height = img.height

Étape 4 : Configurer les options de compression

Ajustez le niveau de compression des images pour réduire la taille finale du PDF sans sacrifier la qualité.

# Set JPEG compression for all images (if using JPEG format)
for img_res in pdf_doc.resources.images:
    img_res.compression = ap.ImageCompression.JPEG
    img_res.jpeg_quality = 80  # Quality range: 0‑100

Étape 5 : Enregistrer le fichier PDF

Enfin, écrivez le document assemblé sur le disque.

output_path = "output/result.pdf"
pdf_doc.save(output_path)
print(f"PDF generated successfully at {output_path}")

Avec ces étapes, vous disposez d’un flux de travail entièrement fonctionnel pour générer un PDF à partir d’images en Python.

Créer un PDF à partir d’une collection d’images en Python - Exemple de code complet

Le script suivant assemble toutes les pièces en un seul programme exécutable.

import os
import io
from PIL import Image
import aspose.pdf as ap

# -------------------- Configuration --------------------
image_folder = "input_images"          # Folder containing source images
output_pdf = "output/result.pdf"       # Destination PDF file
jpeg_quality = 80                      # Compression quality (0‑100)

# -------------------- Load Images --------------------
image_paths = [os.path.join(image_folder, f) for f in os.listdir(image_folder)
               if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]

images = [Image.open(p) for p in image_paths]

# -------------------- Create PDF Document --------------------
pdf_doc = ap.Document()

for img in images:
    page = pdf_doc.pages.add()
    with io.BytesIO() as img_stream:
        img.save(img_stream, format='PNG')
        img_stream.seek(0)
        pdf_image = page.resources.images.add(ap.Image(img_stream))
        page.page_info.width = img.width
        page.page_info.height = img.height
        # Apply compression if the original is JPEG
        if img.format == 'JPEG':
            pdf_image.compression = ap.ImageCompression.JPEG
            pdf_image.jpeg_quality = jpeg_quality

# -------------------- Save PDF --------------------
pdf_doc.save(output_pdf)
print(f"PDF generated successfully at {output_pdf}")

Remarque : Cet exemple de code démontre la fonctionnalité principale. Avant de l’utiliser dans votre projet, assurez‑vous de mettre à jour les chemins de fichiers (input_images, output/result.pdf), vérifiez que toutes les dépendances requises sont correctement installées et testez soigneusement dans votre environnement de développement. Si vous rencontrez des problèmes, veuillez consulter la documentation officielle ou contacter l’équipe de support pour obtenir de l’aide.

Paramètres avancés de génération PDF : Options et configuration

Au-delà du flux de travail de base, Aspose.PDF propose plusieurs propriétés pour affiner la sortie.

Niveau de compression d’image

Contrôlez le compromis entre la qualité et la taille du fichier.

pdf_image.compression = ap.ImageCompression.JPEG
pdf_image.jpeg_quality = 70   # Lower value = smaller file, lower quality

Taille de la page et marges

Définissez une taille de page personnalisée si vous avez besoin d’une mise en page uniforme.

page.page_info.width = 595   # A4 width in points
page.page_info.height = 842  # A4 height in points
page.page_info.margin = ap.MarginInfo(10, 10, 10, 10)

Résolution (DPI)

Une résolution DPI plus élevée donne des images plus nettes au prix de fichiers PDF plus volumineux.

pdf_doc.page_info.dpi = 300

Pour une liste complète des propriétés configurables, consultez la référence API.

Conclusion

Vous disposez désormais d’une solution complète et programmatique pour générer des PDF à partir d’images en Python en utilisant Aspose.PDF for Python via .NET. Le SDK gère le chargement des images, la création de pages, la compression et l’enregistrement en quelques lignes de code seulement, vous permettant de vous concentrer sur la logique métier plutôt que sur la manipulation bas‑niveau du PDF. Lorsque vous passez en production, n’oubliez pas d’acquérir une licence appropriée ; les détails sont disponibles sur la page de tarification et vous pouvez commencer avec une licence temporaire pour l’évaluation. Bon codage, et profitez de la simplicité de transformer des collections d’images en PDF soignés !

FAQs

  • Comment puis‑je générer un PDF à partir d’images en Python en utilisant Aspose.PDF ?
    Utilisez le SDK Aspose.PDF pour créer un Document, ajoutez une page pour chaque image chargée avec Pillow, définissez éventuellement la compression, puis appelez save() pour écrire le PDF. L’exemple complet est inclus ci‑dessus.

  • Quels formats d’image sont pris en charge pour la génération de PDF ?
    Le SDK accepte PNG, JPG, JPEG, BMP, GIF, et TIFF directement. Pillow peut également convertir les formats non pris en charge en l’un de ceux‑ci avant de les ajouter au PDF.

  • Ai-je besoin d’une licence pour une utilisation commerciale ?
    Oui. Obtenez une licence d’évaluation temporaire depuis la page de licence temporaire et achetez une licence complète via la page de tarification pour les déploiements en production.

  • Puis-je ajuster la taille de la page PDF et la résolution ?
    Absolument. Utilisez page.page_info.width, page.page_info.height et pdf_doc.page_info.dpi pour contrôler les dimensions et le DPI, comme indiqué dans la section Configuration / Options.

En savoir plus