Οδηγός PDFsharp: Δημιουργία αρχείων PDF με MigraDoc και PdfSharpCore
Το PDFsharp είναι μια βιβλιοθήκη .NET ανοιχτού κώδικα για τη δημιουργία και επεξεργασία εγγράφων PDF από κώδικα C#. Σχεδιάζετε κείμενο, γραμμές και εικόνες σε μια σελίδα, καλείτε την Αποθήκευση και έχετε ένα αρχείο PDF. Δεν υπάρχει μηχανή περιήγησης, δεν υπάρχει εγγενές δυαδικό αρχείο. Το έργο χρονολογείται από το 2005 και πολλά από τα τιμολόγια, τις αναφορές και τα πιστοποιητικά που προέρχονται από τα backends .NET σήμερα εξακολουθούν να περνούν από αυτό.
Έγραψα αυτό για προγραμματιστές που χρειάζονται PDF στον διακομιστή και θέλουν να μάθουν τι τους απασχολεί. Θα καλύψουμε πώς συνδυάζονται το PDFsharp και το MigraDoc, ποια έκδοση θα εγκατασταθεί, ένα πρώτο λειτουργικό αρχείο, τον πονοκέφαλο με τις γραμματοσειρές στο Linux, την πρόσφατη αλλαγή άδειας χρήσης και το σημείο όπου θα πρέπει να επιλέξετε κάτι άλλο.
Τι είναι το PDFsharp και τι μπορεί να κάνει;
Πίσω από τη βιβλιοθήκη PDFsharp βρίσκεται η empira Software GmbH, ένα μικρό γερμανικό κατάστημα που διατηρεί το συγκεκριμένο είδος ζωντανής βιβλιοθήκης για σχεδόν είκοσι χρόνια. Ο περισσότερος χρόνος σας αφιερώνεται σε ένα μάθημα, την XGraphics. Αν έχετε κάνει ποτέ ζωγραφική σε WinForms με το System.Drawing.Graphics, θα νιώσετε σαν στο σπίτι σας μέσα σε δέκα λεπτά: γραμματοσειρά, πινέλο, x και y, ας ξεκινήσουμε.
Από την πρώτη στιγμή που θα το βγάλετε από τη συσκευασία, λαμβάνετε:
- Δημιουργήστε έγγραφα PDF από την αρχή με κείμενο, διανυσματικά σχήματα, γραμμές και εικόνες
- Ανοίξτε υπάρχοντα αρχεία PDF και προσθέστε περιεχόμενο στις σελίδες τους, όπως σφραγίδες, υδατογραφήματα ή αριθμούς σελίδων
- Συγχώνευση και διαίρεση εγγράφων εισάγοντας σελίδες από ένα αρχείο σε ένα άλλο
- Ενσωμάτωση και υποσύνολο γραμματοσειρών έτσι ώστε το αρχείο να φαίνεται το ίδιο σε κάθε μηχάνημα
- Προσθήκη σελιδοδεικτών, συνδέσμων και μεταδεδομένων εγγράφων, όπως τίτλο, συγγραφέα και λέξεις-κλειδιά
- Προστατέψτε τα αρχεία με κωδικούς πρόσβασης και σημαίες δικαιωμάτων
- Υπογράψτε έγγραφα ψηφιακά (από την έκδοση 6.2 και μετά)
Η ανάπτυξη είναι βαρετή, κάτι που το εννοώ ως έπαινο. Όλα είναι διαχειριζόμενος κώδικας, επομένως ο υπεύθυνος λειτουργιών σας δεν χρειάζεται ποτέ να βάλει Chrome χωρίς κεφαλαία σε ένα κουτί ή να ψάξει για ένα DLL Ghostscript στις 2 π.μ. Αναφέρεστε σε ένα πακέτο NuGet, πιέστε, τελείωσε.
Και τώρα η παγίδα. Παίρνετε έναν καμβά και τίποτα περισσότερο. Μια μεγάλη παράγραφος φτάνει στο κάτω περιθώριο; Το πρόβλημά σας. Ο πίνακας ξεπερνά την πρώτη σελίδα; Και το δικό σας, εκτός αν εισάγετε το MigraDoc.
PDFsharp και MigraDoc: Ποιο επίπεδο χρειάζεστε;
Ίδιος προμηθευτής, ίδιο πρόγραμμα κυκλοφορίας, πολύ διαφορετικές εργασίες. Το MigraDoc Foundation βρίσκεται έναν όροφο πάνω από το PDFsharp. Αντί να του λέτε πού πηγαίνει μια συμβολοσειρά, του δίνετε ενότητες, παραγράφους, πίνακες, κεφαλίδες, υποσέλιδα, στυλ και τα περίεργα γραφήματα, και αυτό καταλαβαίνει πού καταλήγουν όλα. Βγαίνει ένα PDF. Ή RTF, για τον συνάδελφο που επιμένει να ανοίγει τα πάντα στο Word.
Η συντομογραφία μου: Το PDFsharp είναι "βάλτε αυτό το κείμενο στο x=40, y=120." Το MigraDoc είναι "ορίστε τριάντα γραμμές και μια κεφαλίδα που επαναλαμβάνεται, ταξινομείτε τις σελίδες."
| Εργο | Βέλτιστη εφαρμογή | Γιατί |
|---|---|---|
| Μονοσέλιδο πιστοποιητικό ή εισιτήριο με σταθερές θέσεις | PDFsharp | Πλήρης έλεγχος κάθε συντεταγμένης |
| Αναφορά πολλαπλών σελίδων με πίνακες και κεφαλίδες που εκτελούνται | MigraDoc | Αυτόματη σελιδοποίηση και στυλ |
| Τιμολόγιο με μεταβλητό αριθμό στοιχείων γραμμής | MigraDoc | Οι πίνακες μεγαλώνουν και διαχωρίζονται στις σελίδες |
| Σφραγίδα, υδατογράφημα ή αριθμοί σελίδων σε υπάρχον PDF | PDFsharp | Το MigraDoc δημιουργεί μόνο νέα έγγραφα |
| Συγχώνευση ή διαίρεση υπαρχόντων αρχείων | PDFsharp | Η εισαγωγή σελίδων είναι μια λειτουργία του PDFsharp |
| Επιχειρηματικό διάγραμμα μέσα σε μια αναφορά | MigraDoc | Ενσωματωμένη υποστήριξη γραφημάτων |
| Μικτή: δημιουργημένη αναφορά συν ένα εξώφυλλο με ειδική σχεδίαση | Και οι δύο | Το MigraDoc μπορεί να αποδώσει σε μια σελίδα PDFsharp |
Τα πραγματικά έργα τείνουν να καταλήγουν και στα δύο. Κείμενο σώματος μέσω του MigraDoc, ένα χειρόγραφο εξώφυλλο ή μια σφραγίδα σε κάποιο PDF προμηθευτή μέσω του κάτω επιπέδου. Δεν μπορείτε πραγματικά να αποφύγετε την εγκατάσταση του PDFsharp ούτως ή άλλως, επειδή το πακέτο MigraDoc το μεταφέρει ως εξάρτηση.
Επεξήγηση δομών PDFsharp: Βασική δομή, GDI+ και WPF
Οι νεοφερμένοι συνήθως κολλάνε στη λίστα πακέτων στο NuGet. Το PDFsharp 6 διατίθεται σε τρεις εκδόσεις, καθεμία με το δικό της δίδυμο MigraDoc.
| Πακέτο NuGet | Οικοδομώ | Πλατφόρμες | Γραμματοσειρές και εικόνες |
|---|---|---|---|
| PDFsharp / PDFsharp-MigraDoc | Πυρήνας | Windows, Linux, macOS | Χρειάζεται ένας αναλυτής γραμματοσειρών. Εικόνες BMP, PNG, JPEG |
| PDFsharp-GDI / PDFsharp-MigraDoc-GDI | GDI+ | Μόνο για Windows | Χρησιμοποιεί εγκατεστημένες γραμματοσειρές μέσω του System.Drawing |
| PDFsharp-WPF / PDFsharp-MigraDoc-WPF | WPF | Μόνο για Windows | Χρησιμοποιεί εγκατεστημένες γραμματοσειρές μέσω WPF |
Τα τρέχοντα πακέτα στοχεύουν στις εκδόσεις .NET 8, 9 και 10, καθώς και στα .NET Standard 2.0 και .NET Framework 4.6.2. Έτσι, σχεδόν οτιδήποτε εξακολουθεί να επεξεργάζεται καλύπτεται, από ένα παλιό εργαλείο WinForms μέχρι ένα ολοκαίνουργιο ASP.NET Core API.
Εφαρμογή κονσόλας, web API, Docker, Azure Functions, οτιδήποτε σε Linux; Core build. Το GDI+ ή το WPF έχουν νόημα μόνο για μια εφαρμογή υπολογιστή των Windows όπου θέλετε γραμματοσειρές συστήματος ή μια προεπισκόπηση σε ένα εγγενές στοιχείο ελέγχου. Κάποιος στο Stack Overflow ρώτησε κάποτε αν η εφαρμογή κονσόλας του χρειαζόταν την έκδοση WPF. Δεν χρειαζόταν.

