Ilmainen C++ PDF -kirjasto PDF-tiedostojen lukemiseen ja kirjoittamiseen
Yksinkertainen avoimen lähdekoodin C-pohjainen PDF-kirjasto mahdollistaa PDF-dokumenttien lukemisen, kirjoittamisen ja muokkaamisen. Se tukee kuvan muuntamista PDF:ksi, sisällön poimintaa, virta-pohjaista PDF-lukemista ja muuta C-sovelluksissa.
Mikä on PDFio-kirjasto?
PDFio on kevyt, avoimen lähdekoodin C-kirjasto, joka on suunniteltu erityisesti PDF-tiedostojen lukemiseen ja kirjoittamiseen ilman renderöinnin tai katselun monimutkaisuutta. Michael R Sweetin luoma ja Apache License Version 2.0 -lisenssin alainen, tämä kirjasto tarjoaa kehittäjille suoraviivaisen lähestymistavan PDF-manipulointiin, joka keskittyy sisällön luomiseen, poimintaan ja muuntamiseen sen sijaan, että keskityttäisiin visuaaliseen esitykseen. Kirjasto on erittäin helppokäyttöinen ja tarjoaa useita tapoja PDF-tiedostojen käsittelyyn, kuten PDF-sivujen poiminta ja yhdistäminen, automaattiset raportit tietokannoista, vesileimojen ja leimojen lisääminen, sertifikaatti- ja diplomien luominen, fonttien upottaminen arkistointia varten, metatietojen muokkaus ja monia muita.
PDFio keskittyy olennaisiin I/O-toimintoihin, mikä tekee siitä täydellisen sovelluksille, jotka tarvitsevat tietojen poimimista PDF-tiedostoista tai uusien luomista ilman monimutkaisempien kirjastojen ylimääräistä kuormitusta. Kirjasto tukee tehokkaita muunnostoimintoja ja mahdollistaa ohjelmistokehittäjille markdownin muuntamisen PDF:ksi, kuvan muuntamisen PDF:ksi, HTML:n muuntamisen PDF:ksi sekä viivakoodien luomisen PDF-tiedostoihin C-sovelluksissa. Sen keskittyminen ydintoiminnallisuuteen ilman renderöinnin kuormitusta tekee siitä ihanteellisen palvelinpuolen sovelluksiin, komentorivityökaluihin ja sulautettuihin järjestelmiin, joissa PDF:n luonti tai käsittely on tarpeen ilman visuaalista näyttöä. Olipa kyseessä asiakirjojen hallintajärjestelmien rakentaminen, automatisoitujen raporttigeneraattorien luominen tai PDF-analyysityökalujen kehittäminen, PDFio tarjoaa olennaisen toiminnallisuuden ammatilliseen PDF-käsittelyyn C-sovelluksissa.
PDFio:n käyttöönotto
Suositeltu tapa asentaa PDFio on käyttää NuGetia. Käytä seuraavaa komentoa sujuvan asennuksen varmistamiseksi.
Asenna PDFio NuGetin kautta
Install-Package pdfio_native Asenna PDFio GitHubin kautta
git clone https://github.com/michaelrsweet/pdfio.git
Voit myös asentaa sen manuaalisesti; lataa uusimmat julkaisutiedostot suoraan GitHub-varastosta.
PDF:n luominen alusta alkaen C:n avulla
Avoimen lähdekoodin PDFio-kirjasto on sisällyttänyt täyden tuen uusien PDF-asiakirjojen luomiseen alusta alkaen C-sovelluksissa. Uuden PDF-asiakirjan luominen on yhtä helppoa, ja vain muutamalla C-koodirivillä ohjelmistokehittäjät voivat lisätä uusia sivuja, piirtää tekstiä ja yksinkertaisia muotoja, lisätä kuvia (JPEG-, PNG-muodot), soveltaa värejä ja muunnoksia, rakentaa taulukoita ja rakenteellisia asetteluja sekä paljon muuta. Tässä on yksinkertainen esimerkki, joka osoittaa, miten luodaan uusi PDF-asiakirja mukautetulla sivukoolla ja sisällöllä C-koodia käyttäen.
Kuinka luoda yksinkertainen PDF-asiakirja mukautetulla sivukoolla ja sisällöllä C-kirjaston avulla?
#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;
}
Kuvan muuntaminen PDF:ksi C-kirjaston avulla
Kuvien muuntaminen PDF-muotoon on yksi yleisimmistä asiakirjankäsittelyn tehtävistä. PDFio-kirjasto tekee tästä suoraviivaista samalla kun se tarjoaa tarkan hallinnan sivukoon, kuvan sijoittelun, skaalaamisen ja metatietojen suhteen. Ohjelmistokehittäjät voivat rakentaa täydellisen kuva-PDF-muuntimen, joka käsittelee sekä yksittäisiä kuvia että erämuunnoksia. Seuraava esimerkki osoittaa, miten kehittäjät voivat muuntaa yhden kuvan PDF:ksi C-sovelluksissa.
Kuinka muuntaa yksittäinen kuva PDF:ksi C-kirjaston avulla?
#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:n lukeminen ja tekstin poiminta C-kirjaston avulla
Yksi yleisimmistä tehtävistä on PDF-tiedoston lukeminen ja tekstin poimiminen. Avoimen lähdekoodin PDFio-kirjasto tekee tästä prosessista intuitiivisen antamalla kehittäjien iteratoida sivuja ja niiden sisältövirtoja. Kirjasto tarjoaa täyden tuen hyödyllisen tiedon poimimiseen olemassa olevista PDF-tiedostoista, kuten yksinkertainen teksti, metatiedot, upotetut fontit, numerot, kuvat, rypäleet, nimet ja paljon muuta. Seuraava esimerkki näyttää, miten avata olemassa oleva PDF ja poimia siitä perusinformaatio C-kirjastoa käyttäen.
Kuinka poimia yksinkertaista tekstiä PDF-tiedostosta C-kirjaston avulla?
#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;
}
Tehokas, suoratoistopohjainen lukeminen
PDFio on suunniteltu tehokkuutta varten. Lukiessa se ei lataa koko tiedostoa muistiin kerralla. Sen sijaan se käyttää pull-parsing‑lähestymistapaa, jonka avulla voit käsitellä tiedostoa paloina. Tämä on ratkaisevaa erittäin suurten PDF-tiedostojen käsittelemiseksi kuluttamatta järjestelmämuistia. pdfioPageParseContents‑funktio ensimmäisestä esimerkistä on erinomainen esimerkki tästä virta‑pohjaisesta mallista. Se lukee sivun sisältövirran peräkkäin, lähettäen tapahtumia (kuten tekstikutsumme) matkan varrella.