نحوه کار با فیلدهای AcroForm در TypeScript

نحوه کار با فیلدهای 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 }) همان چیزی است که باعث می‌شود دکمه هنگام کلیک کاری انجام دهد؛ بدون آن دکمه نمایش داده می‌شود اما هیچ رفتار متصلی ندارد.

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

 فارسی