Perpustakaan PDF C++ Percuma untuk Membaca & Menulis Fail PDF
Perpustakaan PDF berasaskan C Sumber Terbuka yang Ringkas membolehkan Membaca, Menulis dan Memanipulasi Dokumen PDF. Ia Menyokong Penukaran Imej ke PDF, Mengekstrak Kandungan, Pembacaan PDF berasaskan Aliran dan Lain-lain, dalam aplikasi C.
Apakah Perpustakaan PDFio?
PDFio ialah perpustakaan C ringan dan sumber terbuka yang direka khusus untuk membaca dan menulis fail PDF tanpa kerumitan rendering atau paparan. Dibuat oleh Michael R Sweet dan dilesenkan di bawah Apache License Versi 2.0, perpustakaan ini menyediakan pemaju dengan pendekatan yang mudah untuk manipulasi PDF yang menumpukan pada penciptaan, pengekstrakan, dan transformasi kandungan daripada persembahan visual. Perpustakaan ini sangat mudah digunakan dan menawarkan pelbagai cara untuk memproses fail PDF seperti pengekstrakan dan penggabungan halaman PDF, laporan automatik dari pangkalan data, penambahan watermark dan cap, penciptaan sijil dan diploma, penyematan fon untuk arkib, pengubahsuaian metadata dan banyak lagi.
PDFio memberi tumpuan kepada operasi I/O yang penting, menjadikannya sempurna untuk aplikasi yang perlu mengekstrak data daripada PDF atau membuat yang baru tanpa beban tambahan perpustakaan yang lebih kompleks. Perpustakaan ini menyokong ciri penukaran yang kuat dan membolehkan pembangun perisian menukar markdown kepada PDF, imej kepada PDF, HTML kepada PDF serta penjanaan kod bar dalam PDF dalam aplikasi C. Fokusnya pada fungsi teras tanpa beban rendering menjadikannya ideal untuk aplikasi sisi pelayan, alat baris perintah, dan sistem terbenam di mana penciptaan atau pemprosesan PDF diperlukan tanpa paparan visual. Sama ada anda membina sistem pengurusan dokumen, mencipta penjana laporan automatik, atau membangunkan alat untuk analisis PDF, PDFio menawarkan fungsi penting yang diperlukan untuk pengendalian PDF profesional dalam aplikasi C.
Mula Menggunakan PDFio
Cara yang disyorkan untuk memasang PDFio ialah menggunakan NuGet. Sila gunakan perintah berikut untuk pemasangan yang lancar.
Pasang PDFio melalui NuGet
Install-Package pdfio_native Pasang PDFio melalui GitHub
git clone https://github.com/michaelrsweet/pdfio.git
Anda juga boleh memasangnya secara manual; muat turun fail pelepasan terkini secara langsung dari repositori GitHub.
Mencipta PDF dari Awal melalui C
Pustaka PDFio sumber terbuka telah menyertakan sokongan lengkap untuk mencipta dokumen PDF baru dari awal dalam aplikasi C. Mencipta dokumen PDF baru juga sangat mudah dan dengan hanya beberapa baris kod C, pemaju perisian boleh menambah halaman baru, melukis teks dan bentuk ringkas, menambah imej (format JPEG, PNG), menggunakan warna dan transformasi, membina jadual serta susun atur
Bagaimana Menukar Imej Tunggal kepada PDF melalui Perpustakaan 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;
}
Baca PDF & Ekstrak Teks melalui Perpustakaan C
Salah satu tugas yang paling biasa ialah membaca dan mengekstrak teks daripada fail PDF. Perpustakaan sumber terbuka PDFio menjadikan proses ini intuitif dengan membolehkan pembangun mengulangi halaman dan aliran kandungan mereka. Perpustakaan ini menyediakan sokongan penuh untuk mengekstrak maklumat berguna daripada PDF sedia ada, seperti teks ringkas, metadata, fon terbenam, nombor, imej, anggur, nama dan banyak lagi. Contoh berikut menunjukkan cara membuka PDF sedia ada dan mengekstrak maklumat asas daripadanya menggunakan perpustakaan C.
Bagaimana Mengekstrak Teks Ringkas dari Fail PDF melalui Perpustakaan 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;
}
Pembacaan Berasaskan Aliran yang Cekap
PDFio direka untuk kecekapan. Semasa membaca, ia tidak memuatkan keseluruhan fail ke dalam memori sekaligus. Sebaliknya, ia menggunakan pendekatan penarikan‑parse, membolehkan anda memproses fail dalam bahagian‑bahagian. Ini penting untuk mengendalikan PDF yang sangat besar tanpa menghabiskan memori sistem. Fungsi pdfioPageParseContents dari contoh pertama merupakan contoh utama model berasaskan aliran ini. Ia membaca aliran kandungan halaman secara berurutan, memancarkan acara (seperti panggilan balik teks kami) semasa proses.