Aspose.PDF FOSS for C++ ویژگی‌ها

Aspose.PDF FOSS for C++ ویژگی‌ها

Aspose.PDF FOSS برای C++ ویژگی‌ها

Aspose.PDF FOSS برای C++ یک کتابخانه C++20 برای ایجاد، باز کردن، تغییر و ذخیره اسناد PDF است. این صفحه به بررسی حوزه‌های اصلی قابلیت‌ها و کلاس‌هایی که به عنوان نقطه ورودی آن‌ها عمل می‌کنند می‌پردازد. هر حوزه به طور جامع در صفحه راهنمای توسعه‌دهنده مخصوص به خود پوشش داده شده است.


مدیریت سند

Aspose::Pdf::Document شیء ریشه برای هر عملیات است. این شیء یک فایل موجود را از مسیر باز می‌کند، مجموعه صفحات را از طریق Pages() در دسترس می‌گذارد و تغییرات را با Save() ذخیره می‌کند. Optimize() و OptimizeResources() با حذف منابع استفاده نشده یا تکراری، اندازه فایل را کاهش می‌دهند.

#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");
}

استخراج متن

Aspose::Pdf::Text::TextAbsorber یک سند یا یک صفحه واحد را پیمایش می‌کند و متن ساده را جمع‌آوری می‌نماید، که پس از فراخوانی Visit() با Text() بازیابی می‌شود. TextFragmentAbsorber همان پیمایش را انجام می‌دهد اما اشیای TextFragment جداگانه را از طریق TextFragments() برمی‌گرداند، و دسترسی به موقعیت و وضعیت متنی هر بخش را فراهم می‌کند.

#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";
}

رندر به تصاویر رستر

دستگاه‌های رندر صفحه، یک Page را به یک تصویر رستر تبدیل می‌کنند. BmpDevice، PngDevice، JpegDevice و TiffDevice امضای Process(page, output) یکسانی دارند و با یک Resolution که DPI خروجی را تنظیم می‌کند، ساخته می‌شوند.

#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);
}

رمزنگاری

Document::Encrypt() یک سند را با رمز عبور کاربر (برای باز کردن نیاز است) و رمز عبور مالک (برای تغییر مجوزها نیاز است) محافظت می‌کند، با استفاده از الگوریتمی که از enum CryptoAlgorithm انتخاب می‌شود: RC4x40، RC4x128، AESx128 یا AESx256. IsEncrypted() وضعیت فعلی را گزارش می‌دهد و Decrypt() حفاظت را از سندی که قبلاً باز شده است حذف می‌کند.

#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");
}

حاشیه‌نویسی‌ها

حاشیه‌نویسی‌ها یادداشت‌ها، شکل‌ها و علامت‌گذاری‌های قابل مشاهده را به یک صفحه متصل می‌کنند. هر نوع حاشیه‌نویسی از Annotation مشتق می‌شود و با هدف Page و یک Rectangle مکان‌یابی ساخته می‌شود، سپس از طریق Annotations() (یک 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

فیلدهای AcroForm از طریق Aspose::Pdf::Forms::Form مدیریت می‌شوند که از طریق Document::Form() قابل دسترسی است. انواع فیلد مانند TextBoxField همانند حاشیه‌نویسی‌ها ساخته می‌شوند — با یک Page و یک Rectangle — و با 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");
}

نکات و بهترین شیوه‌ها

  • فایل‌های ورودی را با مسیر با سازنده Document باز کنید؛ به جای بازنویسی منبع در حالی که دستگیره‌های دیگر ممکن است هنوز باز باشند، Save() را با مسیر خروجی صریح فراخوانی کنید.
  • هنگامی که سند به‌طور گسترده ویرایش شده است، Optimize() را قبل از Save() فراخوانی کنید — این کار منابعی را که دیگر توسط هیچ صفحه‌ای ارجاع داده نمی‌شوند، حذف می‌کند.
  • دستگاه‌های رستر (BmpDevice، PngDevice، JpegDevice، TiffDevice) را برای هر وضوح یک بار بسازید و در سراسر صفحات دوباره استفاده کنید به جای اینکه برای هر صفحه یک دستگاه جدید ایجاد کنید.
  • هنگام فراخوانی Encrypt()، هر دو رمز عبور کاربر و رمز عبور مالک را تنظیم کنید — رمز عبور کاربر خالی به هر بیننده اجازه می‌دهد فایل را باز کند، در حالی که رمز عبور مالک تغییرات مجوزها را کنترل می‌کند.
  • شیءهای حاشیه‌نویسی و فیلد (TextAnnotation، TextBoxField و مشابه آن‌ها) را تا پس از بازگشت Save() زنده نگه دارید، زیرا سند ارجاعاتی به محتوای صفحه‌ای که به آن‌ها اضافه شده‌اند، دارد.

