ไลบรารี 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
เริ่มต้นใช้งาน 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 ข้อความของเรา) ไปพร้อมกัน