PDFsharp गाइड: MigraDoc और PdfSharpCore का उपयोग करके PDF फ़ाइलें बनाएँ
PDFsharp एक ओपन सोर्स .NET लाइब्रेरी है जिसका उपयोग C# कोड से PDF दस्तावेज़ बनाने और संपादित करने के लिए किया जाता है। आप पृष्ठ पर टेक्स्ट, रेखाएँ और चित्र बनाते हैं, सेव बटन दबाते हैं, और आपके पास एक PDF फ़ाइल तैयार हो जाती है। इसमें किसी ब्राउज़र इंजन या नेटिव बाइनरी की आवश्यकता नहीं होती है। यह प्रोजेक्ट 2005 से चल रहा है, और आज भी .NET बैकएंड से आने वाले कई इनवॉइस, रिपोर्ट और प्रमाणपत्र इसी लाइब्रेरी के माध्यम से प्रोसेस होते हैं।
मैंने यह लेख उन डेवलपर्स के लिए लिखा है जिन्हें सर्वर पर PDF फ़ाइलों की आवश्यकता होती है और वे यह जानना चाहते हैं कि उन्हें क्या करना चाहिए। हम इसमें PDFsharp और MigraDoc के संयोजन, कौन सा बिल्ड इंस्टॉल करना है, पहली कार्यशील फ़ाइल, Linux पर फ़ॉन्ट संबंधी समस्याएँ, हाल ही में लाइसेंस में हुए बदलाव और वह बिंदु जहाँ आपको किसी अन्य सॉफ़्टवेयर का उपयोग करना चाहिए, इन सभी विषयों पर चर्चा करेंगे।
PDFsharp क्या है और यह क्या कर सकता है?
PDFsharp लाइब्रेरी के पीछे empira Software GmbH नाम की एक छोटी जर्मन कंपनी है, जिसने लगभग बीस वर्षों से इसे चलाए रखा है। आपका अधिकांश समय XGraphics नामक एक क्लास में व्यतीत होगा। यदि आपने कभी System.Drawing.Graphics का उपयोग करके WinForms में ग्राफिक्स बनाए हैं, तो आप दस मिनट के भीतर ही सहज महसूस करेंगे: फ़ॉन्ट, ब्रश, x और y, बस शुरू हो जाइए।
बॉक्स में आपको ये सब मिलेगा:
- टेक्स्ट, वेक्टर शेप, लाइन और इमेज का उपयोग करके शुरू से ही PDF डॉक्यूमेंट बनाएं
- मौजूदा PDF फ़ाइलें खोलें और उनके पृष्ठों में स्टैम्प, वॉटरमार्क या पृष्ठ संख्या जैसी सामग्री जोड़ें।
- एक फ़ाइल से पृष्ठों को दूसरी फ़ाइल में आयात करके दस्तावेज़ों को मर्ज और स्प्लिट करें।
- फ़ॉन्ट को एम्बेड और सबसेट करें ताकि फ़ाइल हर मशीन पर एक जैसी दिखे।
- बुकमार्क, लिंक और दस्तावेज़ मेटाडेटा जैसे शीर्षक, लेखक और कीवर्ड जोड़ें
- पासवर्ड और अनुमति चिह्नों का उपयोग करके फ़ाइलों को सुरक्षित रखें।
- दस्तावेजों पर डिजिटल रूप से हस्ताक्षर करें (6.2 रिलीज लाइन से)
डिप्लॉयमेंट बेहद आसान है, और मैं इसे तारीफ के तौर पर कह रहा हूँ। सब कुछ मैनेज्ड कोड है, इसलिए आपके ऑपरेशनल टीम को कभी भी किसी कंप्यूटर पर हेडलेस क्रोम इंस्टॉल करने या रात के 2 बजे घोस्टस्क्रिप्ट DLL ढूंढने की ज़रूरत नहीं पड़ेगी। आप बस एक NuGet पैकेज रेफरेंस करते हैं, पुश करते हैं, और काम हो जाता है।
अब असली बात पर आते हैं। आपको सिर्फ एक कैनवास मिलेगा, और कुछ नहीं। क्या कोई लंबा पैराग्राफ नीचे के मार्जिन तक पहुंच रहा है? यह आपकी समस्या है। क्या टेबल पहले पेज से आगे निकल रही है? यह भी आपकी समस्या है, जब तक आप माइग्राडॉक का इस्तेमाल नहीं करते।
PDFsharp और MigraDoc: आपको कौन सी लेयर की आवश्यकता है?
एक ही विक्रेता, एक ही रिलीज़ शेड्यूल, लेकिन काम बिल्कुल अलग। माइग्राडॉक फाउंडेशन, पीडीएफ़शार्प से ठीक ऊपर स्थित है। इसमें आपको यह बताने की ज़रूरत नहीं है कि कोई स्ट्रिंग कहाँ जाएगी, बल्कि आप इसे सेक्शन, पैराग्राफ, टेबल, हेडर, फ़ूटर, स्टाइल और कभी-कभार चार्ट देते हैं, और यह अपने आप समझ जाता है कि सब कुछ कहाँ जाएगा। नतीजा एक पीडीएफ़ फ़ाइल होती है। या फिर आरटीएफ़, उस सहकर्मी के लिए जो हर चीज़ को वर्ड में खोलना चाहता है।
मेरे हिसाब से PDFsharp का मतलब है "इस टेक्स्ट को x=40, y=120 पर रखें।" MigraDoc का मतलब है "ये तीस पंक्तियाँ और एक हेडर है जो बार-बार आता है, आप पेजों को व्यवस्थित कर लें।"
| काम | सबसे अच्छा फिट | क्यों |
|---|---|---|
| एक पृष्ठ का प्रमाण पत्र या टिकट जिसमें निश्चित स्थान दिए गए हों | पीडीएफ शार्प | प्रत्येक निर्देशांक पर पूर्ण नियंत्रण |
| तालिकाओं और शीर्षकों सहित बहु-पृष्ठ रिपोर्ट | माइग्राडॉक | स्वचालित पृष्ठ संख्या और शैलियाँ |
| परिवर्तनीय संख्या में मदों वाला चालान | माइग्राडॉक | तालिकाएँ पृष्ठों पर फैलती और टूटती हैं। |
| मौजूदा PDF पर स्टैम्प, वॉटरमार्क या पृष्ठ संख्याएँ लगाना | पीडीएफ शार्प | MigraDoc केवल नए दस्तावेज़ बनाता है |
| मौजूदा फ़ाइलों को मर्ज या विभाजित करें | पीडीएफ शार्प | पेज इंपोर्ट करना PDFsharp का एक फीचर है। |
| रिपोर्ट के भीतर व्यावसायिक चार्ट | माइग्राडॉक | अंतर्निर्मित चार्ट समर्थन |
| मिश्रित: जनरेट की गई रिपोर्ट और कस्टम-डिज़ाइन किया गया कवर | दोनों | MigraDoc एक PDFsharp पेज पर रेंडर कर सकता है |
वास्तविक परियोजनाओं में अक्सर दोनों ही चीज़ें शामिल होती हैं। माइग्राडॉक के ज़रिए मुख्य पाठ, हाथ से बनाया गया कवर या किसी विक्रेता की पीडीएफ़ पर लगी मुहर, ये सब निचली परत के ज़रिए किया जाता है। वैसे भी, पीडीएफ़शार्प को इंस्टॉल करने से बचना मुश्किल है, क्योंकि माइग्राडॉक पैकेज इसे एक निर्भरता के रूप में शामिल कर लेता है।
PDFsharp बिल्ड की व्याख्या: कोर बिल्ड, GDI+ और WPF
नए उपयोगकर्ता अक्सर NuGet में पैकेज सूची में अगले स्थान पर अटक जाते हैं। PDFsharp 6 तीन बिल्ड में आता है, जिनमें से प्रत्येक का अपना MigraDoc संस्करण है।
| NuGet पैकेज | निर्माण | प्लेटफार्म | फ़ॉन्ट और छवियां |
|---|---|---|---|
| PDFsharp / PDFsharp-MigraDoc | मुख्य | विंडोज, लिनक्स, मैकओएस | फ़ॉन्ट रिजॉल्वर की आवश्यकता है; BMP, PNG, JPEG इमेज को सपोर्ट करता है। |
| पीडीएफशार्प-जीडीआई / पीडीएफशार्प-माइग्राडॉक-जीडीआई | जीडीआई+ | केवल विंडोज़ | System.Drawing के माध्यम से स्थापित फ़ॉन्ट का उपयोग करता है |
| PDFsharp-WPF / PDFsharp-MigraDoc-WPF | डब्ल्यूपीएफ | केवल विंडोज़ | WPF के माध्यम से स्थापित फ़ॉन्ट का उपयोग करता है |
वर्तमान पैकेज .NET 8, 9 और 10 के साथ-साथ .NET Standard 2.0 और .NET Framework 4.6.2 को लक्षित करते हैं। इसलिए, WinForms टूल से लेकर एकदम नए ASP.NET Core API तक, लगभग हर वो चीज़ जिस पर अभी भी काम चल रहा है, इसमें शामिल है।
कंसोल ऐप, वेब एपीआई, डॉकर, एज़्योर फ़ंक्शंस, लिनक्स पर कुछ भी? कोर बिल्ड। GDI+ या WPF केवल विंडोज़ डेस्कटॉप ऐप के लिए उपयोगी हैं जहाँ आप सिस्टम फ़ॉन्ट या नेटिव कंट्रोल में पूर्वावलोकन चाहते हैं। स्टैक ओवरफ़्लो पर किसी ने एक बार पूछा था कि क्या उनके कंसोल ऐप को WPF संस्करण की आवश्यकता है। उसे इसकी आवश्यकता नहीं थी।

