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 | صفحه را به قالب تصویر رستر رندر میکند |
Resolution | DPI خروجی که به دستگاه رندرینگ منتقل میشود |
CryptoAlgorithm | انتخاب الگوریتم رمزنگاری: RC4 یا AES، 40–256 بیت |
Permissions | پرچمهای کنترل دسترسی که به Encrypt() ارسال میشوند |
Annotation / AnnotationCollection | نوع پایه و مخزن برای حاشیهنویسیهای صفحه |
TextAnnotation | حاشیهنویسی یادداشت متنی |
Form | مخزن فیلد AcroForm که از طریق Document.Form() دسترسی میشود |
TextBoxField | فیلد فرم متنی تکخطی/چندخطی |