Безплатна 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 приложения.
Започване с 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 от първия пример е отличен пример за този потоково‑базиран модел. Тя чете потока от съдържание на страницата последователно, генерирайки събития (като нашия текстов обратен повик) по време на процеса.