विजुअल स्टूडियो में NuGet से PDFsharp कैसे इंस्टॉल करें
आपको अभी भी WinForms के ज़माने के फ़ोरम पोस्ट मिल जाएँगे जिनमें ZIP फ़ाइल डाउनलोड करने, DLL निकालने और खुद से रेफ़रेंस जोड़ने के लिए कहा गया होगा। उन्हें नज़रअंदाज़ करें। NuGet के ज़रिए PDFsharp इंस्टॉल करें; पैकेज मैनेजर वर्ज़न ट्रैक करता है, इसलिए आपको ऐसा करने की ज़रूरत नहीं है।
- विजुअल स्टूडियो में अपना सॉल्यूशन खोलें और सॉल्यूशन एक्सप्लोरर में प्रोजेक्ट पर राइट-क्लिक करें।
- NuGet पैकेज प्रबंधित करें चुनें, ब्राउज़ टैब पर जाएं और "PDFsharp" खोजें।
- यदि आपको दस्तावेज़ लेआउट की भी आवश्यकता है, तो PDFsharp (कोर बिल्ड) या PDFsharp-MigraDoc चुनें। सुनिश्चित करें कि प्रकाशक empira Software GmbH है।
- इंस्टॉल पर क्लिक करें और लाइसेंस संबंधी अनुरोध को स्वीकार करें।
- पैकेज सही ढंग से पुनर्स्थापित हुआ है या नहीं, इसकी पुष्टि करने के लिए प्रोजेक्ट को एक बार बिल्ड करें।
टर्मिनल उपयोगकर्ता क्लिक करने से बच सकते हैं:
bash dotnet add package PDFsharp dotnet add package PDFsharp-MigraDoc
पैकेज मैनेजर कंसोल के अंदर, यही कमांड Install-Package PDFsharp है। कृपया अलग-अलग बिल्ड को आपस में न मिलाएं। मैंने एक टीम को टाइप कॉन्फ्लिक्ट्स के कारण पूरा दिन बर्बाद करते देखा है, क्योंकि एक प्रोजेक्ट में PDFsharp का संदर्भ था और उसके पड़ोसी प्रोजेक्ट में PDFsharp-GDI का उपयोग किया गया था।
C भाषा में PDFsharp के साथ अपना पहला PDF दस्तावेज़ बनाएं
नीचे एक पेज की पीडीएफ फाइल बनाने वाला सबसे छोटा प्रोग्राम दिया गया है। यह किसी भी ऑपरेटिंग सिस्टम के कोर बिल्ड पर चलता है, बशर्ते फॉन्ट रिजॉल्वर सेट अप किया गया हो (अगला सेक्शन)।
```सीशार्प
पीडीएफ शार्प.ड्राइंग का उपयोग करना;
PdfSharp.Pdf का उपयोग करना;
// PDFsharp 6.5+ के पहले उपयोग से पहले लाइसेंस चुनना आवश्यक है
PdfSharpLicense.SetAgplLicense();
var document = new PdfDocument();
document.Info.Title = "हैलो PDFsharp";
पीडीएफपेज पेज = दस्तावेज़.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
var font = new XFont("Arial", 20, XFontStyleEx.Bold);
gfx.DrawString("हैलो, PDFsharp!", फ़ॉन्ट, XBrushes.Black,
नया XRect(0, 0, पृष्ठ.चौड़ाई.बिंदु, पृष्ठ.ऊंचाई.बिंदु),
XStringFormats.Center);
document.Save("hello.pdf");
```
PDFsharp के सभी प्रोग्राम इस क्रम का पालन करते हैं: दस्तावेज़, पृष्ठ, XGraphics, ड्रा, सेव। इकाइयाँ पॉइंट्स (1/72 इंच) में होती हैं और मूल बिंदु ऊपरी-बाएँ कोने में स्थित होता है। 6.2.x संस्करण में, लाइसेंस वाली पंक्ति हटा दें। यह API केवल 6.5.0 संस्करण में ही उपलब्ध हुआ था।
और माइग्राडॉक संस्करण:
```सीशार्प
माइग्राडॉक.डॉक्यूमेंटऑब्जेक्टमॉडल का उपयोग करना;
माइग्राडॉक.रेंडरिंग का उपयोग करना;
var doc = new Document();
सेक्शन सेक्शन = doc.AddSection();
section.AddParagraph("हैलो, माइग्राडॉक!");
var रेंडरर = नया PdfDocumentRenderer { Document = doc };
रेंडरर.रेंडरडॉक्यूमेंट();
रेंडरर.पीडीएफडॉक्यूमेंट.सेव('हैलो-माइग्राडॉक.पीडीएफ');
```
कहीं भी निर्देशांक नहीं हैं। इसमें 500 पैराग्राफ डाल दें और आपको उतने ही पेज मिल जाएंगे जितने की आवश्यकता होगी, और आपको अपनी तरफ से कोई पेजिंग कोड डालने की जरूरत नहीं है।
PDFsharp कोर बिल्ड में फ़ॉन्ट: रिजॉल्वर समस्या
आप इधर-उधर पूछेंगे तो आपको फ़ॉन्ट से जुड़ी शिकायतें ही सबसे ज़्यादा सुनने को मिलेंगी। GDI+ और WPF बिल्ड विंडोज़ से इंस्टॉल किए गए TrueType फ़ॉन्ट पढ़ते हैं। कोर बिल्ड कुछ भी मानकर नहीं चल सकता, क्योंकि एक स्लिम लिनक्स कंटेनर में अक्सर कोई भी उपयोगी फ़ॉन्ट नहीं होता। इसलिए, पहला डॉकर डिप्लॉयमेंट अक्सर उपयुक्त फ़ॉन्ट न मिलने की त्रुटि के साथ समाप्त हो जाता है।
इसका समाधान फॉन्ट रिजॉल्वर है, जो IFontResolver को इम्प्लीमेंट करने वाली एक क्लास है। इसमें दो मेथड हैं:
- ResolveTypeface अनुरोधित फ़ॉन्ट परिवार और शैली (जैसे, "Arial", बोल्ड) को फ़ॉन्ट नाम से मैप करता है।
- GetFont उस फ़ॉन्ट नाम के लिए TTF फ़ाइल के मूल बाइट्स लौटाता है।
पहले XFont के बनने से पहले, GlobalFontSettings.FontResolver के माध्यम से स्टार्टअप के समय इसे एक बार रजिस्टर करें।
```सीशार्प
सार्वजनिक वर्ग AppFontResolver : IFontResolver
{
public FontResolverInfo? ResolveTypeface(string family, bool bold, bool italic)
=> new FontResolverInfo(bold ? "Inter-Bold" : "Inter-Regular");
public byte[]? GetFont(string faceName) => File.ReadAllBytes(Path.Combine(AppContext.BaseDirectory, "Fonts", faceName + ".ttf"));
}
ग्लोबलफॉन्टसेटिंग्स.फॉन्टरिजॉल्वर = नया ऐपफॉन्टरिजॉल्वर();
```
खुद उन जगहों पर जाने से पहले कुछ बातें जानना जरूरी है:
- अपनी TTF फ़ाइलों को प्रोजेक्ट में Fonts फ़ोल्डर में रखें और उन्हें आउटपुट डायरेक्टरी में कॉपी करने के लिए सेट करें, या उन्हें रिसोर्स के रूप में एम्बेड करें ताकि कंटेनर इमेज में वे हमेशा मौजूद रहें।
- रिलीज़ 6.2.0 ने पुराने CoreBuildFontResolver को हटा दिया है। Windows या WSL2 पर आप GlobalFontSettings.UseWindowsFontsUnderWindows का उपयोग करके समान व्यवहार को बहाल कर सकते हैं, लेकिन यह Linux या macOS पर काम नहीं करता है।
- आधिकारिक सैंपल रिपॉजिटरी में एक सब्स्टिट्यूटिंग फॉन्ट रिजॉल्वर शामिल है जिसे आप शुरुआती बिंदु के रूप में कॉपी कर सकते हैं।
- जनरेट की गई फ़ाइलों में व्यावसायिक फ़ॉन्ट एम्बेड करने से पहले फ़ॉन्ट लाइसेंस की जाँच कर लें। इंटर, रोबोटो या नोटो जैसे ओपन फ़ॉन्ट इस सवाल से पूरी तरह बच जाते हैं।
रिजॉल्वर के लागू होने के बाद, विंडोज, लिनक्स और मैकओएस पर आउटपुट एक जैसा दिखता है।
PDFsharp 6 के साथ फ़ाइलों को मर्ज करना, साइन करना और सुरक्षित करना
कई टीमें कभी भी दस्तावेज़ को शुरू से नहीं बनातीं। वे पहले से मौजूद फ़ाइलों को जोड़ने, चिह्नित करने या लॉक करने के लिए लाइब्रेरी का उपयोग करती हैं। मर्ज करना कुछ ही लाइनों का काम है: प्रत्येक स्रोत को आयात मोड में खोलें और पृष्ठों को कॉपी करें।
csharp var आउटपुट = नया PdfDocument(); foreach (var पथ in new[] { "part1.pdf", "part2.pdf" }) { using var input = PdfReader.Open(path, PdfDocumentOpenMode.Import); foreach (PdfPage p in input.Pages) output.AddPage(p); } आउटपुट.सेव("merged.pdf");
विभाजन प्रक्रिया उसी लूप का उल्टा है, जिसमें प्रति पृष्ठ या श्रेणी एक आउटपुट फ़ाइल होती है। सुरक्षा के लिए, document.SecuritySettings उपयोगकर्ता पासवर्ड, स्वामी पासवर्ड और अनुमति फ़्लैग (प्रिंट, टेक्स्ट कॉपी आदि) लेता है।
दो लंबे समय से प्रतीक्षित फीचर्स आखिरकार 6.2 लाइन में शामिल हो गए:
- CMS पर आधारित डिजिटल हस्ताक्षर । एक डिफ़ॉल्ट हस्ताक्षरकर्ता अलग PDFsharp.Cryptography असेंबली में उपलब्ध है, और आप IDigitalSigner को लागू करके अपना स्वयं का हस्ताक्षरकर्ता जोड़ सकते हैं। टाइमस्टैम्प सर्वर समर्थन आधुनिक .NET पर काम करता है, लेकिन .NET फ्रेमवर्क बिल्ड पर नहीं।
- संग्रह के लिए PDF/A आउटपुट । आधिकारिक दस्तावेज़ों में इसे "कुछ सीमाओं के साथ" काम करने वाला और अभी भी विकास के अधीन बताया गया है, इसलिए अनुपालन के लिए इस पर भरोसा करने से पहले PDF/A चेकर से परिणाम की पुष्टि कर लें।
उस रिलीज में रंगीन इमोजी ग्लिफ़ और एक प्रबंधित MD5 कार्यान्वयन भी शामिल था, जो FIPS नियमों के तहत या Blazor में काम करने पर मायने रखता है।
PDFsharp रिपॉजिटरी, PdfSharpCore फोर्क्स और 1.x संस्करण
GitHub पर PDFsharp खोजें और आपको लगभग एक ही नाम वाले कई प्रोजेक्ट मिल जाएंगे। इसका कारण इतिहास है।
पुराना 1.x संस्करण (1.50, 1.51) केवल .NET Framework पर चलता था। जब .NET Core आया, तो लोगों ने इंतज़ार करना छोड़ दिया और खुद ही इसे पोर्ट कर लिया। PdfSharpCore, जिसे स्टीफ़न स्टीगर ने शुरू किया था और बाद में अन्य संस्करणों ने भी अपनाया, वही है जिसे ज़्यादातर लोग जानते हैं। इसने GDI+ को हटा दिया और आधिकारिक रिलीज़ से कई साल पहले ही कोड को लिनक्स पर चलाने लायक बना दिया।
फिर PDFsharp 6 आया: आधुनिक .NET पर आधारित एक संपूर्ण पुनर्लेखन, जिसमें एक आधिकारिक क्रॉस-प्लेटफ़ॉर्म कोर बिल्ड शामिल था। इसके बाद इसके विभिन्न संस्करणों का अस्तित्व लगभग समाप्त हो गया।
| परियोजना | मेंटेनर | प्लेटफार्म | स्थिति |
|---|---|---|---|
| PDFsharp 6.x (empira/PDFsharp रिपॉजिटरी) | एम्पिरा सॉफ्टवेयर जीएमबीएच | .NET 8–10, .NET Standard 2.0, .NET Framework 4.6.2 | सक्रिय रूप से रखरखाव किया जाता है |
| PDFsharp 1.5x | एम्पिरा सॉफ्टवेयर जीएमबीएच | केवल .NET फ्रेमवर्क | सोर्स कोड GitHub पर रखा गया है, अब इसका रखरखाव नहीं किया जाता है। |
| PdfSharpCore और इसके फ़ोर्क | समुदाय | .NET कोर / .NET स्टैंडर्ड 2.0 | फ़ॉर्क के अनुसार भिन्न होता है, अपडेट धीमे होते हैं |
| PDFsharp-MigraDoc 6.x | एम्पिरा सॉफ्टवेयर जीएमबीएच | PDFsharp 6 के समान | सक्रिय रूप से रखरखाव किया जाता है |
तो, Reddit पर बार-बार दिखने वाली "PdfSharp बनाम PdfSharpCore" वाली बहस का क्या? यह एक नया प्रोजेक्ट है, आधिकारिक पैकेज उपलब्ध हैं। फ़ोर्क तभी रखें जब पुराना कोड पहले से ही इस पर निर्भर हो और माइग्रेट करने में अभी इतना समय और न लगे। और जब दस्तावेज़ अधूरे लगें, तो एम्पिरा के अलग सैंपल रिपॉज़िटरी पर जाएँ। इसके फ़ोल्डर और फ़ाइलें चलाने योग्य उदाहरण हैं, जो अनुमान लगाने से कहीं बेहतर हैं।
क्या PDFsharp मुफ़्त है? PDFsharp 6.5 में लाइसेंसिंग में हुए बदलाव
अपने जीवनकाल के अधिकांश समय तक, हाँ। यह एमआईटी लाइसेंस के अंतर्गत था, जिसका अर्थ है कि इसका व्यावसायिक उपयोग लगभग बिना किसी प्रतिबंध के किया जा सकता है। 6.2.4 सहित सभी रिलीज़ अभी भी इसी लाइसेंस के अंतर्गत हैं।
6.5.0 ने इसे बदल दिया। लाइब्रेरी अब दोहरी लाइसेंस वाली है:
- AGPL (निःशुल्क)। लाइब्रेरी का उपयोग करने से पहले PdfSharpLicense.SetAgplLicense() को कॉल करके इसे सक्षम किया जा सकता है। AGPL के तहत आपको अपना सोर्स कोड उपयोगकर्ताओं के लिए उपलब्ध कराना आवश्यक है, जिसमें वे उपयोगकर्ता भी शामिल हैं जो नेटवर्क पर आपके सॉफ़्टवेयर के साथ इंटरैक्ट करते हैं, इसलिए यह क्लोज्ड-सोर्स SaaS के लिए उपयुक्त नहीं है।
- वाणिज्यिक लाइसेंस। आप विक्रेता से लाइसेंस कुंजी खरीदते हैं और उसे PdfSharpLicense.LoadLicense(...) का उपयोग करके लोड करते हैं। इससे AGPL की बाध्यताएँ समाप्त हो जाती हैं।
6.5.0 के बाद से, आपके कोड को स्पष्ट रूप से एक का चयन करना होगा। 7.0 के पूर्वावलोकन भी इसी तरह काम करते हैं।
व्यवहार में:
- AGPL के अनुरूप ओपन सोर्स प्रोजेक्ट नवीनतम संस्करण का मुफ्त में उपयोग करना जारी रख सकते हैं।
- क्लोज्ड-सोर्स उत्पादों के लिए या तो कमर्शियल लाइसेंस खरीदा जा सकता है या 6.2.x संस्करण पर ही बने रहने का विकल्प है, जो अभी भी MIT लाइसेंस के अंतर्गत है। मौजूदा संस्करण पर बने रहने का मतलब है भविष्य में मिलने वाले सुधारों से वंचित रहना, इसलिए इस लागत का ईमानदारी से आकलन करें।
- आप जो भी विकल्प चुनें, लाइसेंस के मूल पाठ को ध्यान से पढ़ें और अपनी कानूनी टीम से उस पर हस्ताक्षर करवा लें। यह मार्गदर्शिका कानूनी सलाह नहीं है।