مشکلات رایج

مشکلدلیلراه‌حل
Save() فایلی با محتوای بدون تغییر تولید می‌کندویرایش‌ها روی یک صفحه یا کپی حاشیه‌نویسی انجام شد نه شیء به‌دست آمده از doc.Pages()شیء بازگردانده شده مستقیم توسط Pages()، Annotations() یا Form() را تغییر دهید
تصویر رندر شده خالی یا سفید استاندیس صفحهٔ نادرست به Process() پاس داده شدPageCollection به صورت ۱-مبنا است — صفحهٔ ۱ برابر است با doc.Pages()[1]، نه [0]
Encrypt() فایلی تولید می‌کند که همچنان بدون رمز عبور باز می‌شودرمز عبور کاربر خالی رها شده استیک رشتهٔ غیر خالی را به‌عنوان آرگومان userPassword پاس دهید
متن استخراج‌شده برای PDF اسکن‌شده خالی استصفحه فقط شامل محتوای تصویر رستری است و شامل عملگرهای متنی نیستTextAbsorber عملگرهای متنی را می‌خواند؛ صفحات فقط تصویری هیچ‌کدام برای استخراج ندارند
فیلدی که با Form::Add() اضافه شده است بر روی صفحه ظاهر نمی‌شودمقدار Rectangle فیلد خارج از MediaBox صفحه استاطمینان حاصل کنید که مختصات مستطیل در محدوده Page::MediaBox() قرار دارند

FAQ

آیا Aspose.PDF FOSS برای C++ بر هیچ کتابخانه تجاری PDF وابسته است؟

خیر. این یک پیاده‌سازی از ابتدا با C++20 است که هیچ وابستگی به هیچ استک تجاری PDF ندارد و تحت مجوز MIT منتشر شده است.

آیا می‌توانم یک PDF جدید از ابتدا ایجاد کنم به جای باز کردن یک PDF موجود؟

بله. Document دارای سازنده پیش‌فرضی است که یک سند خالی ایجاد می‌کند؛ برای افزودن صفحات قبل از ذخیره‌سازی، Pages().Add() را فراخوانی کنید.

به کدام فرمت‌های رستر می‌توانم رندر کنم؟

BmpDevice، PngDevice، JpegDevice و TiffDevice به ترتیب صفحات فردی را به BMP، PNG، JPEG و TIFF رندر می‌کنند.

کدام الگوریتم‌های رمزنگاری پشتیبانی می‌شوند؟

CryptoAlgorithm RC4x40، RC4x128، AESx128 و AESx256 را ارائه می‌دهد که به Document::Encrypt() پاس داده می‌شود.

بعد چه کاری باید انجام دهم?

راهنمای توسعه‌دهنده شامل صفحات اختصاصی برای مدیریت سند و صفحه، گرافیک‌ها و اشکال بومی PDF، حاشیه‌نویسی‌ها و فرم‌های تعاملی، و کلاس‌های سطح بالای facade که عملیات رایج فایل را می‌پیچند.


API Reference خلاصه

کلاس/متدتوضیح
Documentشیء ریشه — باز کردن، ایجاد، ذخیره و بهینه‌سازی یک PDF
Document.Pages()مقدار PageCollection سند را برمی‌گرداند
Document.Encrypt() / Decrypt()سند را با رمز عبور محافظت کنید یا محافظت آن را حذف کنید
Document.Form()کانتینر AcroForm سند را برمی‌گرداند
TextAbsorberمتن ساده را از یک سند یا صفحه استخراج می‌کند
TextFragmentAbsorberقطعات متن موقعیت‌یافته را استخراج می‌کند
BmpDevice / PngDevice / JpegDevice / TiffDeviceصفحه را به قالب تصویر رستر رندر می‌کند
ResolutionDPI خروجی که به دستگاه رندرینگ منتقل می‌شود
CryptoAlgorithmانتخاب الگوریتم رمزنگاری: RC4 یا AES، 40–256 بیت
Permissionsپرچم‌های کنترل دسترسی که به Encrypt() ارسال می‌شوند
Annotation / AnnotationCollectionنوع پایه و مخزن برای حاشیه‌نویسی‌های صفحه
TextAnnotationحاشیه‌نویسی یادداشت متنی
Formمخزن فیلد AcroForm که از طریق Document.Form() دسترسی می‌شود
TextBoxFieldفیلد فرم متنی تک‌خطی/چندخطی

همچنین ببینید:

 فارسی