Aspose.PDF FOSS for C++ Tính năng

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ọi Save() 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ước Save() 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 khi Save() 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ânCách khắc phục
Save() tạo ra một tệp với nội dung không thay đổiCá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ắngChỉ 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ẩuMật khẩu người dùng để trốngCung 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étTrang chỉ chứa nội dung hình ảnh raster, không có các toán tử văn bảnTextAbsorber đọ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 trangTrường Rectangle nằm ngoài MediaBox của trangXá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ứcMô 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
TextAbsorberTrích xuất văn bản thuần từ tài liệu hoặc trang
TextFragmentAbsorberTrích xuất các đoạn văn bản được định vị
BmpDevice / PngDevice / JpegDevice / TiffDeviceKết xuất một trang sang định dạng ảnh raster
ResolutionDPI đầu ra được truyền tới thiết bị kết xuất
CryptoAlgorithmLựa chọn thuật toán mã hoá: RC4 hoặc AES, 40–256 bit
PermissionsCờ kiểm soát truy cập được truyền tới Encrypt()
Annotation / AnnotationCollectionKiểu cơ bản và bộ chứa cho chú thích trang
TextAnnotationChú thích ghi chú văn bản
FormAcroForm bộ chứa trường được truy cập qua Document.Form()
TextBoxFieldTrường biểu mẫu văn bản đơn dòng/đa dòng

Xem thêm

 Tiếng Việt