Bibliothèque PDF C++ gratuite pour la lecture et l'écriture de fichiers PDF
Une bibliothèque PDF simple, open source et basée sur le C permet de lire, écrire et manipuler des documents PDF. Elle prend en charge la conversion d'image en PDF, l'extraction de contenu, la lecture de PDF en flux et plus encore, dans les applications C.
Qu'est-ce que la bibliothèque PDFio ?
PDFio est une bibliothèque C légère et open‑source conçue spécifiquement pour lire et écrire des fichiers PDF sans la complexité du rendu ou de la visualisation. Créée par Michael R Sweet et sous licence Apache License Version 2.0, cette bibliothèque offre aux développeurs une approche simple de la manipulation de PDF qui se concentre sur la création, l'extraction et la transformation de contenu plutôt que sur la présentation visuelle. La bibliothèque est très facile à prendre en main et propose plusieurs méthodes pour manipuler les fichiers PDF, telles que l'extraction et la fusion de pages PDF, la génération de rapports automatisés à partir de bases de données, le filigrane et le tamponnage, la création de certificats et de diplômes, l'intégration de polices pour l'archivage, la modification des métadonnées et bien plus encore.
PDFio se concentre sur les opérations d'E/S essentielles, ce qui le rend parfait pour les applications qui doivent extraire des données de PDF ou en créer de nouveaux sans la surcharge des bibliothèques plus complexes. La bibliothèque prend en charge des fonctionnalités de conversion puissantes et permet aux développeurs de convertir du markdown en PDF, des images en PDF, du HTML en PDF ainsi que la génération de codes-barres dans les PDF au sein d'applications C. Son accent sur la fonctionnalité de base sans la surcharge du rendu le rend idéal pour les applications côté serveur, les outils en ligne de commande et les systèmes embarqués où la création ou le traitement de PDF est nécessaire sans affichage visuel. Que vous construisiez des systèmes de gestion de documents, créiez des générateurs de rapports automatisés ou développiez des outils d'analyse de PDF, PDFio offre la fonctionnalité essentielle requise pour la manipulation professionnelle de PDF dans les applications C.
Premiers pas avec PDFio
La méthode recommandée pour installer PDFio est d'utiliser NuGet. Veuillez utiliser la commande suivante pour une installation fluide.
Installer PDFio via NuGet
Install-Package pdfio_native Installer PDFio via GitHub
git clone https://github.com/michaelrsweet/pdfio.git
Vous pouvez également l'installer manuellement ; téléchargez les derniers fichiers de version directement depuis le dépôt GitHub.
Créer un PDF à partir de zéro via C
La bibliothèque open source PDFio inclut une prise en charge complète de la création de nouveaux documents PDF à partir de zéro dans les applications C. Créer un nouveau document PDF est tout aussi simple et, avec seulement quelques lignes de code C, les développeurs peuvent ajouter de nouvelles pages, dessiner du texte et des formes simples, ajouter des images (formats JPEG, PNG), appliquer des couleurs et des transformations, créer des tableaux et des mises en page structurées, et bien plus encore. Voici un exemple simple qui montre comment créer un nouveau document PDF avec une taille de page personnalisée et du contenu en utilisant du code C.
Comment créer un document PDF simple avec une taille de page personnalisée et du contenu via la bibliothèque C ?
#include
#include
int main(void) {
pdfio_file_t *pdf;
pdfio_dict_t *dict;
pdfio_stream_t *page;
pdfio_obj_t *font;
pdfio_rect_t media_box = {0.0, 0.0, 612.0, 792.0}; // US Letter
pdfio_rect_t crop_box = {36.0, 36.0, 576.0, 756.0}; // 0.5" margins
// Create PDF file
pdf = pdfioFileCreate("output.pdf", "2.0",
&media_box, &crop_box,
NULL, NULL);
if (!pdf) {
fprintf(stderr, "Unable to create PDF\n");
return 1;
}
// Create a font object (Helvetica)
font = pdfioFileCreateFontObjFromBase(pdf, "Helvetica");
// Create page dictionary
dict = pdfioDictCreate(pdf);
pdfioPageDictAddFont(dict, "F1", font);
// Create the page
page = pdfioFileCreatePage(pdf, dict);
// Draw text
pdfioContentSetFillColorDeviceGray(page, 0.0); // Black color
pdfioContentTextBegin(page);
pdfioContentSetTextFont(page, "F1", 24.0);
pdfioContentTextMoveTo(page, 100.0, 700.0);
pdfioContentTextShow(page, false, "Hello, PDFio!");
pdfioContentTextEnd(page);
// Close page and file
pdfioStreamClose(page);
pdfioFileClose(pdf);
printf("PDF created successfully!\n");
return 0;
}
Conversion d'image en PDF via la bibliothèque C
La conversion d'images au format PDF est l'une des tâches de traitement de documents les plus courantes. La bibliothèque PDFio rend cela simple tout en offrant un contrôle précis sur la taille des pages, le placement des images, le redimensionnement et les métadonnées. Les développeurs peuvent créer un convertisseur complet d'image en PDF qui gère à la fois les images uniques et les conversions par lots. L'exemple suivant montre comment les développeurs peuvent convertir une image en PDF dans des applications C.
Comment convertir une image unique en PDF via une bibliothèque C ?
#include
#include
#include
bool create_pdf_from_image(const char *image_path,
const char *pdf_path,
const char *title) {
pdfio_file_t *pdf;
pdfio_obj_t *image;
pdfio_dict_t *page_dict;
pdfio_stream_t *page_stream;
pdfio_rect_t media_box;
double img_width, img_height;
double page_width, page_height;
double scale_x, scale_y, scale;
double x, y;
// Create the image object first to get dimensions
// We'll use a temporary PDF for this
pdfio_rect_t temp_box = {0, 0, 612, 792};
pdf = pdfioFileCreate(pdf_path, "2.0", &temp_box, NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Error: Cannot create PDF file\n");
return false;
}
// Set PDF metadata
if (title) {
pdfioFileSetTitle(pdf, title);
}
pdfioFileSetAuthor(pdf, "PDFio Image Converter");
pdfioFileSetCreator(pdf, "image2pdf v1.0");
// Load and embed the image
image = pdfioFileCreateImageObjFromFile(pdf, image_path, true);
if (!image) {
fprintf(stderr, "Error: Cannot load image file: %s\n", image_path);
pdfioFileClose(pdf);
return false;
}
// Get image dimensions in pixels
img_width = pdfioImageGetWidth(image);
img_height = pdfioImageGetHeight(image);
printf("Image dimensions: %.0f x %.0f pixels\n", img_width, img_height);
// Create page sized to image (assuming 72 DPI)
// This creates a PDF page that exactly fits the image
page_width = img_width;
page_height = img_height;
media_box.x1 = 0.0;
media_box.y1 = 0.0;
media_box.x2 = page_width;
media_box.y2 = page_height;
// Create page dictionary and add image resource
page_dict = pdfioDictCreate(pdf);
pdfioDictSetRect(page_dict, "MediaBox", &media_box);
pdfioPageDictAddImage(page_dict, "IM1", image);
// Create the page
page_stream = pdfioFileCreatePage(pdf, page_dict);
// Draw image at full size (no scaling)
pdfioContentDrawImage(page_stream, "IM1", 0, 0,
page_width, page_height);
// Close and save
pdfioStreamClose(page_stream);
pdfioFileClose(pdf);
printf("Successfully created PDF: %s\n", pdf_path);
return true;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s [title]\n",
argv[0]);
return 1;
}
const char *title = (argc > 3) ? argv[3] : NULL;
if (!create_pdf_from_image(argv[1], argv[2], title)) {
return 1;
}
return 0;
}
Lire le PDF & extraire le texte via la bibliothèque C
L'une des tâches les plus courantes consiste à lire et extraire du texte d'un fichier PDF. La bibliothèque open source PDFio rend ce processus intuitif en permettant aux développeurs d'itérer à travers les pages et leurs flux de contenu. La bibliothèque offre un support complet pour extraire des informations utiles des PDF existants, telles que du texte simple, des métadonnées, des polices intégrées, des nombres, des images, des raisins, des noms et plus encore. L'exemple suivant montre comment ouvrir un PDF existant et extraire des informations de base à partir de celui-ci en utilisant la bibliothèque C.
Comment extraire du texte simple d'un fichier PDF via une bibliothèque C ?
#include
#include
#include
// Callback function to handle text objects
static bool text_cb(const pdfio_text_t *text, void *data) {
// Simply print the text to stdout
printf("%s", text->utf8);
return true;
}
int main(void) {
pdfio_file_t *pdf;
pdfio_page_t *page;
// Open the PDF file for reading
pdf = pdfioFileOpen("example.pdf", NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Failed to open example.pdf\n");
return 1;
}
printf("PDF has %d pages.\n", pdfioFileGetNumPages(pdf));
// Read the first page (pages are 1-indexed)
page = pdfioFileGetPage(pdf, 1);
if (!page) {
fprintf(stderr, "Failed to read page 1\n");
pdfioFileClose(pdf);
return 1;
}
// Parse the page content and call our text_cb for each text object
if (!pdfioPageParseContents(page, text_cb, NULL, NULL, NULL)) {
fprintf(stderr, "Failed to parse page contents\n");
}
// Clean up
pdfioFileClose(pdf);
return 0;
}
Lecture efficace, basée sur les flux
PDFio est conçu pour l'efficacité. Lors de la lecture, il ne charge pas l'intégralité du fichier en mémoire d'un coup. Au lieu de cela, il utilise une approche de parsing par tirage, vous permettant de traiter le fichier par morceaux. Ceci est crucial pour gérer des PDF très volumineux sans épuiser la mémoire du système. La fonction pdfioPageParseContents du premier exemple est un exemple phare de ce modèle basé sur les flux. Elle lit le flux de contenu de la page séquentiellement, émettant des événements (comme notre rappel de texte) au fur et à mesure.