1. Produktai
  2.   PDF
  3.   C++
  4.   PDFio
 
  

Nemokama C++ PDF biblioteka PDF failų skaitymui ir rašymui

Paprasta atviro kodo C pagrindu sukurta PDF biblioteka leidžia skaityti, rašyti ir manipuliuoti PDF dokumentais. Ji palaiko paveikslėlių konvertavimą į PDF, turinio išskyrimą, srautinį PDF skaitymą ir daugiau C programose.

Kas yra PDFio biblioteka?

PDFio yra lengva, atviro kodo C biblioteka, sukurta specialiai PDF failų skaitymui ir rašymui be sudėtingų vaizdavimo ar peržiūros funkcijų. Sukūrė Michael R. Sweet ir licencijuota pagal Apache licenciją 2.0 versiją, ši biblioteka suteikia kūrėjams paprastą požiūrį į PDF manipuliavimą, sutelkiant dėmesį į turinio kūrimą, išgavimą ir transformavimą, o ne į vizualinę prezentaciją. Biblioteka yra labai lengvai naudojama ir siūlo kelis būdus PDF failų apdorojimui, tokius kaip PDF puslapių išgavimas ir sujungimas, automatizuotos ataskaitos iš duomenų bazių, vandens ženklų ir antspaudų pridėjimas, sertifikatų ir diplomų kūrimas, šriftų įterpimas archyvavimui, metaduomenų keitimas ir daugelį kitų.

PDFio sutelktas į esmines I/O operacijas, todėl jis puikiai tinka programoms, kurioms reikia išgauti duomenis iš PDF arba kurti naujus, be sudėtingesnių bibliotekų našumo išlaidų. Biblioteka palaiko galingas konvertavimo funkcijas ir leidžia programinės įrangos kūrėjams konvertuoti markdown į PDF, paveikslėlį į PDF, HTML į PDF, taip pat generuoti brūkšninius kodus PDF dokumentuose C programose. Jos dėmesys pagrindinei funkcionalumui, be renderavimo našumo išlaidų, daro ją idealią serverio pusės programoms, komandų eilutės įrankiams ir įterptinėms sistemoms, kuriose reikia PDF kūrimo ar apdorojimo be vizualinio rodymo. Nesvarbu, ar kuriate dokumentų valdymo sistemas, automatizuotus ataskaitų generatorius, ar kuriate įrankius PDF analizės srityje, PDFio suteikia būtinas funkcijas profesionaliam PDF tvarkymui C programose.

Previous Next

Pradžia su PDFio

Rekomenduojamas būdas įdiegti PDFio yra naudoti NuGet. Prašome naudoti šią komandą sklandžiam įdiegimui.

Įdiekite PDFio per NuGet

Install-Package pdfio_native 

Įdiekite PDFio per GitHub

 git clone  https://github.com/michaelrsweet/pdfio.git

Taip pat galite įdiegti rankiniu būdu; atsisiųskite naujausius leidimo failus tiesiai iš GitHub saugyklos.

PDF kūrimas nuo pradžių naudojant C

Atviro kodo PDFio biblioteka įtraukė visapusišką palaikymą kuriant naują PDF dokumentą nuo nulio C programose. Naujo PDF dokumento kūrimas yra taip pat paprastas, ir tik kelios C kodo eilutės leidžia programų kūrėjams pridėti naujus puslapius, braižyti tekstą ir paprastus figūras, pridėti vaizdus (JPEG, PNG formatai), taikyti spalvas ir transformacijas, kurti lenteles ir struktūruotus išdėstymus bei daug daugiau.

Kaip konvertuoti vieną paveikslėlį į PDF naudojant C biblioteką?

#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 skaitymas ir teksto išgavimas naudojant C biblioteką

Vienas iš dažniausiai pasitaikančių uždavinių yra PDF failo skaitymas ir teksto išgavimas. Atviro kodo PDFio biblioteka šį procesą padaro intuityviu, leidžiančiu kūrėjams pereiti per puslapius ir jų turinio srautus. Biblioteka suteikia visapusišką palaikymą išgauti naudingą informaciją iš esamų PDF, pvz., paprastą tekstą, metaduomenis, įterptus šriftus, skaičius, paveikslus, vynuoges, vardus ir kt. Žemiau pateiktas pavyzdys demonstruoja, kaip atverti esamą PDF ir išgauti pagrindinę informaciją iš jo naudojant C biblioteką.

Kaip išgauti paprastą tekstą iš PDF failo naudojant C biblioteką?

#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;
}

Efektyvus, srauto pagrindu veikiantis skaitymas

PDFio sukurta efektyvumui. Skaitant, ji neįkelia viso failo į atmintį vienu metu. Vietoj to, ji naudoja traukimo (pull) analizės metodą, leidžiantį apdoroti failą dalimis. Tai yra esminė savybė, leidžianti tvarkyti labai didelius PDF failus neišnaudojant sistemos atminties. Funkcija pdfioPageParseContents iš pirmojo pavyzdžio yra puikus šio srauto pagrindo modelio pavyzdys. Ji skaito puslapio turinio srautą nuosekliai, išskirdama įvykius (pvz., mūsų teksto atgalinį kvietimą) proceso metu.

 Lietuvių