مقدمه
Aspose.PDF FOSS برای TypeScript یک کتابخانه جدید منبع باز برای کار با اسناد PDF از کد Node.js است. این کتابخانه تحت مجوز MIT منتشر شده و به صورت بسته @asposefoss/pdf عرضه میشود و فقط نیاز به Node.js (>=22) در زمان اجرا دارد — هیچ وابستگی زمان اجرا دیگری وجود ندارد.
کتابخانه بر اساس کلاسهای Document و Page سازماندهی شده است. Document.OpenFile() و Document.Open() یک PDF را از دیسک یا بایتهای در-حافظه بارگذاری میکنند، و Document.New() یک سند خالی را آغاز میکند؛ هر صفحه در doc.Pages روشهایی برای افزودن متن، تصویر، حاشیهنویسی و فیلدهای AcroForm ارائه میدهد، همچنین امکان تبدیل خود به فرمتهای دیگر را دارد. از اینجا، API شامل تقسیم، ادغام و بازترتیب صفحات، تبدیل اسناد به HTML، Markdown، DOCX، SVG و تصاویر رستری، افزودن و صافکردن حاشیهنویسیها، ساخت فرمهای تعاملی و رمزگذاری، امضای یا محرمانهسازی نتیجه میشود.
این نسخه برای توسعهدهندگانی است که به پردازش PDF در داخل یک کدبیس Node.js یا TypeScript بدون نیاز به لایسنس تجاری نیاز دارند: خطوط لوله ترکیب اسناد، ابزارهای انتشار که PDFها را به فرمتهای آماده برای وب تبدیل میکنند، خودکارسازی پر کردن فرمها، و سرویسهایی که نیاز به محرمانهسازی یا رمزگذاری PDFهای حساس قبل از توزیع دارند. پروژه در حال حاضر در نسخهٔ 0.1.0 است و تحت توسعه فعال در مرحلهٔ اولیه میباشد، بنابراین APIها و پوشش ویژگیها ممکن است پیش از انتشار یک نسخهٔ پایدار تغییر کنند.
چه چیزی شامل میشود
مدیریت سند و صفحه
Document.OpenFile() / Document.Open() یک PDF را از دیسک یا یک Uint8Array در-حافظه بارگذاری میکنند؛ Document.New() یک سند خالی را آغاز میکند. صفحات میتوانند با Document.Split() به اسناد جداگانه تقسیم شوند، با Document.ExtractPages() استخراج شوند، با Document.Merge() ادغام شوند یا با Document.Append() به یک سند موجود افزوده شوند. Document.WriteTo() نتیجه را دوباره مینویسد، بهصورت اختیاری فشرده شده.
import { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
تبدیل قالب
کل اسناد به HTML با Document.ToHtml() رندر میشوند و به Markdown با طعم GitHub با Document.ToMarkdown(). صفحات فردی به SVG مستقل با Page.ToSvg() یا بایتهای PNG رستر با Page.ToImage() رندر میشوند. Document.ToDocx() / Page.ToDocx() خروجی .docx بازچینیشده یا با طرح ثابت تولید میکنند.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
حاشیهنویسیها
هر Page متدهای حاشیهنویسی را بهصورت مستقیم افشا میکند: Page.AddHighlight()، Page.AddUnderline()، Page.AddSquiggly() و Page.AddStrikeOut() علامتگذاری متن را اضافه میکنند؛ Page.AddTextNote()، Page.AddFreeText() و Page.AddStamp() یادداشتهای چسبدار، متنهای مستقل و حاشیهنویسیهای تمبر لاستیکی را اضافه میکنند. زیرنوعهای تایپشده مانند MarkupAnnotation و StampAnnotation متد Flatten() را افشا میکنند تا حاشیهنویسی را در محتوای صفحه ترکیب کنند.
AcroForms
کلاس Form فیلدهای تعاملی را بهصورت مستقیم میسازد: AddTextField()، AddCheckbox()، AddRadioGroup()، AddComboBox()، AddListBox() و AddPushButton() هرکدام یک زیرکلاس Field تایپشده را برمیگردانند. فراخوانی SetStyle() یا GenerateAppearance() روی یک فیلد ظاهر رندر شده آن را تازه میکند، و Document.FlattenForm() مقدار فعلی هر فیلد را در محتوای صفحهٔ ثابت ترکیب میکند.
function addFormFields(doc: Document, page: Page): void {
const form = doc.Form;
const pageNum = page.Number;
// Text field
form.AddTextField({
page: pageNum, rect: [200, 670, 450, 690], name: 'FullName', value: 'Alice Sample',
});
// Checkbox
form.AddCheckbox({
page: pageNum, rect: [200, 630, 218, 648], name: 'Subscribe',
checked: true,
});
}
امنیت و حذف محرمانه
Document.WriteTo() یک گزینهٔ encrypt را میپذیرد که از AES-128، AES-256 یا RC4 پشتیبانی میکند، با رمز عبور جداگانه برای کاربر و مالک و Permissions دقیق. نواحی حساس یا متنهای مطابقتیافته میتوانند بهصورت دائم با Document.Redact()، Document.RedactText() و Page.ApplyRedactions() حذف شوند، که از طریق RedactOptions پیکربندی میشوند.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
doc.WriteTo('locked.pdf', {
encrypt: {
userPassword: 'open-me', // required to open (default '')
ownerPassword: 'full-rights', // default: same as userPassword
algorithm: 'aes256', // 'aes256' (default) | 'aes128' | 'rc4'
permissions: { copying: false, modifying: false },
encryptMetadata: true,
},
});
شروع سریع
پکیج را نصب کنید، سپس یک PDF موجود را باز کنید، صفحات و متادیتای آن را ویرایش کنید و نتیجه را ذخیره کنید:
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildimport { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Metadata
doc.SetMetadata({ title: 'Report', author: 'Jane', custom: { Dept: 'R&D' } });
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
doc.WriteTo('small.pdf', { compressed: true }); // xref stream + object streams
فرمتهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
منبع باز و مجوزدهی
Aspose.PDF FOSS برای TypeScript تحت مجوز MIT منتشر شده است، با منبع منتشر شده در GitHub. هیچ واترمارک ارزیابی، محدودیت استفاده یا فایل مجوز جداگانهای برای مدیریت وجود ندارد و میتوان از کتابخانه در محصولات تجاری بدون حق امتیاز استفاده کرد.
پکیج در حال حاضر در نسخه 0.1.0 است که نشاندهنده توسعه فعال در مرحله اولیه میباشد. Node.js (>=22) تنها نیازمندی زمان اجرا است و این پکیج هیچ وابستگی ثالث دیگری ندارد.