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

Bezplatná C++ PDF knihovna pro čtení a zápis PDF souborů

Jednoduchá open-source C‑based PDF knihovna umožňuje číst, zapisovat a manipulovat s PDF dokumenty. Podporuje převod obrázků do PDF, extrahování obsahu, streamové čtení PDF a další, v C aplikacích.

Co je knihovna PDFio?

PDFio je lehká, open-source C knihovna navržená speciálně pro čtení a zápis PDF souborů bez složitosti renderování nebo prohlížení. Vytvořil ji Michael R. Sweet a je licencována pod Apache License verze 2.0. Tato knihovna poskytuje vývojářům jednoduchý přístup k manipulaci s PDF, který se zaměřuje na tvorbu, extrakci a transformaci obsahu spíše než na vizuální prezentaci. Knihovna je velmi snadno ovladatelná a nabízí několik způsobů zpracování PDF souborů, jako je extrakce a slučování stránek PDF, automatizované reporty z databází, vodoznakování a razítkování, tvorba certifikátů a diplomů, vkládání fontů pro archivaci, úprava metadat a mnoho dalšího.

PDFio se zaměřuje na základní operace I/O, což z něj činí ideální řešení pro aplikace, které potřebují extrahovat data z PDF nebo vytvářet nová, aniž by zatěžovaly složitějšími knihovnami. Knihovna podporuje výkonné konverzní funkce a umožňuje vývojářům softwaru převádět markdown na PDF, obrázek na PDF, HTML na PDF a také generovat čárové kódy v PDF v rámci C aplikací. Její zaměření na základní funkčnost bez režie renderování ji činí vhodnou pro serverové aplikace, nástroje příkazové řádky a vestavěné systémy, kde je potřeba vytvářet nebo zpracovávat PDF bez vizuálního zobrazení. Ať už budujete systémy pro správu dokumentů, vytváříte automatizované generátory zpráv nebo vyvíjíte nástroje pro analýzu PDF, PDFio nabízí nezbytnou funkčnost potřebnou pro profesionální práci s PDF v C aplikacích.

Previous Next

Začínáme s PDFio

Doporučený způsob instalace PDFio je pomocí NuGet. Použijte prosím následující příkaz pro hladkou instalaci.

Instalace PDFio přes NuGet

Install-Package pdfio_native 

Instalace PDFio přes GitHub

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

Můžete jej také nainstalovat ručně; stáhněte si nejnovější soubory vydání přímo z repozitáře GitHub.

Vytvoření PDF od nuly pomocí C

Open source knihovna PDFio zahrnuje kompletní podporu pro vytváření nových PDF dokumentů od nuly v C aplikacích. Vytvoření nového PDF dokumentu je stejně jednoduché a s pouhými několika řádky C kódu mohou vývojáři přidávat nové stránky, kreslit text a jednoduché tvary, přidávat obrázky (formáty JPEG, PNG), aplikovat barvy a transformace, vytvářet tabulky a strukturované rozvržení a mnohem více. Zde je jednoduchý příklad, který ukazuje, jak vytvořit nový PDF dokument

Jak převést jediný obrázek na PDF pomocí C knihovny?

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

Čtení PDF a extrakce textu pomocí knihovny C

Jedním z nejčastějších úkolů je čtení a extrahování textu z PDF souboru. Open source knihovna PDFio činí tento proces intuitivním tím, že umožňuje vývojářům iterovat přes stránky a jejich obsahové proudy. Knihovna poskytuje plnou podporu pro získávání užitečných informací z existujících PDF, jako je jednoduchý text, metadata, vložená písma, čísla, obrázky, hrozny, jména a další. Následující příklad ukazuje, jak otevřít existující PDF a extrahovat z něj základní informace pomocí knihovny C.

Jak extrahovat jednoduchý text z PDF souboru pomocí C knihovny?

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

Efektivní čtení založené na streamu

PDFio je navrženo pro efektivitu. Při čtení nenačítá celý soubor najednou do paměti. Místo toho používá přístup pull-parsing, který vám umožňuje zpracovávat soubor po částech. To je zásadní pro práci s velmi velkými PDF soubory, aniž by vyčerpalo paměť systému. Funkce pdfioPageParseContents z prvního příkladu je výborným příkladem tohoto streamového modelu. Čte obsahový proud stránky sekvenčně a během toho vyvolává události (například naše textové zpětné volání).

 Čeština