1. Termékek
  2.   PDF
  3.   C++
  4.   PDFio
 
  

Ingyenes C++ PDF könyvtár PDF-fájlok olvasásához és írásához

Egy egyszerű nyílt forráskódú C-alapú PDF könyvtár lehetővé teszi PDF-dokumentumok olvasását, írását és manipulálását. Támogatja a képek PDF-be konvertálását, a tartalom kinyerését, a folyam-alapú PDF-olvasást és még sok mást C alkalmazásokon belül.

Mi az a PDFio könyvtár?

A PDFio egy könnyű, nyílt forráskódú C könyvtár, amely kifejezetten PDF fájlok olvasására és írására lett tervezve, anélkül, hogy a renderelés vagy megjelenítés bonyolultságával kellene foglalkozni. Michael R Sweet hozta létre, és az Apache License 2.0 verziója alatt licencelt, ez a könyvtár a fejlesztőknek egyszerű megközelítést kínál a PDF manipulációhoz, amely a tartalom létrehozására, kinyerésére és átalakítására összpontosít a vizuális megjelenítés helyett. A könyvtár nagyon könnyen kezelhető, és számos módot biztosít a PDF fájlok feldolgozásához, például PDF oldalak kinyerése és egyesítése, adatbázisokból származó automatikus jelentések, vízjelezés és bélyegzés, tanúsítványok és diplomák létrehozása, archiválásra szánt betűtípus beágyazása, metaadat módosítás és még sok más.

PDFio az alapvető I/O műveletekre összpontosít, így tökéletes azok számára, amelyeknek PDF-ekből kell adatot kinyerni vagy újakat létrehozni anélkül, hogy bonyolultabb könyvtárak terhe alatt állnának. A könyvtár erőteljes konverziós funkciókat támogat, és lehetővé teszi a fejlesztők számára, hogy markdownot PDF‑vé, képet PDF‑vé, HTML‑t PDF‑vé konvertáljanak, valamint vonalkódot generáljanak PDF‑ekben C alkalmazásokon belül. A magfunkcionalitásra való fókusz, a renderelés terhe nélkül, ideálissá teszi szerveroldali alkalmazásokhoz, parancssori eszközökhöz és beágyazott rendszerekhez, ahol a PDF‑készítés vagy -feldolgozás vizuális megjelenítés nélkül szükséges. Akár dokumentumkezelő rendszereket épít, akár automatizált jelentésgenerátorokat hoz létre, vagy PDF‑elemző eszközöket fejleszt, a PDFio a professzionális PDF‑kezeléshez szükséges alapvető funkciókat kínál C alkalmazásokban.

Previous Next

PDFio használatának megkezdése

Az ajánlott mód a PDFio telepítésére a NuGet használata. Kérjük, használja a következő parancsot a zökkenőmentes telepítéshez.

PDFio telepítése NuGet-en keresztül

Install-Package pdfio_native 

PDFio telepítése GitHubon keresztül

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

A programot manuálisan is telepítheti; a legújabb kiadási fájlokat közvetlenül a GitHub tárolóból töltheti le.

PDF létrehozása nulláról C nyelven

Az nyílt forráskódú PDFio könyvtár teljes körű támogatást nyújt új PDF dokumentumok létrehozásához a semmiből C alkalmazásokban. Új PDF dokumentum létrehozása egyaránt egyszerű, és néhány C kódsorral a szoftverfejlesztők új oldalakat adhatnak hozzá, szöveget és egyszerű alakzatokat rajzolhatnak, képeket (JPEG, PNG formátumok) helyezhetnek el, színeket és transzformációkat alkalmazhatnak, táblázatokat és strukturált elrendezéseket építhetnek, és még sok mást. Itt egy egyszerű példa, amely bemutatja, hogyan hozhatunk létre egy új PDF dokumentumot egyedi oldalmérettel és tartalommal C kóddal.

Hogyan hozzunk létre egy egyszerű PDF dokumentumot egyedi oldalmérettel és tartalommal C könyvtár segítségével?

#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 

Hogyan konvertáljunk egyetlen képet PDF-be C könyvtár segítségével?

#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 olvasása és szöveg kinyerése C könyvtárral

Egyik leggyakoribb feladat a PDF-fájlok olvasása és szövegük kinyerése. A nyílt forráskódú PDFio könyvtár intuitívvá teszi ezt a folyamatot, lehetővé téve a fejlesztők számára, hogy végigmenjenek az oldalakon és azok tartalomfolyamain. A könyvtár teljes támogatást nyújt a meglévő PDF-ekből hasznos információk kinyeréséhez, például egyszerű szöveg, metaadatok, beágyazott betűkészletek, számok, képek, szőlő, nevek és egyebek. Az alábbi példa bemutatja, hogyan nyissunk meg egy meglévő PDF-et, és hogyan nyerjünk ki belőle alapvető információkat C könyvtár használatával.

Hogyan nyerjünk ki egyszerű szöveget egy PDF fájlból C könyvtár segítségével?

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

Hatékony, adatfolyam-alapú olvasás

A PDFio hatékonyságra lett tervezve. Olvasáskor nem tölti be egyszerre az egész fájlt a memóriába. Ehelyett egy pull-parsing megközelítést használ, amely lehetővé teszi a fájl darabokban történő feldolgozását. Ez elengedhetetlen a nagyon nagy PDF-ek kezelésekor, anélkül, hogy kimerítené a rendszer memóriáját. A pdfioPageParseContents függvény az első példából kiváló példája ennek a stream-alapú modellnek. Sorban olvassa be az oldal tartalomfolyamát, eseményeket (például a szöveg visszahívásunkat) kibocsátva.

 Magyar