Bezmaksas C++ PDF bibliotēka PDF failu lasīšanai un rakstīšanai
Vienkārša atvērtā koda C-bāzēta PDF bibliotēka ļauj lasīt, rakstīt un manipulēt PDF dokumentus. Tā atbalsta attēlu pārvēršanu uz PDF, satura izguvi, plūsmas balstītu PDF lasīšanu un vairāk, C lietojumprogrammās.
Kas ir PDFio bibliotēka?
PDFio ir viegla, atvērtā koda C bibliotēka, kas ir īpaši izstrādāta PDF failu lasīšanai un rakstīšanai, neiekļaujot renderēšanas vai skatīšanas sarežģītību. To izveidoja Michael R Sweet, un tā ir licencēta saskaņā ar Apache License 2.0 versiju. Šī bibliotēka nodrošina izstrādātājiem vienkāršu pieeju PDF manipulācijām, kas koncentrējas uz satura izveidi, izvilkšanu un pārveidošanu, nevis uz vizuālo prezentāciju. Bibliotēka ir ļoti viegli lietojama un piedāvā vairākas iespējas PDF failu apstrādei, piemēram, PDF lapu izvilkšanu un apvienošanu, automatizētus pārskatus no datubāzēm, ūdenszīmju un zīmogu pievienošanu, sertifikātu un diplomu izveidi, fontu iegulšanu arhivēšanai, metadatu modificēšanu un daudz ko citu.
PDFio koncentrējas uz būtiskajām I/O operācijām, padarot to par ideālu lietojumprogrammām, kas jāizgūst dati no PDF vai jāizveido jauni, bez sarežģītāku bibliotēku pārslodzes. Bibliotēka atbalsta jaudīgas konvertēšanas funkcijas un ļauj programmatūras izstrādātājiem konvertēt markdown uz PDF, attēlu uz PDF, HTML uz PDF, kā arī ģenerēt svītrkodus PDF failos C lietojumprogrammās. Tā koncentrēšanās uz kodola funkcionalitāti, neiekļaujot renderēšanas pārslodzi, padara to par ideālu servera puses lietojumprogrammām, komandrindas rīkiem un iegultām sistēmām, kur nepieciešama PDF izveide vai apstrāde bez vizuāla attēlojuma. Neatkarīgi no tā, vai veidojat dokumentu pārvaldības sistēmas, izveidojat automatizētus pārskatu ģeneratorus vai izstrādājat rīkus PDF analīzei, PDFio piedāvā būtisko funkcionalitāti profesionālai PDF apstrādei C lietojumprogrammās.
Kā sākt darbu ar PDFio
Ieteicamais veids, kā instalēt PDFio, ir izmantot NuGet. Lūdzu, izmantojiet šādu komandu, lai veiktu vienkāršu instalēšanu.
Instalēt PDFio, izmantojot NuGet
Install-Package pdfio_native Instalēt PDFio, izmantojot GitHub
git clone https://github.com/michaelrsweet/pdfio.git
Jūs varat arī instalēt to manuāli; lejupielādēt jaunākos izlaiduma failus tieši no GitHub krātuves.
PDF izveide no nulles, izmantojot C
Atvērtā koda PDFio bibliotēka ir iekļāvusi pilnīgu atbalstu jaunu PDF dokumentu izveidei no nulles C lietojumprogrammās. Jauna PDF dokumenta izveide ir tikpat vienkārša, un ar tikai pāris C koda rindām programmatūras izstrādātāji var pievienot jaunas lapas, zīmēt tekstu un vienkāršas figūras, pievienot attēlus (JPEG, PNG formāti), piemērot krāsas un transformācijas, veidot tabulas un strukturētus izkārtojumus un daudz ko citu. Šeit ir vienkāršs piemērs, kas parāda, kā izveidot jaunu PDF dokumentu ar pielāgotu lapas izmēru un saturu, izmantojot C kodu.
Kā izveidot vienkāršu PDF dokumentu ar pielāgotu lapas izmēru & saturu, izmantojot C bibliotēku?
#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;
}
Attēlu konvertēšana uz PDF, izmantojot C bibliotēku
Attēlu konvertēšana uz PDF formātu ir viens no visbiežākajiem dokumentu apstrādes uzdevumiem. PDFio bibliotēka to padara vienkāršu, vienlaikus nodrošinot precīzu kontroli pār lapas izmēriem, attēlu novietojumu, mērogošanu un metadatiem. Programmatūras izstrādātāji var izveidot pilnīgu attēlu uz PDF pārveidotāju, kas apstrādā gan atsevišķus attēlus, gan grupas pārveidošanu. Zemāk esošais piemērs parāda, kā izstrādātāji var konvertēt vienu attēlu uz PDF C lietojumprogrammās.
Kā pārveidot vienu attēlu PDF formātā, izmantojot C bibliotēku?
#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 lasīšana un teksta izguve, izmantojot C bibliotēku
Viens no visbiežākajiem uzdevumiem ir PDF faila lasīšana un teksta izguve. Atvērtā koda PDFio bibliotēka padara šo procesu intuitīvu, ļaujot izstrādātājiem iterēt caur lapām un to satura straumēm. Bibliotēka nodrošina pilnu atbalstu noderīgas informācijas izguvei no esošajiem PDF, piemēram, vienkārša teksta, metadatu, iegultu fontu, skaitļu, attēlu, vīnogu, vārdu un citu. Zemāk esošais piemērs parāda, kā atvērt esošu PDF un izgūt no tā pamata informāciju, izmantojot C bibliotēku.
Kā izvilkt vienkāršu tekstu no PDF faila, izmantojot C bibliotēku?
#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;
}
Efektīva, plūsmas balstīta lasīšana
PDFio ir izstrādāts efektivitātei. Lasot, tas neielādē visu failu atmiņā vienlaicīgi. Tā vietā tas izmanto pull‑parsēšanas pieeju, ļaujot apstrādāt failu gabalos. Tas ir būtiski, lai apstrādātu ļoti lielus PDF, neiztukšojot sistēmas atmiņu. Funkcija pdfioPageParseContents no pirmā piemēra ir izcils šī straumes balstītā modeļa piemērs. Tā secīgi lasa lapas satura straumi, izstarojot notikumus (piemēram, mūsu teksta atzvanīšanas funkciju) procesā.