PDFsharp की कमियां और इसे किसके साथ इस्तेमाल करना चाहिए
पुस्तकालय अपना काम बखूबी करता है। बस काम सीमित दायरे में होता है, और हर फोरम थ्रेड में वही कमियां सामने आती हैं।
- HTML को PDF में परिवर्तित नहीं किया जा सकता। PDFsharp HTML या CSS को रेंडर नहीं करता है। एक सामुदायिक ऐड-ऑन, HtmlRenderer.PdfSharp, मौजूद है, लेकिन यह केवल HTML 4.01 और CSS लेवल 2 को सपोर्ट करता है, इसलिए फ्लेक्सबॉक्स या ग्रिड वाले आधुनिक लेआउट काम नहीं करेंगे। जिन टीमों को HTML टेम्प्लेट की आवश्यकता होती है, वे आमतौर पर इसके बजाय हेडलेस-ब्राउज़र रेंडरर का उपयोग करती हैं।
- जावास्क्रिप्ट का उपयोग नहीं किया जा सकता। क्लाइंट साइड पर बनाए गए चार्ट या सामग्री को कैप्चर नहीं किया जा सकता।
- इमेज रेंडरिंग की सुविधा उपलब्ध नहीं है। PDFsharp किसी PDF पेज को थंबनेल या प्रीव्यू के लिए PNG फॉर्मेट में परिवर्तित नहीं कर सकता। इसके लिए आपको एक अलग रैस्टराइज़र की आवश्यकता होगी।
- सीमित पाठ निष्कर्षण। आप सामग्री प्रवाह का विश्लेषण कर सकते हैं, लेकिन कोई उच्च-स्तरीय एपीआई नहीं है जो स्थिति सहित स्पष्ट पाठ लौटाता हो। पीडीएफ पिग, एक अलग ओपन-सोर्स लाइब्रेरी, विशेष रूप से पाठ पढ़ने और निकालने के लिए बनाई गई है।
- आंशिक फॉर्म सपोर्ट उपलब्ध है। साधारण एक्रोफॉर्म भरना काम करता है; स्क्रिप्ट वाले जटिल फॉर्म की बात अलग है।
- टेबलों के लिए माइग्राडॉक की आवश्यकता होती है। साधारण पीडीएफशार्प के साथ, आपको प्रत्येक पंक्ति की ऊंचाई स्वयं गणना करनी पड़ती है।
इसका मतलब यह नहीं है कि यह एक खराब विकल्प है। इनवॉइस, स्टेटमेंट, लेबल और सर्टिफिकेट जैसे डेटा-आधारित दस्तावेज़ इसके लिए एकदम उपयुक्त हैं, और इसका आकार भी बहुत छोटा है। हालांकि, वेब पेजों की पिक्सेल-परफेक्ट कॉपी बनाना संभव नहीं है।
क्रिप्टो इनवॉइस और भुगतान रसीदों के लिए PDFsharp
PDFsharp का उपयोग करके लोग सबसे ज़्यादा रसीदें बनाते हैं। क्रिप्टोकरेंसी की रसीदें कार्ड की रसीदों से थोड़ी ज़्यादा जटिल होती हैं। अच्छी बात यह है कि जैसे ही पेमेंट गेटवे आपके वेबहुक (पेमेंट स्टेटस बदलने पर भेजा जाने वाला HTTP कॉलबैक) तक पहुँचता है, आपके पास सारा डेटा आ जाता है। कुछ भी अतिरिक्त देखने की ज़रूरत नहीं है।
मैं इस पर क्या लगाऊंगा:
- ऑर्डर या इनवॉइस आईडी और व्यापारी का विवरण
- भुगतान के समय क्रिप्टोकरेंसी में राशि और उसके बराबर फिएट मुद्रा।
- कॉइन और नेटवर्क (उदाहरण के लिए, TRON पर USDT बनाम Ethereum पर USDT)
- लेनदेन हैश, ताकि ग्राहक ब्लॉक एक्सप्लोरर पर इसकी पुष्टि कर सके।
- प्राप्तकर्ता वॉलेट का संक्षिप्त पता और पुष्टिकरण समय
- लेनदेन या चालान पृष्ठ से लिंक करने वाला एक क्यूआर कोड
हैश और पते के लिए मोनोस्पेस का इस्तेमाल करें। ग्राहक इन्हें एक-एक अक्षर करके ध्यान से देखते हैं, और एरियल फॉन्ट में शून्य और बड़ा अक्षर O जुड़वाँ जैसे दिखते हैं। अगर हैश बहुत चौड़ा है, तो उसे रैप करें; 6pt टेक्स्ट किसी काम का नहीं। फॉन्ट एम्बेड करें, ऑर्डर के साथ फाइल सेव करें, और अगर कभी आपका अकाउंटेंट रसीद मांगे तो उस पर हस्ताक्षर कर दें।
इनमें से कोई भी बात असल में पैसे लेने की प्रक्रिया को कवर नहीं करती। इसके लिए आप Plisio जैसे गेटवे का इस्तेमाल कर सकते हैं। यह BTC, USDT और कई अन्य मुद्राओं को स्वीकार करता है, इनवॉइस बनाता है और स्टेटस बदलने पर आपके एंडपॉइंट को कॉल करता है। आपका हैंडलर पेलोड को MigraDoc को भेजता है और खरीदार को धन्यवाद पृष्ठ पर रहते हुए ही आपके लोगो वाली रसीद मिल जाती है।
निष्कर्ष
मैं बार-बार PDFsharp का इस्तेमाल एक ही वजह से करता हूँ: यह छोटा है और ज़्यादा जगह नहीं लेता। इसका कोर बिल्ड .NET के साथ कहीं भी चल सकता है, और जब कैनवास पर्याप्त न हो तो माइग्राडॉक लेआउट का काम संभाल लेता है। शुरुआत में तीन बातें तय कर लें: कौन सा बिल्ड, फॉन्ट कैसे लोड होते हैं, और अब जब 6.5 AGPL लाइसेंस के तहत आ गया है तो आपका लाइसेंस कौन सा है। वेब पेजों के बजाय प्रिंट डेटा प्रिंट करें, और यह कई सालों तक चलेगा।