ไลบรารี C++ PDF ฟรีสำหรับการอ่านและเขียนไฟล์ PDF

ไลบรารี PDF แบบ C ที่ง่ายและโอเพนซอร์สช่วยให้สามารถอ่าน, เขียนและจัดการเอกสาร PDF ได้ รองรับการแปลงรูปภาพเป็น PDF, การสกัดเนื้อหา, การอ่าน PDF แบบสตรีมและอื่น ๆ ภายในแอป C

PDFio Library คืออะไร?

PDFio เป็นไลบรารี C ที่มีน้ำหนักเบาและเป็นโอเพนซอร์สออกแบบมาโดยเฉพาะสำหรับการอ่านและเขียนไฟล์ PDF โดยไม่ต้องซับซ้อนกับการเรนเดอร์หรือการดูไฟล์ สร้างโดย Michael R Sweet และได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ไลบรารีนี้มอบวิธีการที่ตรงไปตรงมาสำหรับนักพัฒนาในการจัดการ PDF โดยมุ่งเน้นที่การสร้างเนื้อหา การสกัดและการแปลงรูปแบบ มากกว่าการนำเสนอภาพ ไลบรารีนี้ใช้งานง่ายและให้วิธีการหลายอย่างสำหรับการจัดการไฟล์ PDF เช่น การสกัดและรวมหน้าต่าง PDF, รายงานอัตโนมัติจากฐานข้อมูล, การใส่น้ำลายน้ำและตราประทับ, การสร้างใบรับรองและปริญญาบัตร, การฝังฟอนต์เพื่อการเก็บถาวร, การแก้ไขเมตาดาต้า และอื่น ๆ อีกมากมาย.

PDFio มุ่งเน้นที่การทำงาน I/O ที่สำคัญ ทำให้เหมาะสำหรับแอปพลิเคชันที่ต้องการดึงข้อมูลจากไฟล์ PDF หรือสร้างไฟล์ใหม่โดยไม่ต้องรับภาระจากไลบรารีที่ซับซ้อนมากขึ้น ไลบรารีนี้สนับสนุนฟีเจอร์การแปลงที่ทรงพลังและช่วยให้นักพัฒนาซอฟต์แวร์สามารถแปลง markdown เป็น PDF, รูปภาพเป็น PDF, HTML เป็น PDF รวมถึงการสร้างบาร์โค้ดใน PDF ภายในแอปพลิเคชัน C การเน้นที่ฟังก์ชันหลักโดยไม่มีภาระการเรนเดอร์ทำให้เหมาะสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์, เครื่องมือบรรทัดคำสั่ง, และระบบฝังตัวที่ต้องการสร้างหรือประมวลผล PDF โดยไม่ต้องแสดงผลภาพ ไม่ว่าคุณจะสร้างระบบจัดการเอกสาร, สร้างเครื่องมือสร้างรายงานอัตโนมัติ, หรือพัฒนาเครื่องมือวิเคราะห์ PDF, PDFio ให้ฟังก์ชันที่จำเป็นสำหรับการจัดการ PDF ระดับมืออาชีพในแอปพลิเคชัน C

Previous Next

เริ่มต้นใช้งาน 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

การแปลงภาพเป็นรูปแบบ 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 จากตัวอย่างแรกเป็นตัวอย่างที่ดีของโมเดลแบบสตรีมนี้ มันอ่านสตรีมเนื้อหาของหน้าอย่างต่อเนื่องและส่งเหตุการณ์ (เช่น callback ข้อความของเรา) ไปพร้อมกัน

 ไทย