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

Darmowa biblioteka C++ PDF do odczytu i zapisu plików PDF

Prosta otwarto‑źródłowa biblioteka PDF oparta na C umożliwia odczyt, zapis i manipulację dokumentami PDF. Obsługuje konwersję obrazu do PDF, wyodrębnianie treści, odczyt strumieniowy PDF i wiele więcej w aplikacjach C.

Czym jest biblioteka PDFio?

PDFio to lekka, otwarto‑źródłowa biblioteka C zaprojektowana specjalnie do odczytu i zapisu plików PDF bez złożoności renderowania czy wyświetlania. Stworzona przez Michaela R. Sweeta i udostępniona na licencji Apache License Version 2.0, biblioteka ta zapewnia programistom prostą metodę manipulacji PDF, koncentrującą się na tworzeniu, wyodrębnianiu i przekształcaniu treści, a nie na prezentacji wizualnej. Biblioteka jest bardzo łatwa w obsłudze i oferuje wiele sposobów przetwarzania plików PDF, takich jak wyodrębnianie i łączenie stron PDF, automatyczne raporty z baz danych, znakowanie wodą i stemplowanie, tworzenie certyfikatów i dyplomów, osadzanie czcionek do archiwizacji, modyfikacja metadanych i wiele innych.

PDFio koncentruje się na niezbędnych operacjach I/O, co czyni go idealnym dla aplikacji, które muszą wyodrębniać dane z plików PDF lub tworzyć nowe, bez obciążenia wynikającego z bardziej złożonych bibliotek. Biblioteka wspiera potężne funkcje konwersji i umożliwia programistom przekształcanie markdown do PDF, obrazu do PDF, HTML do PDF, a także generowanie kodów kreskowych w PDF w aplikacjach C. Skupienie na podstawowej funkcjonalności bez narzutu renderowania sprawia, że jest idealny dla aplikacji po stronie serwera, narzędzi wiersza poleceń i systemów wbudowanych, gdzie potrzebne jest tworzenie lub przetwarzanie PDF bez wyświetlania wizualnego. Niezależnie od tego, czy budujesz systemy zarządzania dokumentami, tworzysz automatyczne generatory raportów, czy rozwijasz narzędzia do analizy PDF, PDFio oferuje niezbędną funkcjonalność potrzebną do profesjonalnej obsługi PDF w aplikacjach C.

Previous Next

Rozpoczęcie pracy z PDFio

Zalecanym sposobem instalacji PDFio jest użycie NuGet. Proszę użyć następującego polecenia, aby przeprowadzić płynną instalację.

Zainstaluj PDFio przez NuGet

Install-Package pdfio_native 

Zainstaluj PDFio przez GitHub

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

Możesz również zainstalować go ręcznie; pobierz najnowsze pliki wydania bezpośrednio z repozytorium GitHub.

Tworzenie PDF od podstaw w języku C

Biblioteka open source PDFio zawiera pełne wsparcie dla tworzenia nowych dokumentów PDF od podstaw w aplikacjach C. Tworzenie nowego dokumentu PDF jest równie proste i przy użyciu kilku linii kodu C programiści mogą dodawać nowe strony, rysować tekst i proste kształty, dodawać obrazy (formaty JPEG, PNG), stosować kolory i transformacje, budować tabele oraz strukturalne układy i wiele więcej. Poniżej znajduje się prosty przykład, który pokazuje, jak stworzyć nowy dokument PDF o niestandardowym rozmiarze strony i zawartości przy użyciu kodu C.

Jak stworzyć prosty dokument PDF z niestandardowym rozmiarem strony i zawartością przy użyciu biblioteki 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;
}

Konwersja obrazu do PDF przy użyciu biblioteki C

Konwertowanie obrazów do formatu PDF jest jednym z najczęstszych zadań przetwarzania dokumentów. Biblioteka PDFio upraszcza to, zapewniając precyzyjną kontrolę nad rozmiarem stron, rozmieszczeniem obrazów, skalowaniem i metadanymi. Programiści mogą zbudować kompletny konwerter obrazu do PDF, który obsługuje zarówno pojedyncze obrazy, jak i konwersje wsadowe. Poniższy przykład pokazuje, jak programiści mogą konwertować jeden obraz do PDF w aplikacjach C.

Jak przekonwertować pojedynczy obraz na PDF przy użyciu biblioteki 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;
}
 

Odczyt PDF i wyodrębnianie tekstu przy użyciu biblioteki C

Jednym z najczęstszych zadań jest odczytywanie i wyodrębnianie tekstu z pliku PDF. Biblioteka open source PDFio sprawia, że proces ten jest intuicyjny, umożliwiając programistom iterację po stronach i ich strumieniach zawartości. Biblioteka zapewnia pełne wsparcie w wyciąganiu przydatnych informacji z istniejących plików PDF, takich jak prosty tekst, metadane, osadzone czcionki, liczby, obrazy, winogrona, nazwy i wiele innych. Poniższy przykład demonstruje, jak otworzyć istniejący PDF i wyodrębnić z niego podstawowe informacje przy użyciu biblioteki C.

Jak wyodrębnić prosty tekst z pliku PDF przy użyciu biblioteki 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;
}

Wydajne odczytywanie oparte na strumieniach

PDFio jest zaprojektowane pod kątem wydajności. Podczas odczytu nie ładuje całego pliku do pamięci jednocześnie. Zamiast tego używa podejścia pull‑parsing, pozwalając przetwarzać plik w fragmentach. Jest to kluczowe przy obsłudze bardzo dużych plików PDF bez wyczerpywania pamięci systemowej. Funkcja pdfioPageParseContents z pierwszego przykładu jest doskonałym przykładem tego modelu opartego na strumieniach. Czyta ona strumień zawartości strony kolejno, emitując zdarzenia (takie jak nasz callback tekstowy) w trakcie.

 Polski