Οδηγός PDFsharp: Δημιουργία αρχείων PDF με MigraDoc και PdfSharpCore

Οδηγός 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

Πώς να εγκαταστήσετε το PDFsharp από το NuGet στο Visual Studio

Θα εξακολουθείτε να βρίσκετε αναρτήσεις σε φόρουμ από την εποχή του WinForms που σας λένε να βρείτε ένα ZIP, να βρείτε ένα DLL και να προσθέσετε μόνοι σας την αναφορά. Αγνοήστε τις. Εγκαταστήστε το PDFsharp μέσω του NuGet. Ο διαχειριστής πακέτων παρακολουθεί τις εκδόσεις, ώστε να μην χρειάζεται να το κάνετε εσείς.

  1. Ανοίξτε τη λύση σας στο Visual Studio και κάντε δεξί κλικ στο έργο στην Εξερεύνηση λύσεων.
  2. Επιλέξτε Διαχείριση πακέτων NuGet , μεταβείτε στην καρτέλα Αναζήτηση και αναζητήστε "PDFsharp".
  3. Επιλέξτε PDFsharp (Core build) ή PDFsharp-MigraDoc εάν χρειάζεστε και διάταξη εγγράφου. Ελέγξτε αν ο εκδότης είναι η empira Software GmbH.
  4. Κάντε κλικ στην επιλογή Εγκατάσταση και αποδεχτείτε την προτροπή άδειας χρήσης.
  5. Δημιουργήστε το έργο μία φορά για να επιβεβαιώσετε ότι το πακέτο έχει αποκατασταθεί σωστά.

Οι χρήστες του τερματικού μπορούν να παραλείψουν το κλικ:

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

Πού υστερεί το 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. Εκτυπώστε δεδομένα, όχι ιστοσελίδες, και θα αντέξει για χρόνια.

Καμιά ερώτηση?

Δημιουργία PDF από κώδικα .NET, κυρίως. Σκεφτείτε τιμολόγια, αναφορές, ετικέτες αποστολής, πιστοποιητικά. Είναι επίσης χρήσιμο για συγχώνευση και διαχωρισμό ή για την προσθήκη αριθμών σελίδων και υδατογραφημάτων σε PDF που έχει δημιουργήσει κάποιος άλλος. Με το MigraDoc στην κορυφή, τα μεγάλα έγγραφα με πίνακες και γραφήματα δεν είναι ούτε αγγαρεία.

Μέχρι την έκδοση 6.2.4, ναι, είναι MIT και μπορείτε να το διαθέσετε σε προϊόντα επί πληρωμή. Από την έκδοση 6.5.0 υπάρχει ένα δίλημμα. Η επιλογή AGPL δεν κοστίζει τίποτα, αλλά σας κάνει να μοιράζεστε τον πηγαίο κώδικα σας. Η εμπορική κοστίζει χρήματα και όχι. Ο κώδικας εκκίνησης πρέπει να λέει ποιο.

Όχι. Δεν υπάρχει μηχανή HTML ή CSS στο εσωτερικό. Ένα πρόσθετο κοινότητας που ονομάζεται HtmlRenderer.PdfSharp προσπαθεί, αλλά σταματάει στα HTML 4.01 και CSS 2, επομένως οτιδήποτε έχει κατασκευαστεί με flexbox ή grid καταρρέει. Για πραγματικές ιστοσελίδες, οι χρήστες χρησιμοποιούν έναν μετατροπέα που είναι ενσωματωμένος σε ένα πρόγραμμα περιήγησης χωρίς κεφαλές.

Μέσω του NuGet. Κάντε δεξί κλικ στο έργο στο Visual Studio, επιλέξτε Manage NuGet Packages, αναζητήστε "PDFsharp". Από ένα τερματικό, το dotnet add package PDFsharp το κάνει. Θέλετε και πίνακες και σελιδοποίηση; Προσθέστε το PDFsharp-MigraDoc. Παραλείψτε το παλιό κόλπο της χειροκίνητης αντιγραφής DLL.

Διορθώθηκαν διατάξεις και επεξεργασίες σε υπάρχοντα αρχεία: PDFsharp. Οτιδήποτε όπου το κείμενο ρέει, οι πίνακες μεγαλώνουν και οι σελίδες σπάνε από μόνες τους: MigraDoc. Ειλικρινά, πιθανότατα θα καταλήξετε και με τα δύο, και επειδή το MigraDoc τρέχει πάνω από το PDFsharp, τα πάνε μια χαρά.

Το PDFsharp 6 στοχεύει σε .NET 8, 9 και 10, καθώς και .NET Standard 2.0 και .NET Framework 4.6.2. Η έκδοση Core λειτουργεί σε Windows, Linux και macOS. Οι εκδόσεις GDI+ και WPF είναι μόνο για Windows. Πηγαίνετε σε Linux; Ρυθμίστε πρώτα έναν αναλυτή γραμματοσειρών, διαφορετικά θα αντιμετωπίσετε σφάλματα γραμματοσειράς.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.