1. Produk
  2.   PDF
  3.   C++
  4.   PDFio
 
  

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.

Previous Next

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.

 Melayu