Passer au contenu du pied de page
OUTILS PDF

Comment lire des fichiers PDF en C++

Les fichiers PDF (Portable Document Format) sont largement utilisés pour l'échange de documents, et pouvoir lire leur contenu par programme est précieux dans diverses applications. Les bibliothèques suivantes sont disponibles pour lire des PDF en C++ : Poppler, MuPDF, Haru free PDF library, Xpdf, et Qpdf.

Dans cet article, nous explorerons comment lire des fichiers PDF en C++ en utilisant l'outil en ligne de commande Xpdf. Xpdf fournit une gamme d'utilitaires pour travailler avec des fichiers PDF, y compris pour extraire le contenu textuel. En intégrant Xpdf dans un programme C++, nous pouvons extraire le texte des fichiers PDF et le traiter par programme.

Xpdf - Outils en ligne de commande

Xpdf est une suite logicielle open-source qui fournit une collection d'outils et de bibliothèques pour travailler avec des fichiers PDF (Portable Document Format). La suite Xpdf inclut plusieurs utilitaires en ligne de commande et bibliothèques C++ qui permettent diverses fonctionnalités liées aux PDF, telles que l'analyse, le rendu, l'extraction de texte, et plus encore. Certains des composants clés de Xpdf incluent pdfimages, pdftops, pdfinfo, et pdftotext. Ici, nous allons utiliser pdftotext pour lire des documents PDF.

pdftotext est un outil en ligne de commande qui extrait le contenu textuel des fichiers PDF et le sort en tant que texte brut. Cet outil est particulièrement utile lorsque vous devez extraire l'information textuelle des PDF pour un traitement ou une analyse ultérieure. En utilisant des options, vous pouvez également spécifier quelle page ou quelles pages extraire le texte.

Prérequis

Pour créer un projet de lecteur PDF pour extraire du texte, nous avons besoin que les prérequis suivants soient en place :

  1. Un compilateur C++ comme GCC ou Clang installé sur votre système. Vous pouvez utiliser n'importe quel IDE qui prend en charge la programmation C++.
  2. Outils en ligne de commande Xpdf installés sur votre système. Xpdf est une collection d'utilitaires PDF qui peut être obtenue depuis le site Web de Xpdf. Téléchargez-le à partir du site Web de Xpdf. Définissez le répertoire bin de Xpdf dans le chemin des variables d'environnement pour y accéder de n'importe où en utilisant l'outil en ligne de commande.

Étapes pour lire le format de fichier PDF en C++

Étape 1 : Inclure les en-têtes nécessaires

Tout d'abord, ajoutons les fichiers d'en-tête nécessaires dans notre fichier main.cpp au début :

#include <cstdlib>  // For system call
#include <iostream> // For basic input and output
#include <fstream>  // For file stream operations
#include <cstdlib>  // For system call
#include <iostream> // For basic input and output
#include <fstream>  // For file stream operations
C++

Étape 2 : Écrire le code C++

Écrivons le code C++ qui invoque l'outil en ligne de commande Xpdf pour extraire le contenu textuel du document PDF. Nous allons utiliser le fichier input.pdf suivant :

Comment lire des fichiers PDF en C++ : Figure 1

L'exemple de code est le suivant :

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main() {
    // Specify the input and output file paths
    string pdfPath = "input.pdf";
    string outputFilePath = "output.txt";

    // Construct the command to run pdftotext
    string command = "pdftotext " + pdfPath + " " + outputFilePath;
    int status = system(command.c_str());

    // Check if the command executed successfully
    if (status == 0) {
        cout << "Text extraction successful." << endl;
    } else {
        cout << "Text extraction failed." << endl;
        return 1; // Exit the program with error code
    }

    // Open the output file to read the extracted text
    ifstream outputFile(outputFilePath);
    if (outputFile.is_open()) {
        string textContent;
        string line;
        while (getline(outputFile, line)) {
            textContent += line + "\n"; // Append each line to the textContent
        }
        outputFile.close();

        // Display the extracted text
        cout << "Text content extracted from PDF document:" << endl;
        cout << textContent << endl;
    } else {
        cout << "Failed to open output file." << endl;
        return 1; // Exit the program with error code
    }

    return 0; // Exit the program successfully
}
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main() {
    // Specify the input and output file paths
    string pdfPath = "input.pdf";
    string outputFilePath = "output.txt";

    // Construct the command to run pdftotext
    string command = "pdftotext " + pdfPath + " " + outputFilePath;
    int status = system(command.c_str());

    // Check if the command executed successfully
    if (status == 0) {
        cout << "Text extraction successful." << endl;
    } else {
        cout << "Text extraction failed." << endl;
        return 1; // Exit the program with error code
    }

    // Open the output file to read the extracted text
    ifstream outputFile(outputFilePath);
    if (outputFile.is_open()) {
        string textContent;
        string line;
        while (getline(outputFile, line)) {
            textContent += line + "\n"; // Append each line to the textContent
        }
        outputFile.close();

        // Display the extracted text
        cout << "Text content extracted from PDF document:" << endl;
        cout << textContent << endl;
    } else {
        cout << "Failed to open output file." << endl;
        return 1; // Exit the program with error code
    }

    return 0; // Exit the program successfully
}
C++

Explication du Code

