TypeScript में PDF दस्तावेज़ को सुरक्षित और साइन कैसे करें
यह गाइड दर्शाता है कि Aspose.PDF FOSS का उपयोग करके TypeScript के लिए PDF दस्तावेज़ों को कैसे एन्क्रिप्ट, प्रमाणित, हस्ताक्षरित और सत्यापित किया जाए। Document.Save() और Document.Open() प्राप्तकर्ता प्रमाणपत्रों के लिए सार्वजनिक-की एन्क्रिप्शन को संभालते हैं, जबकि Document.Certify(), Document.Sign() और Document.VerifySignatures() PAdES-शैली के डिजिटल हस्ताक्षर को संभालते हैं। इसके लिए 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 आयात करें; नीचे के साइनिंग और एन्क्रिप्शन चरण साधारण विकल्प वस्तुओं को पास करते हैं, इसलिए आगे कोई आयात आवश्यक नहीं है:
import { Document } from '@asposefoss/pdf';चरण 3: प्राप्तकर्ता प्रमाणपत्रों के लिए दस्तावेज़ एन्क्रिप्ट करें
Document.Save() एक encrypt विकल्प स्वीकार करता है जिसमें एक या अधिक recipients होते हैं, प्रत्येक को प्रमाणपत्र (PEM स्ट्रिंग या DER बाइट्स), एक algorithm, और साझा permissions द्वारा पहचाना जाता है:
const doc = Document.OpenFile('report.pdf');
const bytes = doc.Save({
encrypt: {
recipients: [{ certificate: recipientCertPem }],
algorithm: 'aes256', // 'aes256' (default) | 'aes128' | 'rc4'
permissions: { copying: false }, // shared across all recipients
},
});चरण 4: एन्क्रिप्टेड दस्तावेज़ खोलें
एक recipient विकल्प Document.Open() को पास करें, जिसमें या तो मेल खाने वाला प्राइवेट की और प्रमाणपत्र हो, या एक PKCS#12 बंडल:
const opened = Document.Open(bytes, {
recipient: { privateKey, certificate: recipientCertPem },
// or: recipient: { pkcs12: p12Bytes, passphrase: '…' },
});
console.log(opened.Permissions); // recovered permission flags (not enforced)
चरण 5: दस्तावेज़ को प्रमाणित और साइन करें
Document.Certify() और Document.Sign() दोनों असिंक्रोनस हैं और एक पहचान (certificate + privateKey) के साथ-साथ विकल्प लेते हैं जो सिग्नेचर फ़ील्ड, दिखावट, और कारण का वर्णन करते हैं। प्रमाणन सबसे पहले, पूरी फ़ाइल पर होना चाहिए; आगे की स्वीकृति सिग्नेचर क्रमिक रूप से बाद में जोड़ी जाती हैं:
async function certifyAndSign(sourcePath: string, signaturePageIndex: number): Promise<void> {
const certifying = Document.OpenFile(sourcePath);
await certifying.Certify(
{ certificate: authorCert, privateKey: authorKey },
{
permissions: 'form-fill',
reason: 'Certifying the document',
fieldName: 'Certification',
appearance: { page: signaturePageIndex, rect: [400, 100, 550, 140] },
},
);
const certifiedBytes = certifying.Save();
const approving = Document.Open(certifiedBytes);
await approving.Sign(
{ certificate: approverCert, privateKey: approverKey },
{ reason: 'Approved for publication', fieldName: 'Approval', subFilter: 'PAdES' },
);
approving.WriteTo('signed.pdf');
}चरण 6: हस्ताक्षरों को सत्यापित करें
Document.VerifySignatures() असिंक्रोनस है और प्रत्येक सिग्नेचर फ़ील्ड के लिए एक SignatureReport लौटाता है, प्रत्येक क्रिप्टोग्राफ़िक integrity, signature वैधता की रिपोर्ट करता है, और क्या यह coversWholeFile है:
async function verify(path: string): Promise<void> {
const doc = Document.OpenFile(path);
const reports = await doc.VerifySignatures();
for (const r of reports) {
console.log(`${r.name}: integrity=${r.integrity} signature=${r.signature} `
+ `coversWholeFile=${r.coversWholeFile} docMDP=${r.docMDP}`);
}
}सामान्य समस्याएँ और समाधान
Document.Sign() / Document.Certify() थ्रो या हैंग। दोनों असिंक्रोनस हैं — await कॉल। भूलना await वापस किया गया प्रॉमिस अनसॉल्व्ड रहता है और लिखना साइनिंग पूरा होने से पहले हो जाता है।
बाद में मिलने वाला अनुमोदन सिग्नेचर प्रमाणन को अमान्य कर देता है। क्रमिक रूप से साइन करें: पहले प्रमाणित बाइट्स को सहेजें (certifying.Save()), उन्हें फिर से खोलें। Document.Open(), फिर कॉल करें Sign() उस पुनः खोले गए दस्तावेज़ पर — पूर्ण पुनर्लेखन लिखना, क्रमिक जोड़ के बजाय, प्रमाणन का /ByteRange डाइजेस्ट।
VerifySignatures() reports coversWholeFile: false पहले हस्ताक्षर के लिए लेकिन true अंतिम के लिए। यह certify-then-sign श्रृंखला के लिए अपेक्षित है: प्रमाणन को अनुमोदन जोड़ने से पहले हस्ताक्षर किया गया था, इसलिए केवल सबसे हालिया हस्ताक्षर का /ByteRange फ़ाइल के अंत तक विस्तारित होता है।
सही निजी कुंजी के साथ डिक्रिप्शन विफल हो जाता है। पुष्टि करें certificate को पास किया गया recipient सटीक प्रमाणपत्र से मेल खाता है, जिससे दस्तावेज़ को एन्क्रिप्ट किया गया था Document.Save()’s recipients सूची — नया कुंजी जोड़ी के साथ पुनः जारी किया गया प्रमाणपत्र पुरानी कुंजी के तहत एन्क्रिप्ट किए गए डेटा को डिक्रिप्ट नहीं करेगा।
अक्सर पूछे जाने वाले प्रश्न
क्या एक दस्तावेज़ को एक से अधिक प्राप्तकर्ताओं के लिए एन्क्रिप्ट किया जा सकता है?
हाँ — recipients Document.Save() के encrypt विकल्प में एक एरे स्वीकार करता है; किसी भी प्राप्तकर्ता की मेल खाने वाली प्राइवेट कुंजी परिणामी फ़ाइल को खोल सकती है।
Document.Sign() कौन सा हस्ताक्षर प्रारूप उत्पन्न करता है?
साइन विकल्पों में subFilter: 'PAdES' पास करने से एक PAdES-संगत हस्ताक्षर बनता है; इसे छोड़ने पर लाइब्रेरी का डिफ़ॉल्ट सिग्नेचर सबफ़िल्टर उपयोग होता है।
मैं यह कैसे जांचूँ कि कोई दस्तावेज़ प्रमाणित है या केवल हस्ताक्षरित?
Document.VerifySignatures() द्वारा लौटाए गए SignatureReport पर docMDP फ़ील्ड की जांच करें — एक प्रमाणन हस्ताक्षर DocMDP अनुमति निर्णय रिपोर्ट करता है; केवल अनुमोदन वाला हस्ताक्षर ऐसा नहीं करता।
क्या Document.Open() के बाद पुनः प्राप्त Permissions लाइब्रेरी द्वारा लागू किए जाते हैं?
नहीं — opened.Permissions निरीक्षण के लिए एन्क्रिप्टेड फ़ाइल में दर्ज अनुमति फ़्लैग्स की रिपोर्ट करता है; उन्हें किसी एप्लिकेशन में लागू करना कॉलर की ज़िम्मेदारी है।