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

Bibliotecă gratuită C++ PDF pentru citirea și scrierea fișierelor PDF

O bibliotecă PDF simplă, open source, bazată pe C, permite citirea, scrierea și manipularea documentelor PDF. Suportă conversia de imagini în PDF, extragerea conținutului, citirea PDF pe bază de flux și altele, în aplicații C.

Ce este biblioteca PDFio?

PDFio este o bibliotecă C ușoară, open-source, concepută special pentru citirea și scrierea fișierelor PDF fără complexitatea redării sau vizualizării. Creată de Michael R Sweet și licențiată sub Apache License versiunea 2.0, această bibliotecă oferă dezvoltatorilor o abordare simplă a manipulării PDF-urilor, concentrându-se pe crearea, extragerea și transformarea conținutului, mai degrabă decât pe prezentarea vizuală. Biblioteca este foarte ușor de utilizat și oferă mai multe modalități de manipulare a fișierelor PDF, cum ar fi extragerea și îmbinarea paginilor PDF, rapoarte automate din baze de date, adăugarea de filigrane și ștampilare, crearea de certificate și diplome, încorporarea de fonturi pentru arhivare, modificarea metadatelor și multe altele.

PDFio se concentrează pe operațiunile esențiale de I/O, făcându-l perfect pentru aplicații care trebuie să extragă date din PDF-uri sau să creeze altele noi fără povara bibliotecilor mai complexe. Biblioteca suportă funcții puternice de conversie și permite dezvoltatorilor de software să convertească markdown în PDF, imagine în PDF, HTML în PDF, precum și generarea de coduri de bare în PDF-uri în cadrul aplicațiilor C. Accentul său pe funcționalitatea de bază, fără povara redării, îl face ideal pentru aplicații server-side, instrumente de linie de comandă și sisteme încorporate unde este necesară crearea sau procesarea PDF-urilor fără afișare vizuală. Indiferent dacă construiți sisteme de gestionare a documentelor, creați generatoare automate de rapoarte sau dezvoltați instrumente pentru analiza PDF, PDFio oferă funcționalitatea esențială necesară pentru manipularea profesională a PDF-urilor în aplicații C.

Previous Next

Începerea utilizării PDFio

Calea recomandată pentru instalarea PDFio este utilizarea NuGet. Vă rugăm să folosiți comanda următoare pentru o instalare fără probleme.

Instalați PDFio prin NuGet

Install-Package pdfio_native 

Instalați PDFio prin GitHub

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

Poți, de asemenea, să îl instalezi manual; descarcă fișierele ultimei versiuni direct de pe depozitul GitHub.

Crearea unui PDF de la zero prin C

Biblioteca open source PDFio a inclus suport complet pentru crearea de documente PDF noi de la zero în aplicații C. Crearea unui document PDF nou este la fel de simplă și, cu doar câteva linii de cod C, dezvoltatorii de software pot adăuga pagini noi, desena text și forme simple, adăuga imagini (formate JPEG, PNG), aplica culori și transformări, construi tabele și aranjamente structurate și multe altele. Iată un exemplu simplu care demonstrează cum să creați un document PDF nou cu dimensiune de pagină personalizată și conținut utilizând cod C.

Cum să creați un document PDF simplu cu dimensiune de pagină personalizată și conținut prin biblioteca 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;
}

Conversie de imagini în PDF prin biblioteca C

Conversia imaginilor în format PDF este una dintre cele mai comune sarcini de procesare a documentelor. Biblioteca PDFio face acest lucru simplu, oferind un control fin asupra dimensiunii paginii, plasării imaginii, scalării și metadatelor. Dezvoltatorii de software pot construi un convertor complet de imagini în PDF care gestionează atât imagini individuale, cât și conversii în lot. Exemplul următor demonstrează cum dezvoltatorii pot converti o imagine într-un PDF în cadrul aplicațiilor C.

Cum să convertești o singură imagine într-un PDF prin bibliotecă 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;
}
 

Citirea PDF-ului și extragerea textului prin biblioteca C

Una dintre cele mai comune sarcini este citirea și extragerea textului dintr-un fișier PDF. Biblioteca open source PDFio face acest proces intuitiv, permițând dezvoltatorilor să parcurgă paginile și fluxurile lor de conținut. Biblioteca oferă suport complet pentru extragerea informațiilor utile din PDF-urile existente, cum ar fi text simplu, metadate, fonturi încorporate, numere, imagini, struguri, nume și altele. Exemplul următor demonstrează cum să deschizi un PDF existent și să extragi informații de bază din el utilizând biblioteca C.

Cum să extragi text simplu dintr-un fișier PDF prin bibliotecă 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;
}

Citire eficientă, bazată pe flux

PDFio este conceput pentru eficiență. La citire, nu încarcă întregul fișier în memorie simultan. În schimb, folosește o abordare de tip pull-parsing, permițându-ți să procesezi fișierul în bucăți. Acest lucru este crucial pentru gestionarea PDF-urilor foarte mari fără a epuiza memoria sistemului. Funcția pdfioPageParseContents din primul exemplu este un exemplu perfect al acestui model bazat pe fluxuri. Ea citește fluxul de conținut al paginii în mod secvențial, emite evenimente (cum ar fi callback-ul nostru de text) pe parcurs.

 Română