Dans le code ci-dessus, nous définissons la variable pdfPath pour contenir le chemin du fichier PDF d'entrée. Assurez-vous de le remplacer par le chemin approprié vers votre document PDF d'entrée réel.

Nous définissons également la variable outputFilePath pour contenir le chemin vers le fichier texte de sortie qui sera généré par Xpdf.

Le code exécute la commande pdftotext en utilisant la fonction system, en passant le chemin du fichier PDF d'entrée et le chemin du fichier texte de sortie comme arguments en ligne de commande. La variable status capture le statut de sortie de la commande.

Si pdftotext s'exécute avec succès (indiqué par un statut de 0), nous procédons à l'ouverture du fichier texte de sortie en utilisant ifstream. Nous lisons ensuite le contenu texte ligne par ligne et le stockons dans la chaîne textContent.

Enfin, nous affichons le contenu texte extrait dans la console depuis le fichier de sortie généré. Si vous n'avez pas besoin du fichier texte de sortie modifiable ou si vous souhaitez libérer de l'espace disque, à la fin du programme, il suffit de le supprimer avant de terminer la fonction main avec la commande suivante :

remove(outputFilePath.c_str());
remove(outputFilePath.c_str());
C++

Étape 3 : Compiler et exécuter le programme

Compilez le code C++ et exécutez l'exécutable. Si le pdftotext est ajouté au chemin du système des variables d'environnement, sa commande s'exécutera avec succès. Le programme génère le fichier texte de sortie et extrait le contenu textuel du document PDF. Le texte extrait est ensuite affiché sur la console.

La sortie est la suivante

Comment lire des fichiers PDF en C++ : Figure 2

Lire des fichiers PDF en C#

Bibliothèque IronPDF

IronPDF est une bibliothèque PDF populaire pour C# qui fournit de puissantes fonctionnalités pour travailler avec des documents PDF. Elle permet aux développeurs de créer, éditer, modifier, et lire des fichiers PDF par programme.

Lire des documents PDF en utilisant la bibliothèque IronPDF est un processus simple. La bibliothèque offre diverses méthodes et propriétés qui permettent aux développeurs d'extraire du texte, des images, des métadonnées, et d'autres données des pages PDF. Les informations extraites peuvent être utilisées pour un traitement ultérieur, une analyse, ou un affichage dans l'application.

L'exemple de code suivant va utiliser IronPDF pour lire des fichiers PDF :

// Import necessary namespaces
using IronPdf; // For PDF functionalities
using IronSoftware.Drawing; // For handling images
using System.Collections.Generic; // For using the List

// Example of extracting text and images from PDF using IronPDF

// Open a 128-bit encrypted PDF
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Get all text from the PDF
string text = pdf.ExtractAllText();

// Extract all images from the PDF
var allImages = pdf.ExtractAllImages();

// Iterate over each page to extract text and images
for (var index = 0; index < pdf.PageCount; index++) {
    int pageNumber = index + 1;
    text = pdf.ExtractTextFromPage(index);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(index);
    // Perform actions with text and images...
}
// Import necessary namespaces
using IronPdf; // For PDF functionalities
using IronSoftware.Drawing; // For handling images
using System.Collections.Generic; // For using the List

// Example of extracting text and images from PDF using IronPDF

// Open a 128-bit encrypted PDF
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Get all text from the PDF
string text = pdf.ExtractAllText();

// Extract all images from the PDF
var allImages = pdf.ExtractAllImages();

// Iterate over each page to extract text and images
for (var index = 0; index < pdf.PageCount; index++) {
    int pageNumber = index + 1;
    text = pdf.ExtractTextFromPage(index);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(index);
    // Perform actions with text and images...
}
' Import necessary namespaces
Imports IronPdf ' For PDF functionalities
Imports IronSoftware.Drawing ' For handling images
Imports System.Collections.Generic ' For using the List

' Example of extracting text and images from PDF using IronPDF

' Open a 128-bit encrypted PDF
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Get all text from the PDF
Private text As String = pdf.ExtractAllText()

' Extract all images from the PDF
Private allImages = pdf.ExtractAllImages()

' Iterate over each page to extract text and images
For index = 0 To pdf.PageCount - 1
	Dim pageNumber As Integer = index + 1
	text = pdf.ExtractTextFromPage(index)
	Dim images As List(Of AnyBitmap) = pdf.ExtractBitmapsFromPage(index)
	' Perform actions with text and images...
Next index
$vbLabelText   $csharpLabel

Pour plus d'informations détaillées sur la lecture de documents PDF, veuillez visiter le Guide de Lecture de PDF IronPDF C#.

Conclusion

Dans cet article, nous avons appris comment lire le contenu d'un document PDF en C++ en utilisant l'outil en ligne de commande Xpdf. En intégrant Xpdf dans un programme C++, nous pouvons extraire le contenu texte des fichiers PDF par programme en quelques secondes. Cette approche nous permet de traiter et d'analyser le texte extrait dans nos applications C++.

IronPDF est une bibliothèque C# puissante qui facilite la lecture et la manipulation des fichiers PDF. Ses nombreuses fonctionnalités, sa facilité d'utilisation, et son moteur de rendu fiable en font un choix populaire pour les développeurs travaillant avec des documents PDF dans leurs projets C#.

IronPDF est gratuit pour le développement et propose un essai gratuit pour une utilisation commerciale. Au-delà de cela, il doit être licencié à des fins commerciales.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite