TypeScript में AcroForm फ़ील्ड्स के साथ कैसे काम करें
यह गाइड दिखाता है कि कैसे AcroForm फ़ील्ड्स को जोड़ें और सपाट करें Aspose.PDF FOSS के साथ TypeScript के लिए। Document.Form प्रत्येक फ़ील्ड प्रकार — टेक्स्ट, चेकबॉक्स, रेडियो ग्रुप, कॉम्बो बॉक्स, लिस्ट बॉक्स, और पुश बटन — के लिए एक Add* मेथड प्रदान करता है — प्रत्येक एक टाइप्ड फ़ील्ड हैंडल लौटाता है। इसे Node.js 22 या बाद का संस्करण चाहिए।
कदम-दर-कदम गाइड
चरण 1: पैकेज इंस्टॉल करें
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';चरण 2: आवश्यक क्लासेस इम्पोर्ट करें
फ़ाइल खोलने के लिए Document आयात करें और doc.Form तक पहुंचें, जो नीचे उपयोग किए गए प्रत्येक फ़ील्ड मेथड का प्रवेश बिंदु है:
import { Document } from '@asposefoss/pdf';चरण 3: एक टेक्स्ट फ़ील्ड और चेकबॉक्स जोड़ें
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],
});चरण 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' },
],
});चरण 5: एक पुश बटन जोड़ें
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' },
});चरण 6: फ़ॉर्म फ़ील्ड को फ्लैटन करें
एक 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()का options ऐरे को समूह की एकल name — फ़ील्ड नामों को मिलाने से रेडियो समूह के बजाय स्वतंत्र चेकबॉक्स बनते हैं।
फ़्लैटेंड फ़ील्ड का मान सहेजे गए फ़ाइल में दिखाई नहीं देता। दस्तावेज़ सहेजें (doc.WriteTo() / doc.Save()) कॉल करने के बाद Flatten() — बदलाव केवल मेमोरी में रहता है जब तक फ़ाइल फिर से लिखा नहीं जाता।
एक कॉम्बो बॉक्स निर्यात मान दिखाता है, न कि प्रदर्शित पाठ। दिखावट बनाती है display; फ़ील्ड का संग्रहीत मान (/V) है export — पुष्टि करें कि दोनों प्रत्येक विकल्प के लिए सेट हैं, केवल एक के लिए नहीं।
अक्सर पूछे जाने वाले प्रश्न
क्या मैं फ़ॉर्म भरने के बाद फ़ील्ड का वर्तमान मान पढ़ सकता हूँ?
हाँ — फ़ील्ड हैंडल की Value प्रॉपर्टी पढ़ें, या doc.Form.Fields को इटरेट करके दस्तावेज़ पर हर फ़ील्ड का निरीक्षण करें।
Flatten() का फ़ील्ड पर और एनोटेशन पर क्या अंतर है?
दोनों इंटरैक्टिव कंटेंट को स्थिर पेज कंटेंट में बेक करते हैं और इसे उसकी संबंधित कलेक्शन से हटा देते हैं — एक फ़ील्ड का Flatten() इसे हटाता है /AcroForm, जबकि एक एनोटेशन का Flatten() (जिसमें कवर किया गया है एनोटेशन गाइड) इसे पृष्ठ के /Annots.
क्या एक लिस्ट बॉक्स कई चयन की अनुमति दे सकता है?
हाँ — multiSelect: true को Form.AddListBox() के init ऑब्जेक्ट पर सेट करें और value को एक एरे पास करें।
क्या एक पुश बटन को उपयोगी होने के लिए एक एक्शन की आवश्यकता होती है?
एक action (उदाहरण के लिए { type: 'submit', url, format }) वह है जो बटन को क्लिक होने पर कुछ करने देता है; बिना इसके यह रेंडर तो होता है लेकिन कोई व्यवहार जुड़ा नहीं रहता।