Jak czytać pliki PDF w C++
Pliki PDF (Portable Document Format) są powszechnie używane do wymiany dokumentów, a możliwość programowego odczytu ich zawartości jest przydatna w różnych aplikacjach. Do odczytu plików PDF w języku C++ dostępne są następujące biblioteki: Poppler, MuPDF, bezpłatna biblioteka Haru, Xpdf oraz Qpdf.
W tym artykule omówimy, jak odczytywać pliki PDF w języku C++ przy użyciu narzędzia wiersza poleceń Xpdf. Xpdf oferuje szereg narzędzi do pracy z plikami PDF, w tym do wyodrębniania treści tekstowej. Dzięki zintegrowaniu biblioteki Xpdf z programem napisanym w języku C++ możemy wyodrębnić tekst z plików PDF i przetwarzać go programowo.
Xpdf — narzędzia wiersza poleceń
Xpdf to suite oprogramowania typu open source, która zawiera zbiór narzędzi i bibliotek do pracy z plikami PDF (Portable Document Format). Pakiet Xpdf zawiera kilka narzędzi wiersza poleceń oraz bibliotek C++, które umożliwiają korzystanie z różnych funkcji związanych z plikami PDF, takich jak parsowanie, renderowanie, wyodrębnianie tekstu i inne. Niektóre kluczowe komponenty Xpdf to pdfimages, pdftops, pdfinfo i pdftotext. W tym przypadku użyjemy pdftotext do odczytu dokumentów PDF.
pdftotext to narzędzie wiersza poleceń, które wyodrębnia treść tekstową z plików PDF i wyświetla ją jako zwykły tekst. Narzędzie to jest szczególnie przydatne, gdy trzeba wyodrębnić informacje tekstowe z plików PDF w celu dalszego przetwarzania lub analizy. Korzystając z opcji, można również określić, z której strony lub stron ma zostać wyodrębniony tekst.
Wymagania wstępne
Aby stworzyć projekt czytnika PDF do wyodrębniania tekstu, musimy spełnić następujące warunki wstępne:
- Kompilator C++, taki jak GCC lub Clang, zainstalowany w systemie. Możesz użyć dowolnego środowiska IDE obsługującego programowanie w języku C++.
- Narzędzia wiersza poleceń Xpdf zainstalowane w systemie. Xpdf to zbiór narzędzi do obsługi plików PDF, który można pobrać ze strony internetowej Xpdf. Pobierz go ze strony internetowej Xpdf. Ustaw katalog bin programu Xpdf w ścieżce zmiennych środowiskowych, aby uzyskać do niego dostęp z dowolnego miejsca za pomocą narzędzia wiersza poleceń.
Kroki odczytu pliku w formacie PDF w języku C++
Krok 1: Dodanie niezbędnych nagłówków
Najpierw dodajmy niezbędne pliki nagłówkowe na początku naszego pliku main.cpp:
#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
Krok 2: Pisanie kodu w języku C++
Napiszmy kod w języku C++, który wywołuje narzędzie wiersza poleceń Xpdf w celu wyodrębnienia treści tekstowej z dokumentu PDF. Wykorzystamy następujący plik input.pdf:

Przykładowy kod wygląda następująco:
#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
}
Wyjaśnienie kodu
W powyższym kodzie definiujemy zmienną pdfPath, aby przechowywać ścieżkę do pliku PDF wejściowego. Pamiętaj, aby zastąpić ją odpowiednią ścieżką do rzeczywistego dokumentu PDF wejściowego.
Definiujemy również zmienną outputFilePath, aby przechowywać ścieżkę do pliku tekstowego, który zostanie wygenerowany przez Xpdf.
Kod wykonuje polecenie pdftotext przy użyciu funkcji system, przekazując ścieżkę do pliku PDF wejściowego oraz ścieżkę do pliku tekstowego wyjściowego jako argumenty wiersza poleceń. Zmienna status przechwytuje status wyjścia polecenia.
Jeśli pdftotext zostanie pomyślnie wykonane (co wskazuje status 0), przechodzimy do otwarcia pliku tekstowego wyjściowego za pomocą ifstream. Następnie czytamy treść tekstu linia po linii i zapisujemy ją w ciągu znaków textContent.
Na koniec wyświetlamy wyodrębnioną treść tekstową w konsoli z wygenerowanego pliku wyjściowego. Jeśli nie potrzebujesz edytowalnego pliku tekstowego z wynikami lub chcesz zwolnić miejsce na dysku, na końcu programu po prostu usuń go za pomocą następującego polecenia przed zakończeniem funkcji głównej:
remove(outputFilePath.c_str());
remove(outputFilePath.c_str());
Krok 3: Kompilacja i uruchomienie programu
Skompiluj kod C++ i uruchom plik wykonywalny. Jeśli pdftotext zostanie dodane do ścieżki systemowej zmiennych środowiskowych, polecenie zostanie pomyślnie wykonane. Program generuje plik tekstowy na wyjściu i wyodrębnia treść tekstową z dokumentu PDF. Wyodrębniony tekst jest następnie wyświetlany w konsoli.
Wynik jest następujący

Odczytywanie plików PDF w języku C
Biblioteka IronPDF
IronPDF to popularna biblioteka C# do obsługi plików PDF, która zapewnia zaawansowane funkcje do pracy z dokumentami PDF. Umożliwia programistom tworzenie, edytowanie, modyfikowanie i odczytywanie plików PDF za pomocą kodu.
Odczytywanie dokumentów PDF przy użyciu biblioteki IronPDF jest prostym procesem. Biblioteka oferuje różne metody i właściwości, które umożliwiają programistom wyodrębnianie tekstu, obrazów, metadanych i innych danych ze stron PDF. Wyodrębnione informacje mogą być wykorzystywane do dalszego przetwarzania, analizy lub wyświetlania w aplikacji.
W poniższym przykładzie kodu wykorzystamy IronPDF do odczytu plików 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
Aby uzyskać bardziej szczegółowe informacje na temat odczytywania dokumentów PDF, odwiedź stronę IronPDF C# PDF Reading Guide.
Wnioski
W tym artykule dowiedzieliśmy się, jak odczytać zawartość dokumentu PDF w języku C++ przy użyciu narzędzia wiersza poleceń Xpdf. Dzięki integracji Xpdf z programem w języku C++ możemy w ciągu kilku sekund programowo wyodrębnić treść tekstową z plików PDF. Takie podejście pozwala nam przetwarzać i analizować wyodrębniony tekst w naszych aplikacjach napisanych w języku C++.
IronPDF to potężna biblioteka C#, która ułatwia odczytywanie i manipulowanie plikami PDF. Jego rozbudowane funkcje, łatwość obsługi i niezawodny silnik renderujący sprawiają, że jest to popularny wybór wśród programistów pracujących z dokumentami PDF w swoich projektach C#.
IronPDF jest bezpłatny do celów programistycznych i oferuje bezpłatną wersję próbną do użytku komercyjnego. Ponadto musi być objęty licencją na cele komercyjne.

