Gratis C++ PDF-bibliotek til læsning og skrivning af PDF-filer
Et simpelt open source C-baseret PDF-bibliotek gør det muligt at læse, skrive og manipulere PDF-dokumenter. Det understøtter konvertering af billede til PDF, udtrækning af indhold, stream-baseret PDF-læsning og mere i C-apps.
Hvad er PDFio-biblioteket?
PDFio er et letvægts, open-source C-bibliotek, der er designet specifikt til at læse og skrive PDF-filer uden kompleksiteten ved rendering eller visning. Skabt af Michael R Sweet og licenseret under Apache License Version 2.0, giver dette bibliotek udviklere en ligetil tilgang til PDF-manipulation, som fokuserer på indholdsoprettelse, udtræk og transformation snarere end visuel præsentation. Biblioteket er meget nemt at håndtere og tilbyder flere måder at manipulere PDF-filer på, såsom udtræk og sammenlægning af PDF-sider, automatiserede rapporter fra databaser, vandmærkning og stempling, oprettelse af certifikater og diplomer, indlejring af skrifttyper til arkivering, ændring af metadata og meget mere.
PDFio fokuserer på de væsentlige I/O‑operationer, hvilket gør det perfekt til applikationer, der skal udtrække data fra PDF‑filer eller oprette nye uden den ekstra byrde fra mere komplekse biblioteker. Biblioteket understøtter kraftfulde konverteringsfunktioner og gør det muligt for softwareudviklere at konvertere markdown til PDF, billede til PDF, HTML til PDF samt generere stregkoder i PDF‑filer i C‑applikationer. Dets fokus på kernefunktionalitet uden renderingsoverhead gør det ideelt til server‑side‑applikationer, kommandolinjeværktøjer og indlejrede systemer, hvor PDF‑oprettelse eller -behandling er nødvendig uden visuel fremvisning. Uanset om du bygger dokumenthåndteringssystemer, laver automatiske rapportgeneratorer eller udvikler værktøjer til PDF‑analyse, tilbyder PDFio den nødvendige funktionalitet til professionel PDF‑håndtering i C‑applikationer.
Kom i gang med PDFio
Den anbefalede måde at installere PDFio på er via NuGet. Brug venligst følgende kommando for en problemfri installation.
Installer PDFio via NuGet
Install-Package pdfio_native Installer PDFio via GitHub
git clone https://github.com/michaelrsweet/pdfio.git
Du kan også installere det manuelt; download de seneste udgivelsesfiler direkte fra GitHub-arkivet.
Opret en PDF fra bunden via C
Det open source PDFio-bibliotek har inkluderet fuld support til at oprette nye PDF-dokumenter fra bunden i C-applikationer. At oprette et nyt PDF-dokument er lige så enkelt, og med kun et par linjer C-kode kan softwareudviklere tilføje nye sider, tegne tekst og simple former, tilføje billeder (JPEG, PNG-formater), anvende farver og transformationer, bygge tabeller og strukturerede layout og meget mere. Her er et enkelt eksempel, der demonstrerer, hvordan man opretter et nyt PDF-dokument med brugerdefineret sidestørrelse og indhold ved hjælp af C-kode.
Hvordan opretter man et enkelt PDF-dokument med brugerdefineret sidestørrelse & indhold via C-biblioteket?
#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;
}
Billed-til-PDF-konvertering via C-biblioteket
Konvertering af billeder til PDF-format er en af de mest almindelige dokumentbehandlingsopgaver. PDFio-biblioteket gør dette enkelt, samtidig med at det giver fin kontrol over sidestørrelse, billedplacering, skalering og metadata. Softwareudviklere kan bygge en komplet billed-til-PDF-konverter, der håndterer både enkelte billeder og batch-konverteringer. Det følgende eksempel demonstrerer, hvordan udviklere kan konvertere et billede til en PDF i C-applikationer.
Hvordan konverterer man et enkelt billede til en PDF via C-biblioteket?
#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;
}
Læs PDF og udtræk tekst via C-bibliotek
En af de mest almindelige opgaver er at læse og udtrække tekst fra en PDF-fil. Det open source PDFio-bibliotek gør denne proces intuitiv ved at tillade udviklere at iterere gennem sider og deres indholdsstrømme. Biblioteket giver fuld support til at udtrække nyttige oplysninger fra eksisterende PDF'er, såsom simpel tekst, metadata, indlejrede skrifttyper, tal, billeder, druer, navne og mere. Det følgende eksempel demonstrerer, hvordan man åbner en eksisterende PDF og udtrækker grundlæggende information fra den ved hjælp af C-biblioteket.
Hvordan udtrækker man simpel tekst fra en PDF-fil via C-biblioteket?
#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;
}
Effektiv, strøm-baseret læsning
PDFio er designet til effektivitet. Når den læser, indlæser den ikke hele filen i hukommelsen på én gang. I stedet bruger den en pull‑parsing‑tilgang, som gør det muligt at behandle filen i bidder. Dette er afgørende for at håndtere meget store PDF'er uden at udtømme systemets hukommelse. pdfioPageParseContents-funktionen fra det første eksempel er et fremragende eksempel på denne stream‑baserede model. Den læser sidens indholdsstrøm sekventielt og udsender hændelser (som vores tekst‑callback) undervejs.