Безплатна C++ PDF библиотека за четене и запис на PDF файлове

Проста библиотека с отворен код, базирана на C, позволяваща четене, запис и манипулиране на PDF документи. Тя поддържа конвертиране на изображение в PDF, извличане на съдържание, поточно четене на PDF и др., в C приложения.

Какво е PDFio Library?

PDFio е лека, с отворен код C библиотека, създадена специално за четене и записване на PDF файлове без сложността на рендериране или преглед. Създадена от Майкъл Р. Сийв и лицензирана под Apache License версия 2.0, тази библиотека предоставя на разработчиците прост подход към манипулирането на PDF, който се фокусира върху създаване, извличане и трансформиране на съдържание, а не върху визуалната презентация. Библиотеката е много лесна за работа и предлага няколко начина за обработка на PDF файлове, като извличане и обединяване на страници, автоматизирани отчети от бази данни, водни знаци и печат, създаване на сертификати и дипломи, вграждане на шрифтове за архивиране, модификация на метаданни и много други.

PDFio се фокусира върху съществените I/O операции, което го прави перфектен за приложения, които трябва да извличат данни от PDF файлове или да създават нови, без натоварването на по-сложни библиотеки. Библиотеката поддържа мощни функции за конвертиране и позволява на софтуерните разработчици да конвертират markdown в PDF, изображение в PDF, HTML в PDF, както и генериране на баркодове в PDF‑ове в C приложения. Фокусът върху основната функционалност без натоварване от рендериране я прави идеална за сървърни приложения, инструменти за команден ред и вградени системи, където създаването или обработката на PDF е необходима без визуален дисплей. Независимо дали изграждате системи за управление на документи, създавате автоматизирани генератори на отчети или разработвате инструменти за анализ на PDF, PDFio предлага необходимата функционалност за професионално работа с PDF в C приложения.

Previous Next

Започване с PDFio

Препоръчителният начин за инсталиране на PDFio е чрез NuGet. Моля, използвайте следната команда за безпроблемна инсталация.

Инсталиране на PDFio чрез NuGet

Install-Package pdfio_native 

Инсталиране на PDFio чрез GitHub

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

Можете също да го инсталирате ръчно; изтеглете последните файлове от последното издание директно от GitHub хранилището.

Създаване на PDF от нулата чрез C

Отвореният код PDFio библиотека включва пълна поддръжка за създаване на нов PDF документ от нулата в C приложения. Създаването на нов PDF документ е също толкова просто и с няколко реда C код софтуерните разработчици могат да добавят нови страници, да рисуват текст и прости форми, да добавят изображения (JPEG, PNG формати), да прилагат цветове и трансформации, да изграждат таблици и структурирани оформления и много други. Ето прост пример, който демонстрира как да създадете нов PDF документ с персонализиран размер на страницата и съдържание, използвайки C код.

Как да създадете прост PDF документ с персонализиран размер на страницата и съдържание чрез 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;
}

Конвертиране на изображения към PDF чрез C Library

Конвертирането на изображения в PDF формат е една от най-често срещаните задачи за обработка на документи. PDFio библиотеката прави това просто, като предоставя прецизен контрол върху размерите на страницата, разполагането на изображения, мащабирането и метаданните. Софтуерните разработчици могат да създадат пълен конвертор от изображение към PDF, който обработва както единични изображения, така и пакетни конвертирания. Следният пример демонстрира как разработчиците могат да конвертират едно изображение в PDF в C приложения.

Как да конвертирате едно изображение в PDF чрез 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;
}
 

Четене на PDF и извличане на текст чрез C библиотека

Една от най-често срещаните задачи е четенето и извличането на текст от PDF файл. Отворената библиотека PDFio прави този процес интуитивен, като позволява на разработчиците да итерират през страниците и техните потоци от съдържание. Библиотеката предоставя пълна поддръжка за извличане на полезна информация от съществуващи PDF‑ове, като прост текст, метаданни, вградени шрифтове, числа, изображения, грозде, имена и др. Следният пример демонстрира как да отворите съществуващ PDF и да извлечете основна информация от него, използвайки C библиотека.

Как да извлечете прост текст от PDF файл чрез 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;
}

Ефективно, потоково четене

PDFio е проектирана за ефективност. При четене тя не зарежда целия файл в паметта наведнъж. Вместо това използва подход на извличане (pull‑parsing), позволявайки ви да обработвате файла на части. Това е от съществено значение за работа с много големи PDF‑ове без изчерпване на системната памет. Функцията pdfioPageParseContents от първия пример е отличен пример за този потоково‑базиран модел. Тя чете потока от съдържание на страницата последователно, генерирайки събития (като нашия текстов обратен повик) по време на процеса.

 Български