Πώς να εγκαταστήσετε το PDFsharp από το NuGet στο Visual Studio
Θα εξακολουθείτε να βρίσκετε αναρτήσεις σε φόρουμ από την εποχή του WinForms που σας λένε να βρείτε ένα ZIP, να βρείτε ένα DLL και να προσθέσετε μόνοι σας την αναφορά. Αγνοήστε τις. Εγκαταστήστε το PDFsharp μέσω του NuGet. Ο διαχειριστής πακέτων παρακολουθεί τις εκδόσεις, ώστε να μην χρειάζεται να το κάνετε εσείς.
- Ανοίξτε τη λύση σας στο Visual Studio και κάντε δεξί κλικ στο έργο στην Εξερεύνηση λύσεων.
- Επιλέξτε Διαχείριση πακέτων NuGet , μεταβείτε στην καρτέλα Αναζήτηση και αναζητήστε "PDFsharp".
- Επιλέξτε PDFsharp (Core build) ή PDFsharp-MigraDoc εάν χρειάζεστε και διάταξη εγγράφου. Ελέγξτε αν ο εκδότης είναι η empira Software GmbH.
- Κάντε κλικ στην επιλογή Εγκατάσταση και αποδεχτείτε την προτροπή άδειας χρήσης.
- Δημιουργήστε το έργο μία φορά για να επιβεβαιώσετε ότι το πακέτο έχει αποκατασταθεί σωστά.
Οι χρήστες του τερματικού μπορούν να παραλείψουν το κλικ:
bash dotnet προσθήκη πακέτου PDFsharp dotnet προσθήκη πακέτου PDFsharp-MigraDoc
Μέσα στην Κονσόλα Διαχείρισης Πακέτων το ίδιο πράγμα είναι το Install-Package PDFsharp. Και παρακαλώ μην αναμειγνύετε builds. Έχω δει μια ομάδα να χάνει ένα ολόκληρο απόγευμα σε διενέξεις τύπων επειδή ένα έργο ανέφερε το PDFsharp και το γειτονικό του τράβηξε το PDFsharp-GDI.
Το πρώτο σας έγγραφο PDF με PDFsharp σε C
Παρακάτω αναφέρεται το μικρότερο πρόγραμμα που παράγει ένα αρχείο PDF μίας σελίδας. Εκτελείται στην έκδοση Core σε οποιοδήποτε λειτουργικό σύστημα, εφόσον έχει ρυθμιστεί ένας αναλυτής γραμματοσειρών (επόμενη ενότητα).
``csharp``
χρησιμοποιώντας το PdfSharp.Drawing;
χρησιμοποιώντας το PdfSharp.Pdf;
// Το PDFsharp 6.5+ απαιτεί την επιλογή άδειας χρήσης πριν από την πρώτη χρήση
PdfSharpLicense.SetAgplLicense();
var document = new PdfDocument();
document.Info.Title = "Γεια σου PDFsharp";
Σελίδα PdfPage = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(σελίδα);
var font = new XFont("Arial", 20, XFontStyleEx.Bold);
gfx.DrawString("Γεια σου, PDFsharp!"), γραμματοσειρά, XBrushes.Black,
νέο XRect(0, 0, σημείο πλάτους σελίδας, σημείο ύψους σελίδας),
XStringFormats.Center);
έγγραφο.Αποθήκευση("γεια.pdf");
```
Κάθε πρόγραμμα PDFsharp ακολουθεί αυτό το σχήμα: έγγραφο, σελίδα, XGraphics, σχεδίαση, αποθήκευση. Οι μονάδες είναι οι τελείες (1/72 ίντσας) και η αρχή βρίσκεται στην επάνω αριστερή γωνία. Στην έκδοση 6.2.x, διαγράψτε τη γραμμή άδειας χρήσης. Αυτό το API εμφανίστηκε μόνο στην έκδοση 6.5.0.
Και η έκδοση του MigraDoc:
``csharp``
χρησιμοποιώντας το MigraDoc.DocumentObjectModel;
χρησιμοποιώντας το MigraDoc.Rendering;
var doc = νέο έγγραφο();
Ενότητα ενότητα = doc.AddSection();
section.AddParagraph("Γεια σου, MigraDoc!");
var renderer = νέο PdfDocumentRenderer { Document = doc };
renderer.RenderDocument();
renderer.PdfDocument.Save("hello-migradoc.pdf");
```
Δεν υπάρχουν συντεταγμένες πουθενά. Αν ρίξετε 500 παραγράφους, θα έχετε όσες σελίδες χρειάζεστε, χωρίς κώδικα σελιδοποίησης από την πλευρά σας.
Γραμματοσειρές στο PDFsharp Core Build: Το πρόβλημα της επίλυσης
Ρωτήστε τριγύρω και οι γραμματοσειρές είναι το παράπονο που θα ακούσετε περισσότερο. Οι εκδόσεις GDI+ και WPF απλώς διαβάζουν εγκατεστημένες γραμματοσειρές TrueType από τα Windows. Η έκδοση Core δεν μπορεί να υποθέσει τίποτα, επειδή ένα λεπτό κοντέινερ Linux συχνά δεν έχει καθόλου χρησιμοποιήσιμες γραμματοσειρές. Έτσι, η πρώτη ανάπτυξη του Docker τείνει να τελειώνει με μια εξαίρεση σχετικά με το ότι δεν βρέθηκε κατάλληλη γραμματοσειρά.
Η επιδιόρθωση είναι ένας αναλυτής γραμματοσειρών, μια κλάση που υλοποιεί το IFontResolver. Έχει δύο μεθόδους:
- Το ResolveTypeface αντιστοιχίζει μια οικογένεια και στυλ που ζητήθηκε (ας πούμε, "Arial", έντονη γραφή) σε ένα όνομα προσώπου.
- Η GetFont επιστρέφει τα ακατέργαστα bytes του αρχείου TTF για το συγκεκριμένο όνομα προσώπου
Εγγραφείτε το μία φορά κατά την εκκίνηση μέσω του GlobalFontSettings.FontResolver, πριν δημιουργηθεί το πρώτο XFont.
``csharp``
δημόσια κλάση 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"));
}
GlobalFontSettings.FontResolver = νέο AppFontResolver();
```
Πράγματα που αξίζει να γνωρίζετε πριν τα δοκιμάσετε μόνοι σας:
- Κρατήστε τα αρχεία TTF σε έναν φάκελο Fonts στο έργο και ορίστε τα να αντιγράφονται στον κατάλογο εξόδου ή ενσωματώστε τα ως πόρους, ώστε η εικόνα κοντέινερ να τα έχει πάντα.
- Η έκδοση 6.2.0 αφαίρεσε το παλιό CoreBuildFontResolver. Σε Windows ή WSL2 μπορείτε να επαναφέρετε παρόμοια συμπεριφορά με το GlobalFontSettings.UseWindowsFontsUnderWindows, αλλά αυτό δεν κάνει τίποτα σε Linux ή macOS.
- Το επίσημο αποθετήριο δειγμάτων περιλαμβάνει ένα SubstitutingFontResolver που μπορείτε να αντιγράψετε ως σημείο εκκίνησης.
- Ελέγξτε την άδεια χρήσης γραμματοσειράς πριν ενσωματώσετε μια εμπορική γραμματοσειρά σε δημιουργημένα αρχεία. Οι ανοιχτές γραμματοσειρές όπως Inter, Roboto ή Noto αποφεύγουν εντελώς την ερώτηση.
Με τον αναλυτή στη θέση του, η έξοδος φαίνεται πανομοιότυπη σε Windows, Linux και macOS.
Συγχώνευση, Υπογραφή και Ασφάλιση Αρχείων με το PDFsharp 6
Πολλές ομάδες δεν δημιουργούν ποτέ ένα έγγραφο από την αρχή. Χρησιμοποιούν τη βιβλιοθήκη για να κολλήσουν, να σφραγίσουν ή να κλειδώσουν αρχεία που ήδη υπάρχουν. Η συγχώνευση γίνεται σε λίγες γραμμές: ανοίξτε κάθε πηγή σε λειτουργία εισαγωγής και αντιγράψτε τις σελίδες από την αρχή.
csharp var output = new PdfDocument(); foreach (var path in new[] { "part1.pdf", "part2.pdf" }) { using var input = PdfReader.Open(path, PdfDocumentOpenMode.Import); foreach (PdfPage p in input.Pages) output.AddPage(p); } output.Save("merged.pdf");
Ο διαχωρισμός είναι ο ίδιος βρόχος προς τα πίσω, ένα αρχείο εξόδου ανά σελίδα ή εύρος. Για προστασία, το document.SecuritySettings δέχεται έναν κωδικό πρόσβασης χρήστη, έναν κωδικό πρόσβασης κατόχου και σημαίες δικαιωμάτων (εκτύπωση, αντιγραφή κειμένου κ.ο.κ.).
Δύο χαρακτηριστικά που ζητούσαμε εδώ και καιρό τελικά προστέθηκαν στη γραμμή 6.2:
- Ψηφιακές υπογραφές που βασίζονται στο CMS. Ένας προεπιλεγμένος υπογράφων παρέχεται σε ξεχωριστή συναρμολόγηση PDFsharp.Cryptography και μπορείτε να συνδέσετε τον δικό σας υλοποιώντας το IDigitalSigner. Η υποστήριξη διακομιστή Timestamp λειτουργεί στο σύγχρονο .NET αλλά όχι στην έκδοση .NET Framework.
- Έξοδος PDF/A για αρχειοθέτηση. Τα επίσημα έγγραφα το περιγράφουν ως λειτουργικό "με ορισμένους περιορισμούς" και ακόμη υπό κατασκευή, επομένως επικυρώστε το αποτέλεσμα με έναν ελεγκτή PDF/A πριν βασιστείτε σε αυτόν για συμμόρφωση.
Αυτή η έκδοση έφερε επίσης έγχρωμα σύμβολα emoji και μια διαχειριζόμενη υλοποίηση MD5, η οποία έχει σημασία αν εκτελείτε το παιχνίδι με κανόνες FIPS ή σε Blazor.
Αποθετήριο PDFsharp, PdfSharpCore Forks και εκδόσεις 1.x
Αναζητήστε στο GitHub το PDFsharp και θα βρείτε μια χούφτα έργων με σχεδόν το ίδιο όνομα. Ιστορικό ευθυνών.
Η παλιά γραμμή 1.x (1.50, 1.51) έτρεχε μόνο σε .NET Framework. Όταν κυκλοφόρησε το .NET Core, οι χρήστες δεν είχαν όρεξη να περιμένουν, οπότε το μετέφεραν μόνοι τους. Το PdfSharpCore, που ξεκίνησε από τον Stefan Steiger και συνεχίστηκε από άλλα fork αργότερα, είναι αυτό που γνωρίζουν οι περισσότεροι. Αντέγραψε το GDI+ και έθεσε τον κώδικα σε λειτουργία σε Linux χρόνια πριν από την επίσημη κυκλοφορία.
Έπειτα, κυκλοφόρησε το PDFsharp 6: μια σωστή επανεγγραφή στο σύγχρονο .NET με μια επίσημη έκδοση Core για πολλαπλές πλατφόρμες. Τα fork έχασαν το μεγαλύτερο μέρος του λόγου ύπαρξής τους.
| Σχέδιο | Συντηρητής | Πλατφόρμες | Κατάσταση |
|---|---|---|---|
| PDFsharp 6.x (αποθετήριο empira/PDFsharp) | Λογισμικό Empira GmbH | .NET 8–10, .NET Standard 2.0, .NET Framework 4.6.2 | Συντηρείται ενεργά |
| PDFsharp 1.5x | Λογισμικό Empira GmbH | Μόνο για το .NET Framework | Ο πηγαίος κώδικας διατηρήθηκε στο GitHub, δεν συντηρείται πλέον |
| Το PdfSharpCore και οι διχάλες του | Κοινότητα | .NET Core / .NET Standard 2.0 | Διαφέρει ανάλογα με τη διακλάδωση, οι ενημερώσεις είναι πιο αργές |
| PDFsharp-MigraDoc 6.x | Λογισμικό Empira GmbH | Ίδιο με το PDFsharp 6 | Συντηρείται ενεργά |
Λοιπόν, το νήμα "PdfSharp vs PdfSharpCore" που εμφανίζεται συνεχώς στο Reddit; Νέο έργο, επίσημα πακέτα. Κρατήστε ένα fork μόνο αν ο παλιός κώδικας βασίζεται ήδη σε αυτό και η μετεγκατάσταση δεν αξίζει ένα σπριντ αυτή τη στιγμή. Και όταν τα έγγραφα φαίνονται λιγοστά, μεταβείτε στο ξεχωριστό αποθετήριο δειγμάτων του empira. Οι φάκελοι και τα αρχεία του είναι εκτελέσιμα παραδείγματα, κάτι που ξεπερνά τις εικασίες.
Είναι το PDFsharp δωρεάν; Αλλαγές στην αδειοδότηση στο PDFsharp 6.5
Για το μεγαλύτερο μέρος της ζωής του, ναι. Διέθετε άδεια MIT, πράγμα που σημαίνει εμπορική χρήση σχεδόν χωρίς δεσμεύσεις. Κάθε έκδοση έως και την έκδοση 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, επομένως οι σύγχρονες διατάξεις με flexbox ή grid δεν θα επιβιώσουν. Οι ομάδες που χρειάζονται πρότυπα HTML συνήθως καταφεύγουν σε ένα πρόγραμμα απόδοσης χωρίς κεφαλίδα προγράμματος περιήγησης.
- Δεν υπάρχει JavaScript. Δεν είναι δυνατή η καταγραφή γραφημάτων ή περιεχομένου που έχει δημιουργηθεί από την πλευρά του προγράμματος-πελάτη.
- Δεν γίνεται απόδοση εικόνων. Το PDFsharp δεν μπορεί να μετατρέψει μια σελίδα PDF σε PNG για μικρογραφίες ή προεπισκοπήσεις. Χρειάζεστε ξεχωριστό rasterizer για αυτό.
- Περιορισμένη εξαγωγή κειμένου. Μπορείτε να περιηγηθείτε στη ροή περιεχομένου, αλλά δεν υπάρχει API υψηλού επιπέδου που να επιστρέφει καθαρό κείμενο με θέσεις. Το PdfPig, μια ξεχωριστή βιβλιοθήκη ανοιχτού κώδικα, έχει δημιουργηθεί ειδικά για την ανάγνωση και εξαγωγή κειμένου.
- Μερική υποστήριξη φορμών. Η απλή συμπλήρωση AcroForm λειτουργεί. Οι σύνθετες φόρμες με σενάρια είναι μια άλλη ιστορία.
- Οι πίνακες χρειάζονται το MigraDoc. Με το απλό PDFsharp, υπολογίζετε μόνοι σας το ύψος κάθε γραμμής.
Αυτό δεν το καθιστά κακή επιλογή. Τα έγγραφα που βασίζονται σε δεδομένα, όπως τιμολόγια, δηλώσεις, ετικέτες και πιστοποιητικά, είναι ακριβώς το ιδανικό σημείο του, και το αποτύπωμά του είναι πολύ μικρό. Τα τέλεια αντίγραφα ιστοσελίδων σε pixel δεν είναι.
PDFsharp για κρυπτονομίσματα και αποδείξεις πληρωμής
Οι αποδείξεις είναι ίσως το πιο συνηθισμένο πράγμα που δημιουργούν οι άνθρωποι με το PDFsharp. Οι αποδείξεις κρυπτογράφησης είναι λίγο πιο περίπλοκες από αυτές με κάρτα. Τα καλά νέα: μόλις η πύλη φτάσει στο webhook σας (μια HTTP callback που αποστέλλεται όταν αλλάζει η κατάσταση πληρωμής), έχετε όλα τα δεδομένα. Δεν υπάρχει τίποτα επιπλέον να αναζητήσετε.
Τι θα έβαζα σε ένα:
- Αναγνωριστικό παραγγελίας ή τιμολογίου και στοιχεία εμπόρου
- Ποσό σε κρυπτονόμισμα και το ισοδύναμό του σε νομίσματα fiat κατά τη στιγμή της πληρωμής
- Νομίσματα και δίκτυα (για παράδειγμα, USDT στο TRON έναντι USDT στο Ethereum)
- Κατακερματισμός συναλλαγής, ώστε ο πελάτης να μπορεί να τον επαληθεύσει σε έναν εξερευνητή μπλοκ
- Μια συντομευμένη διεύθυνση πορτοφολιού λήψης και ο χρόνος επιβεβαίωσης
- Ένας κωδικός QR που συνδέεται με τη σελίδα συναλλαγής ή τιμολογίου
Μονόχωρο για hashes και διευθύνσεις. Οι πελάτες τους κοιτάζουν κατάματα, έναν χαρακτήρα κάθε φορά, και σε Arial ένα μηδέν και ένα κεφαλαίο O μοιάζουν με δίδυμα. Εάν το hashes είναι πολύ φαρδύ, τυλίξτε το. Το κείμενο των 6 pt δεν βοηθάει κανέναν. Ενσωματώστε γραμματοσειρές, αποθηκεύστε το αρχείο με την παραγγελία και υπογράψτε το εάν ο λογιστής σας ζητήσει ποτέ αποδείξεις.
Τίποτα από αυτά δεν καλύπτει την πραγματική λήψη των χρημάτων. Για αυτό το κομμάτι θα συνδέατε μια πύλη όπως το Plisio . Δέχεται BTC, USDT και πολλά άλλα κρυπτονομίσματα, εκδίδει το τιμολόγιο και καλεί το τελικό σας σημείο κάθε φορά που αλλάζει η κατάσταση. Ο χειριστής σας μεταβιβάζει το ωφέλιμο φορτίο στο MigraDoc και ο αγοραστής λαμβάνει μια απόδειξη με το λογότυπό σας ενώ βρίσκεται ακόμα στη σελίδα ευχαριστιών.
Σύναψη
Επιστρέφω συνεχώς στο PDFsharp για έναν λόγο: είναι μικρό και δεν με εμποδίζει. Η έκδοση Core εκτελείται οπουδήποτε υπάρχει το .NET και το MigraDoc αναλαμβάνει τη διάταξη όταν ένας καμβάς δεν είναι αρκετός. Τρία πράγματα που πρέπει να διευθετήσετε νωρίς: ποια έκδοση, πώς φορτώνονται οι γραμματοσειρές και ποια άδεια χρήσης χρησιμοποιείτε τώρα που η έκδοση 6.5 έγινε AGPL. Εκτυπώστε δεδομένα, όχι ιστοσελίδες, και θα αντέξει για χρόνια.