Aspose.PDF FOSS for C++ Tính năng
Aspose.PDF FOSS cho C++ Tính năng
Aspose.PDF FOSS cho C++ là một thư viện C++20 để tạo, mở, sửa đổi và lưu tài liệu PDF. Trang này tổng quan các khu vực năng lực chính và các lớp đóng vai trò là điểm vào của chúng. Mỗi khu vực được trình bày chi tiết trên trang hướng dẫn dành cho nhà phát triển riêng.
Quản lý Tài liệu
Aspose::Pdf::Document là đối tượng gốc cho mọi thao tác. Nó mở một tệp hiện có từ đường dẫn, cung cấp bộ sưu tập trang qua Pages(), và lưu các thay đổi bằng Save(). Optimize() và OptimizeResources() giảm kích thước tệp bằng cách loại bỏ các tài nguyên không dùng hoặc trùng lặp.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& pages = doc.Pages();
pages.Add(); // append a blank page
pages.Delete(1); // remove the original first page
doc.Optimize();
doc.Save("output.pdf");
}Trích xuất Văn bản
Aspose::Pdf::Text::TextAbsorber duyệt qua một tài liệu hoặc một trang duy nhất và thu thập văn bản thuần, được lấy bằng Text() sau khi gọi Visit(). TextFragmentAbsorber thực hiện cùng một quá trình duyệt nhưng trả về các đối tượng TextFragment riêng lẻ qua TextFragments(), cung cấp quyền truy cập vào vị trí và trạng thái văn bản của từng đoạn.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_absorber.hpp>
#include <iostream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Text::TextAbsorber absorber;
absorber.Visit(doc);
std::cout << absorber.Text() << "\n";
}Kết xuất sang Hình ảnh Raster
Các thiết bị hiển thị trang chuyển đổi một Page thành hình ảnh raster. BmpDevice, PngDevice, JpegDevice và TiffDevice chia sẻ cùng chữ ký Process(page, output) và được xây dựng bằng một Resolution đặt DPI đầu ra.
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/bmp_device.hpp>
#include <aspose/pdf/resolution.hpp>
#include <fstream>
int main() {
Aspose::Pdf::Document doc("report.pdf");
Aspose::Pdf::Devices::BmpDevice device(Aspose::Pdf::Devices::Resolution(150));
std::ofstream out("page1.bmp", std::ios::binary);
device.Process(doc.Pages()[1], out);
}Mã hoá
Document::Encrypt() bảo vệ tài liệu bằng mật khẩu người dùng (cần để mở) và mật khẩu chủ sở hữu (cần để thay đổi quyền), sử dụng thuật toán được chọn từ enum CryptoAlgorithm: RC4x40, RC4x128, AESx128, hoặc AESx256. IsEncrypted() báo cáo trạng thái hiện tại và Decrypt() loại bỏ bảo vệ khỏi tài liệu đã mở.
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
doc.Encrypt("user-password", "owner-password",
Aspose::Pdf::Permissions::PrintDocument,
Aspose::Pdf::CryptoAlgorithm::AESx256);
doc.Save("encrypted.pdf");
}Chú thích
Chú thích gắn các ghi chú, hình dạng và đánh dấu có thể nhìn thấy vào một trang. Mỗi loại chú thích kế thừa từ Annotation và được xây dựng với mục tiêu Page và một vị trí Rectangle, sau đó được thêm vào trang thông qua Chú thích() (một AnnotationCollection).
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(
page, Aspose::Pdf::Rectangle(50.0, 700.0, 250.0, 740.0, false));
note.Contents("Reviewed and approved.");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Forms
Các trường AcroForm được quản lý qua Aspose::Pdf::Forms::Form, có thể truy cập qua Document::Form(). Các loại trường như TextBoxField được xây dựng giống như chú thích — với một Page và một Rectangle — và được đăng ký với Form::Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/text_box_field.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto page = doc.Pages()[1];
Aspose::Pdf::Forms::TextBoxField field(
page, Aspose::Pdf::Rectangle(100.0, 650.0, 300.0, 670.0, false));
field.PartialName("customer_name");
field.Value("Jane Doe");
doc.Form().Add(field);
doc.Save("form_filled.pdf");
}Mẹo và Thực hành tốt nhất
- Mở các tệp đầu vào bằng đường dẫn với hàm tạo
Document; gọiSave()với một đường dẫn đầu ra rõ ràng thay vì ghi đè lên nguồn trong khi các trình xử lý khác đối với nó có thể vẫn đang mở. - Gọi
Optimize()trướcSave()khi một tài liệu đã được chỉnh sửa mạnh — nó loại bỏ các tài nguyên mà không còn được bất kỳ trang nào tham chiếu. - Tạo các thiết bị raster (
BmpDevice,PngDevice,JpegDevice,TiffDevice) một lần cho mỗi độ phân giải và tái sử dụng chúng trên các trang thay vì tạo lại một thiết bị cho mỗi trang. - Đặt cả mật khẩu người dùng và mật khẩu chủ sở hữu khi gọi
Encrypt()— mật khẩu người dùng trống cho phép bất kỳ người xem nào mở tệp, trong khi mật khẩu chủ sở hữu kiểm soát việc thay đổi quyền. - Giữ các đối tượng chú thích và trường (
TextAnnotation,TextBoxField, và các tương tự) tồn tại cho đến khiSave()trả về, vì tài liệu giữ các tham chiếu tới nội dung trang mà chúng đã được thêm vào.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Cách khắc phục |
|---|---|---|
Save() tạo ra một tệp với nội dung không thay đổi | Các chỉnh sửa đã được thực hiện trên bản sao của trang hoặc chú thích thay vì đối tượng nhận được từ doc.Pages() | Sửa đổi đối tượng được trả về trực tiếp bởi Pages(), Annotations() hoặc Form() |
| Hình ảnh được render trống hoặc trắng | Chỉ số trang sai được truyền tới Process() | PageCollection được đánh số bắt đầu từ 1 — trang 1 là doc.Pages()[1], không phải [0] |
Encrypt() tạo ra một tệp vẫn mở được mà không cần mật khẩu | Mật khẩu người dùng để trống | Cung cấp một chuỗi không rỗng làm đối số userPassword |
| Văn bản đã trích xuất rỗng đối với PDF đã quét | Trang chỉ chứa nội dung hình ảnh raster, không có các toán tử văn bản | TextAbsorber đọc các toán tử văn bản; các trang chỉ có hình ảnh không có gì để trích xuất |
Trường được thêm bằng Form::Add() không hiển thị trên trang | Trường Rectangle nằm ngoài MediaBox của trang | Xác nhận các tọa độ hình chữ nhật nằm trong giới hạn Page::MediaBox() |
FAQ
Liệu Aspose.PDF FOSS cho C++ có phụ thuộc vào bất kỳ thư viện PDF thương mại nào không?
Không. Đây là một triển khai C++20 từ đầu, không phụ thuộc vào bất kỳ stack PDF thương mại nào, được phát hành dưới giấy phép MIT.
Tôi có thể tạo một PDF mới từ đầu thay vì mở một PDF đã tồn tại không?
Có. Document có một hàm khởi tạo mặc định tạo một tài liệu trống; gọi Pages().Add() để thêm các trang trước khi lưu.
Tôi có thể render sang các định dạng raster nào?
BmpDevice, PngDevice, JpegDevice, và TiffDevice render các trang riêng lẻ sang BMP, PNG, JPEG và TIFF tương ứng.
Các thuật toán mã hóa nào được hỗ trợ?
CryptoAlgorithm cung cấp RC4x40, RC4x128, AESx128 và AESx256, được truyền cho Document::Encrypt().
Tôi nên đi tiếp ở đâu?
Hướng dẫn dành cho nhà phát triển bao gồm các trang chuyên biệt cho quản lý tài liệu và trang, đồ họa và hình dạng PDF-native, chú thích và biểu mẫu tương tác, và các lớp facade cấp cao hơn mà bao bọc các thao tác tệp chung.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
Document | Đối tượng gốc — mở, tạo, lưu và tối ưu hóa một PDF |
Document.Pages() | Trả về PageCollection của tài liệu |
Document.Encrypt() / Decrypt() | Bảo vệ bằng mật khẩu hoặc gỡ bảo vệ khỏi tài liệu |
Document.Form() | Trả về container AcroForm của tài liệu |
TextAbsorber | Trích xuất văn bản thuần từ tài liệu hoặc trang |
TextFragmentAbsorber | Trích xuất các đoạn văn bản được định vị |
BmpDevice / PngDevice / JpegDevice / TiffDevice | Kết xuất một trang sang định dạng ảnh raster |
Resolution | DPI đầu ra được truyền tới thiết bị kết xuất |
CryptoAlgorithm | Lựa chọn thuật toán mã hoá: RC4 hoặc AES, 40–256 bit |
Permissions | Cờ kiểm soát truy cập được truyền tới Encrypt() |
Annotation / AnnotationCollection | Kiểu cơ bản và bộ chứa cho chú thích trang |
TextAnnotation | Chú thích ghi chú văn bản |
Form | AcroForm bộ chứa trường được truy cập qua Document.Form() |
TextBoxField | Trường biểu mẫu văn bản đơn dòng/đa dòng |