Thư viện PDF C++ miễn phí để Đọc & Ghi các tệp PDF
Một thư viện PDF đơn giản, nguồn mở dựa trên C cho phép Đọc, Ghi và Thao tác các tài liệu PDF. Nó hỗ trợ chuyển đổi hình ảnh sang PDF, trích xuất nội dung, đọc PDF dựa trên luồng và nhiều hơn nữa, trong các ứng dụng C.
PDFio Library là gì?
PDFio là một thư viện C nhẹ, mã nguồn mở được thiết kế đặc biệt để đọc và ghi các tệp PDF mà không cần đến độ phức tạp của việc render hay xem. Được tạo bởi Michael R Sweet và cấp phép theo Apache License Version 2.0, thư viện này cung cấp cho các nhà phát triển một cách tiếp cận đơn giản trong việc thao tác PDF, tập trung vào việc tạo nội dung, trích xuất và chuyển đổi thay vì trình bày hình ảnh. Thư viện rất dễ sử dụng và cung cấp nhiều cách để xử lý các tệp PDF như trích xuất và hợp nhất trang PDF, tạo báo cáo tự động từ cơ sở dữ liệu, thêm watermark và dấu, tạo chứng chỉ và bằng cấp, nhúng phông chữ để lưu trữ, chỉnh sửa siêu dữ liệu và nhiều hơn nữa.
PDFio tập trung vào các thao tác I/O thiết yếu, khiến nó hoàn hảo cho các ứng dụng cần trích xuất dữ liệu từ PDF hoặc tạo PDF mới mà không có gánh nặng của các thư viện phức tạp hơn. Thư viện hỗ trợ các tính năng chuyển đổi mạnh mẽ và cho phép các nhà phát triển phần mềm chuyển markdown sang PDF, hình ảnh sang PDF, HTML sang PDF cũng như tạo mã vạch trong PDF trong các ứng dụng C. Việc tập trung vào chức năng cốt lõi mà không có chi phí của việc render khiến nó lý tưởng cho các ứng dụng phía máy chủ, công cụ dòng lệnh và hệ thống nhúng nơi cần tạo hoặc xử lý PDF mà không cần hiển thị hình ảnh. Dù bạn đang xây dựng hệ thống quản lý tài liệu, tạo trình tạo báo cáo tự động, hay phát triển công cụ phân tích PDF, PDFio cung cấp các chức năng thiết yếu cần thiết cho việc xử lý PDF chuyên nghiệp trong các ứng dụng C.
Bắt đầu với PDFio
Cách khuyến nghị để cài đặt PDFio là sử dụng NuGet. Vui lòng sử dụng lệnh sau để cài đặt suôn sẻ.
Cài đặt PDFio qua NuGet
Install-Package pdfio_native Cài đặt PDFio qua GitHub
git clone https://github.com/michaelrsweet/pdfio.git
Bạn cũng có thể cài đặt thủ công; tải xuống các tệp phát hành mới nhất trực tiếp từ kho GitHub.
Tạo PDF từ đầu bằng C
Thư viện mã nguồn mở PDFio đã bao gồm hỗ trợ đầy đủ cho việc tạo tài liệu PDF mới từ đầu trong các ứng dụng C. Việc tạo một tài liệu PDF mới cũng tương đối đơn giản và chỉ với một vài dòng mã C, các nhà phát triển phần mềm có thể thêm các trang mới, vẽ văn bản và các hình dạng đơn giản, thêm hình ảnh (định dạng JPEG, PNG), áp dụng màu sắc và biến đổi, xây dựng bảng và bố cục có cấu trúc và còn nhiều hơn nữa. Dưới đây là một ví dụ đơn giản minh họa cách tạo một tài liệu PDF mới với kích thước trang tùy chỉnh và nội dung bằng mã C.
Cách tạo một tài liệu PDF đơn giản với kích thước trang tùy chỉnh & nội dung qua Thư viện 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
Cách chuyển đổi một hình ảnh duy nhất thành PDF thông qua thư viện 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;
}
Đọc PDF & Trích xuất văn bản bằng Thư viện C
Một trong những nhiệm vụ phổ biến nhất là đọc và trích xuất văn bản từ tệp PDF. Thư viện mã nguồn mở PDFio làm cho quá trình này trở nên trực quan bằng cách cho phép các nhà phát triển duyệt qua các trang và luồng nội dung của chúng. Thư viện cung cấp hỗ trợ đầy đủ để trích xuất thông tin hữu ích từ các PDF hiện có, chẳng hạn như văn bản đơn giản, siêu dữ liệu, phông chữ nhúng, số, hình ảnh, nho, tên và hơn nữa. Ví dụ sau đây minh họa cách mở một PDF hiện có và trích xuất thông tin cơ bản từ nó bằng thư viện C.
Cách trích xuất văn bản đơn giản từ tệp PDF thông qua thư viện 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;
}
Đọc hiệu quả, dựa trên luồng
PDFio được thiết kế để tối ưu hiệu suất. Khi đọc, nó không tải toàn bộ tệp vào bộ nhớ cùng một lúc. Thay vào đó, nó sử dụng cách tiếp cận phân tích kéo, cho phép bạn xử lý tệp theo từng phần. Điều này rất quan trọng để xử lý các PDF rất lớn mà không làm cạn kiệt bộ nhớ hệ thống. Hàm pdfioPageParseContents từ ví dụ đầu tiên là một ví dụ điển hình của mô hình dựa trên luồng này. Nó đọc luồng nội dung của trang một cách tuần tự, phát ra các sự kiện (như callback văn bản của chúng tôi) khi tiến hành.