Kostenlose C++ PDF-Bibliothek zum Lesen & Schreiben von PDF-Dateien
Eine einfache Open-Source C-basierte PDF-Bibliothek ermöglicht das Lesen, Schreiben und Manipulieren von PDF-Dokumenten. Sie unterstützt Bild-zu-PDF-Konvertierung, das Extrahieren von Inhalten, streambasiertes PDF-Lesen und mehr in C-Anwendungen.
Was ist die PDFio-Bibliothek?
PDFio ist eine leichte, Open-Source-C-Bibliothek, die speziell für das Lesen und Schreiben von PDF-Dateien entwickelt wurde, ohne die Komplexität von Rendering oder Anzeige. Erstellt von Michael R Sweet und lizenziert unter der Apache License Version 2.0, bietet diese Bibliothek Entwicklern einen unkomplizierten Ansatz zur PDF‑Manipulation, der sich auf die Erstellung, Extraktion und Transformation von Inhalten konzentriert, anstatt auf die visuelle Darstellung. Die Bibliothek ist sehr einfach zu handhaben und bietet mehrere Möglichkeiten zur Verarbeitung von PDF-Dateien, wie das Extrahieren und Zusammenführen von PDF‑Seiten, automatisierte Berichte aus Datenbanken, Wasserzeichen und Stempel, Erstellung von Zertifikaten und Diplomen, Schriftart‑Einbettung für die Archivierung, Metadaten‑Änderungen und vieles mehr.
PDFio konzentriert sich auf die wesentlichen I/O‑Operationen und ist damit perfekt für Anwendungen, die Daten aus PDFs extrahieren oder neue PDFs erstellen müssen, ohne den Overhead komplexerer Bibliotheken. Die Bibliothek unterstützt leistungsstarke Konvertierungsfunktionen und ermöglicht Entwicklern, Markdown in PDF, Bilder in PDF, HTML in PDF zu konvertieren sowie Barcode‑Generierung in PDFs innerhalb von C‑Anwendungen. Der Fokus auf Kernfunktionalität ohne Rendering‑Overhead macht sie ideal für serverseitige Anwendungen, Kommandozeilen‑Tools und eingebettete Systeme, bei denen die PDF‑Erstellung oder -Verarbeitung ohne visuelle Anzeige erforderlich ist. Ob Sie Dokumenten‑Management‑Systeme bauen, automatisierte Berichtsgeneratoren erstellen oder Werkzeuge zur PDF‑Analyse entwickeln, PDFio bietet die notwendige Funktionalität für den professionellen PDF‑Umgang in C‑Anwendungen.
Erste Schritte mit PDFio
Der empfohlene Weg, PDFio zu installieren, ist die Verwendung von NuGet. Bitte verwenden Sie den folgenden Befehl für eine reibungslose Installation.
PDFio über NuGet installieren
Install-Package pdfio_native PDFio über GitHub installieren
git clone https://github.com/michaelrsweet/pdfio.git
Sie können es auch manuell installieren; laden Sie die neuesten Release-Dateien direkt vom GitHub-Repository herunter.
Erstellen eines PDFs von Grund auf mit C
Die Open-Source-PDFio-Bibliothek bietet vollständige Unterstützung für das Erstellen
Wie konvertiert man ein einzelnes Bild in ein PDF über eine C-Bibliothek?
#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;
}
PDF lesen & Text extrahieren mit C-Bibliothek
Eine der häufigsten Aufgaben ist das Lesen und Extrahieren von Text aus einer PDF-Datei. Die Open-Source-Bibliothek PDFio macht diesen Prozess intuitiv, indem sie Entwicklern ermöglicht, durch Seiten und deren Inhalts-Streams zu iterieren. Die Bibliothek bietet vollständige Unterstützung zum Extrahieren nützlicher Informationen aus bestehenden PDFs, wie einfachen Text, Metadaten, eingebettete Schriftarten, Zahlen, Bilder, Trauben, Namen und mehr. Das folgende Beispiel zeigt, wie man ein vorhandenes PDF öffnet und grundlegende Informationen daraus mit der C-Bibliothek extrahiert.
Wie extrahiert man einfachen Text aus einer PDF-Datei über eine C-Bibliothek?
#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;
}
Effizientes, streambasiertes Lesen
PDFio ist auf Effizienz ausgelegt. Beim Lesen lädt es nicht die gesamte Datei auf einmal in den Speicher. Stattdessen verwendet es einen Pull-Parsing-Ansatz, der es ermöglicht, die Datei in Teilen zu verarbeiten. Das ist entscheidend für den Umgang mit sehr großen PDFs, ohne den Systemspeicher zu erschöpfen. Die Funktion pdfioPageParseContents aus dem ersten Beispiel ist ein Paradebeispiel für dieses streambasierte Modell. Sie liest den Inhalts-Stream der Seite sequenziell und gibt dabei Ereignisse (wie unseren Text-Callback) aus.