نحوه کار با فیلدهای AcroForm در TypeScript
این راهنما نشان میدهد چگونه فیلدهای AcroForm را با Aspose.PDF FOSS برای TypeScript اضافه و مسطح کنید. Document.Form برای هر نوع فیلد — متن، چکباکس، گروه رادیویی، جعبه ترکیبی، جعبه لیست و دکمه فشاردهی — یک متد Add* ارائه میدهد که هر یک یک هندل فیلد تایپشده برمیگرداند. این ابزار به Node.js 22 یا بالاتر نیاز دارد.
راهنمای گام به گام
مرحله ۱: نصب بسته
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildنصب را با وارد کردن کلاس Document در یک فایل TypeScript جدید تأیید کنید — این خط باید پس از نصب بسته بدون خطا حل شود:
import { Document } from '@asposefoss/pdf';مرحله ۲: وارد کردن کلاسهای مورد نیاز
برای باز کردن فایل، Document را وارد کنید و به doc.Form برسید، نقطهٔ ورود برای هر روش فیلد استفاده شده در ادامه:
import { Document } from '@asposefoss/pdf';مرحله ۳: افزودن یک فیلد متن و چکباکس
Form.AddTextField(init) و Form.AddCheckbox(init) هر دو یک عدد page، یک rect، یک name منحصر به فرد، و گزینههای استایلینگ میگیرند:
const doc = Document.OpenFile('form-template.pdf');
const form = doc.Form;
const pageNum = doc.Pages[0].Number;
form.AddTextField({
page: pageNum, rect: [200, 670, 450, 690], name: 'FullName', value: 'Alice Sample',
borderColor: [0.1, 0.15, 0.4], font: 'Helvetica', fontSize: 12,
});
form.AddCheckbox({
page: pageNum, rect: [200, 630, 218, 648], name: 'Subscribe',
checked: true, borderColor: [0.1, 0.15, 0.4],
});مرحله ۴: افزودن یک گروه رادیویی، جعبه ترکیبی و جعبه فهرست
Form.AddRadioGroup(init) یک name تک را میگیرد که توسط هر گزینه در آرایهٔ options آن به اشتراک گذاشته میشود، بهطوریکه هر کدام مقدار rect و export خود را دارند. Form.AddComboBox(init) و Form.AddListBox(init) یک آرایهٔ options از جفتهای { export, display } میپذیرند؛ جعبههای فهرست علاوه بر این از multiSelect پشتیبانی میکنند:
form.AddRadioGroup({
name: 'Plan', selected: 'Pro',
options: [
{ page: pageNum, rect: [200, 590, 218, 608], export: 'Basic' },
{ page: pageNum, rect: [290, 590, 308, 608], export: 'Pro' },
],
});
form.AddComboBox({
page: pageNum, rect: [200, 550, 350, 570], name: 'Country', value: 'US',
options: [
{ export: 'US', display: 'United States' },
{ export: 'UK', display: 'United Kingdom' },
],
});
form.AddListBox({
page: pageNum, rect: [200, 410, 350, 510], name: 'Interests',
multiSelect: true, value: ['pdf'],
options: [
{ export: 'pdf', display: 'PDF Engineering' },
{ export: 'crypto', display: 'Cryptography' },
],
});مرحله ۵: افزودن یک دکمه فشاری
Form.AddPushButton(init) یک caption و یک action میگیرد که توصیف میکند دکمه هنگام کلیک چه کاری انجام میدهد — برای مثال، ارسال دادههای فرم به یک URL:
form.AddPushButton({
page: pageNum, rect: [200, 320, 320, 388], name: 'Submit',
caption: 'Submit',
action: { type: 'submit', url: 'https://example.com/submit', format: 'fdf' },
});مرحله ۶: صافسازی فیلدهای فرم
هر دستگیره فیلدی که توسط یک فراخوانی Add* برگردانده میشود، دارای متد Flatten() است که مقدار فعلی آن را در جریان محتوای صفحه میپزد و آن را از AcroForm تعاملی حذف میکند:
const tb = form.AddTextField({
page: pageNum, rect: [210, 660, 460, 680], name: 'FlattenName', value: 'Alice Sample',
});
tb.Flatten(); // -> number; bakes the value, unwires the field from /AcroForm
doc.WriteTo('flattened.pdf');مشکلات رایج و راهحلها
یک فیلد در صفحهٔ مورد نظر ظاهر نمیشود. page در فیلدِ init شیء شماره صفحهٔ خود آن صفحه است، نه یک شاخص آرایه — آن را در مقابل page.Number در هدف Page.
گزینههای دکمه رادیویی بهطور متقابل انحصاری نیستند. هر گزینه در Form.AddRadioGroup()’s options آرایه باید تکتک عنصر گروه را بهاشتراک بگذارد. name — ترکیب نامهای فیلد باعث ایجاد چکباکسهای مستقل میشود به جای یک گروه رادیویی.
مقدار فیلد مسطح در فایل ذخیرهشده ظاهر نمیشود. سند را ذخیره کنید (doc.WriteTo() / doc.Save()) Flatten() — تغییر فقط در حافظه وجود دارد تا زمانی که فایل دوباره نوشته شود.
یک جعبهٔ ترکیبی مقدار خروجی را به جای متن نمایش نشان میدهد. ظاهر را میکشد display; مقدار ذخیرهشدهٔ فیلد (/V) export — تأیید کنید که هر دو برای هر گزینه تنظیم شدهاند، نه فقط یکی.
سؤالات متداول
آیا میتوانم مقدار فعلی یک فیلد را پس از پر شدن فرم بخوانم؟
بله — ویژگی Value دستگیره فیلد را بخوانید، یا doc.Form.Fields را پیمایش کنید تا هر فیلد در سند را بررسی کنید.
تفاوت Flatten() روی یک فیلد و روی یک حاشیهنویسی چیست؟
هر دو محتواهای تعاملی را داخل محتوای صفحهٔ ایستا میپزند و آن را از مجموعهٔ مربوطهاش حذف میکنند — یک فیلد Flatten() آن را حذف میکند /AcroForm، در حالی که یک حاشیهنویسی Flatten() (پوشش داده شده در یادداشتها راهنما) آن را از صفحهٔ /Annots.
آیا یک جعبهٔ فهرست میتواند چندین انتخاب را اجازه دهد؟
بله — multiSelect: true را بر روی شیء init مربوط به Form.AddListBox() تنظیم کنید و یک آرایه به value پاس دهید.
آیا یک دکمهٔ فشار برای مفید بودن به یک عمل نیاز دارد؟
یک action (به عنوان مثال { type: 'submit', url, format }) همان چیزی است که باعث میشود دکمه هنگام کلیک کاری انجام دهد؛ بدون آن دکمه نمایش داده میشود اما هیچ رفتار متصلی ندارد.