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

Bezmaksas C++ PDF bibliotēka PDF failu lasīšanai un rakstīšanai

Vienkārša atvērtā koda C-bāzēta PDF bibliotēka ļauj lasīt, rakstīt un manipulēt PDF dokumentus. Tā atbalsta attēlu pārvēršanu uz PDF, satura izguvi, plūsmas balstītu PDF lasīšanu un vairāk, C lietojumprogrammās.

Kas ir PDFio bibliotēka?

PDFio ir viegla, atvērtā koda C bibliotēka, kas ir īpaši izstrādāta PDF failu lasīšanai un rakstīšanai, neiekļaujot renderēšanas vai skatīšanas sarežģītību. To izveidoja Michael R Sweet, un tā ir licencēta saskaņā ar Apache License 2.0 versiju. Šī bibliotēka nodrošina izstrādātājiem vienkāršu pieeju PDF manipulācijām, kas koncentrējas uz satura izveidi, izvilkšanu un pārveidošanu, nevis uz vizuālo prezentāciju. Bibliotēka ir ļoti viegli lietojama un piedāvā vairākas iespējas PDF failu apstrādei, piemēram, PDF lapu izvilkšanu un apvienošanu, automatizētus pārskatus no datubāzēm, ūdenszīmju un zīmogu pievienošanu, sertifikātu un diplomu izveidi, fontu iegulšanu arhivēšanai, metadatu modificēšanu un daudz ko citu.

PDFio koncentrējas uz būtiskajām I/O operācijām, padarot to par ideālu lietojumprogrammām, kas jāizgūst dati no PDF vai jāizveido jauni, bez sarežģītāku bibliotēku pārslodzes. Bibliotēka atbalsta jaudīgas konvertēšanas funkcijas un ļauj programmatūras izstrādātājiem konvertēt markdown uz PDF, attēlu uz PDF, HTML uz PDF, kā arī ģenerēt svītrkodus PDF failos C lietojumprogrammās. Tā koncentrēšanās uz kodola funkcionalitāti, neiekļaujot renderēšanas pārslodzi, padara to par ideālu servera puses lietojumprogrammām, komandrindas rīkiem un iegultām sistēmām, kur nepieciešama PDF izveide vai apstrāde bez vizuāla attēlojuma. Neatkarīgi no tā, vai veidojat dokumentu pārvaldības sistēmas, izveidojat automatizētus pārskatu ģeneratorus vai izstrādājat rīkus PDF analīzei, PDFio piedāvā būtisko funkcionalitāti profesionālai PDF apstrādei C lietojumprogrammās.

Previous Next

Kā sākt darbu ar PDFio

Ieteicamais veids, kā instalēt PDFio, ir izmantot NuGet. Lūdzu, izmantojiet šādu komandu, lai veiktu vienkāršu instalēšanu.

Instalēt PDFio, izmantojot NuGet

Install-Package pdfio_native 

Instalēt PDFio, izmantojot GitHub

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

Jūs varat arī instalēt to manuāli; lejupielādēt jaunākos izlaiduma failus tieši no GitHub krātuves.

PDF izveide no nulles, izmantojot C

Atvērtā koda PDFio bibliotēka ir iekļāvusi pilnīgu atbalstu jaunu PDF dokumentu izveidei no nulles C lietojumprogrammās. Jauna PDF dokumenta izveide ir tikpat vienkārša, un ar tikai pāris C koda rindām programmatūras izstrādātāji var pievienot jaunas lapas, zīmēt tekstu un vienkāršas figūras, pievienot attēlus (JPEG, PNG formāti), piemērot krāsas un transformācijas, veidot tabulas un strukturētus izkārtojumus un daudz ko citu. Šeit ir vienkāršs piemērs, kas parāda, kā izveidot jaunu PDF dokumentu ar pielāgotu lapas izmēru un saturu, izmantojot C kodu.

Kā izveidot vienkāršu PDF dokumentu ar pielāgotu lapas izmēru & saturu, izmantojot C bibliotēku?

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

Attēlu konvertēšana uz PDF, izmantojot C bibliotēku

Attēlu konvertēšana uz PDF formātu ir viens no visbiežākajiem dokumentu apstrādes uzdevumiem. PDFio bibliotēka to padara vienkāršu, vienlaikus nodrošinot precīzu kontroli pār lapas izmēriem, attēlu novietojumu, mērogošanu un metadatiem. Programmatūras izstrādātāji var izveidot pilnīgu attēlu uz PDF pārveidotāju, kas apstrādā gan atsevišķus attēlus, gan grupas pārveidošanu. Zemāk esošais piemērs parāda, kā izstrādātāji var konvertēt vienu attēlu uz PDF C lietojumprogrammās.

Kā pārveidot vienu attēlu PDF formātā, izmantojot C bibliotēku?

#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 lasīšana un teksta izguve, izmantojot C bibliotēku

Viens no visbiežākajiem uzdevumiem ir PDF faila lasīšana un teksta izguve. Atvērtā koda PDFio bibliotēka padara šo procesu intuitīvu, ļaujot izstrādātājiem iterēt caur lapām un to satura straumēm. Bibliotēka nodrošina pilnu atbalstu noderīgas informācijas izguvei no esošajiem PDF, piemēram, vienkārša teksta, metadatu, iegultu fontu, skaitļu, attēlu, vīnogu, vārdu un citu. Zemāk esošais piemērs parāda, kā atvērt esošu PDF un izgūt no tā pamata informāciju, izmantojot C bibliotēku.

Kā izvilkt vienkāršu tekstu no PDF faila, izmantojot C bibliotēku?

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

Efektīva, plūsmas balstīta lasīšana

PDFio ir izstrādāts efektivitātei. Lasot, tas neielādē visu failu atmiņā vienlaicīgi. Tā vietā tas izmanto pull‑parsēšanas pieeju, ļaujot apstrādāt failu gabalos. Tas ir būtiski, lai apstrādātu ļoti lielus PDF, neiztukšojot sistēmas atmiņu. Funkcija pdfioPageParseContents no pirmā piemēra ir izcils šī straumes balstītā modeļa piemērs. Tā secīgi lasa lapas satura straumi, izstarojot notikumus (piemēram, mūsu teksta atzvanīšanas funkciju) procesā.

 Latviski