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

Libreria PDF C++ gratuita per la lettura e scrittura di file PDF

Una semplice libreria PDF open source basata su C consente di leggere, scrivere e manipolare documenti PDF. Supporta la conversione di immagini in PDF, l'estrazione di contenuti, la lettura di PDF basata su stream e molto altro, all'interno di applicazioni C.

Che cos'è la libreria PDFio?

PDFio è una libreria C leggera e open-source progettata specificamente per leggere e scrivere file PDF senza la complessità del rendering o della visualizzazione. Creata da Michael R Sweet e rilasciata sotto la Apache License Version 2.0, questa libreria offre agli sviluppatori un approccio diretto alla manipolazione dei PDF che si concentra sulla creazione, estrazione e trasformazione dei contenuti piuttosto che sulla presentazione visiva. La libreria è molto facile da gestire e fornisce diversi metodi per manipolare i file PDF, come l'estrazione e l'unione di pagine PDF, report automatizzati da database, filigrane e timbri, creazione di certificati e diplomi, incorporamento di font per l'archiviazione, modifica dei metadati e molto altro.

PDFio si concentra sulle operazioni I/O essenziali, rendendolo perfetto per le applicazioni che devono estrarre dati da PDF o crearne di nuovi senza l'overhead di librerie più complesse. La libreria supporta potenti funzionalità di conversione e consente agli sviluppatori di software di convertire markdown in PDF, immagine in PDF, HTML in PDF, nonché la generazione di codici a barre nei PDF all'interno di applicazioni C. Il suo focus sulla funzionalità di base senza l'overhead del rendering lo rende ideale per applicazioni server-side, strumenti da riga di comando e sistemi embedded dove è necessaria la creazione o l'elaborazione di PDF senza visualizzazione. Che tu stia costruendo sistemi di gestione documentale, creando generatori di report automatizzati o sviluppando strumenti per l'analisi dei PDF, PDFio offre la funzionalità essenziale necessaria per la gestione professionale dei PDF nelle applicazioni C.

Previous Next

Iniziare con PDFio

Il modo consigliato per installare PDFio è utilizzare NuGet. Si prega di usare il comando seguente per un'installazione senza problemi.

Installa PDFio tramite NuGet

Install-Package pdfio_native 

Installa PDFio tramite GitHub

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

Puoi anche installarlo manualmente; scarica i file dell'ultima versione direttamente dal repository GitHub.

Creare un PDF da zero tramite C

La libreria open source PDFio ha incluso il supporto completo per creare nuovi documenti PDF da zero all'interno di applicazioni C. Creare un nuovo documento PDF è altrettanto semplice e, con sole un paio di righe di codice C, gli sviluppatori software possono aggiungere nuove pagine, disegnare testo e forme semplici, aggiungere immagini (formati JPEG, PNG), applicare colori e trasformazioni, costruire tabelle e layout strutturati e molto altro. Ecco un semplice esempio che dimostra come creare un nuovo documento PDF con dimensioni di pagina personalizzate e contenuto usando codice C.

Come creare un semplice documento PDF con dimensioni di pagina personalizzate e contenuto tramite la libreria 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;
}

Conversione di immagini in PDF tramite libreria C

La conversione di immagini in formato PDF è una delle attività di elaborazione documenti più comuni. La libreria PDFio rende questo processo semplice fornendo un controllo preciso su dimensioni della pagina, posizionamento delle immagini, ridimensionamento e metadati. Gli sviluppatori software possono creare un convertitore completo da immagine a PDF che gestisce sia immagini singole sia conversioni batch. Il seguente esempio dimostra come gli sviluppatori possano convertire un'immagine in un PDF all'interno di applicazioni C.

Come convertire un'immagine singola in PDF tramite libreria 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;
}
 

Leggere PDF ed estrarre testo tramite libreria C

Una delle attività più comuni è leggere ed estrarre testo da un file PDF. La libreria open source PDFio rende questo processo intuitivo consentendo agli sviluppatori di iterare attraverso le pagine e i loro flussi di contenuto. La libreria fornisce pieno supporto per estrarre informazioni utili da PDF esistenti, come testo semplice, metadati, font incorporati, numeri, immagini, uve, nomi e altro. L'esempio seguente dimostra come aprire un PDF esistente ed estrarre informazioni di base utilizzando la libreria C.

Come estrarre testo semplice da un file PDF tramite libreria 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;
}

Lettura efficiente basata su flusso

PDFio è progettato per l'efficienza. Durante la lettura, non carica l'intero file in memoria contemporaneamente. Invece, utilizza un approccio di parsing pull, consentendo di elaborare il file a blocchi. Questo è fondamentale per gestire PDF molto grandi senza esaurire la memoria di sistema. La funzione pdfioPageParseContents del primo esempio è un esempio lampante di questo modello basato su stream. Legge il flusso di contenuto della pagina in modo sequenziale, emettendo eventi (come il nostro callback di testo) man mano.

 Italiano