Προβολέας
Η κύρια κλάση προβολής εγγράφων
Viewer (namespace Doconut) είναι το δημόσιο σημείο εισόδου για το άνοιγμα εγγράφων από σελίδες Razor, ελεγκτές MVC, συστατικά Blazor ή ελάχιστα APIs. Είναι sealed, καταχωρημένο ως transient υπηρεσία από το AddDoconut(), και επιλύεται μέσω ένεσης κατασκευής — ποτέ μην το δημιουργείτε απευθείας.
Viewer δεν διατηρεί κατάσταση ανά αίτηση και σκόπιμα δεν υλοποιεί το IDisposable: οι συνεδρίες εγγράφων ζουν ανεξάρτητα στην κρυφή μνήμη συνεδρίας, έτσι η απελευθέρωση της υπηρεσίας δεν θα μπορούσε ποτέ να κλείσει ένα ανοικτό έγγραφο (δείτε Core Concepts → How the Viewer Works).
OpenDocumentAsync
Ανοίγει ένα έγγραφο και επιστρέφει το διακριτικό συνεδρίας που χρησιμοποιεί το widget του πελάτη για όλες τις επόμενες αιτήσεις.
| Υπερφόρτωση | Χρήση όταν |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Άνοιγμα από δίσκο με αυτόματη ανίχνευση μορφής και την προεπιλεγμένη διαμόρφωση της μορφής |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Χρειάζεστε επιλογές απόδοσης ανά μορφή (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Το έγγραφο δεν είναι αρχείο στον δίσκο (μεταφόρτωση, βάση δεδομένων, blob). Το fileInfo πρέπει να περιέχει τη σωστή επέκταση — αυτή καθορίζει την ανίχνευση μορφής |
// Simple open
string token = await viewer.OpenDocumentAsync(path);
// With per-format config and options
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// From an upload
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));Εξαιρέσεις προς διαχείριση:
LicenseException— μια βρεθείσα άδεια απορρίπτεται (το μήνυμα μεταφέρει τον λόγο απόρριψης), ή η μορφή χρειάζεται δυνατότητα plugin που δεν παρέχεται πλέον. Η λήξη του ημερολογίου χωρίς μήνυμα απόρριψης μετατρέπεται σε απόδοση με υδατογράφημα αντί για εξαίρεση.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— το περιεχόμενο του αρχείου είναι κατεστραμμένο ή δεν ταιριάζει με την επέκτασή του.
CloseDocument
void CloseDocument(string token)Αφαιρεί τη συνεδρία από την κρυφή μνήμη (απελευθερώνοντας τη μηχανή εγγράφου αμέσως), διαγράφει το δείκτη ασφαλείας και ανακαλεί την άδεια πρόσβασης. Προαιρετικό — η κυλιόμενη λήξη εκτελεί τον ίδιο καθαρισμό — αλλά συνιστάται για μεγάλα έγγραφα.
GetPageCount
int GetPageCount(string token)Συνολικές σελίδες της ανοικτής συνεδρίας. Εξαίρεση εάν το διακριτικό είναι άγνωστο ή έχει λήξει.
DocOptions
Επιλογές ανά άνοιγμα, ανεξάρτητες από τη μορφή (namespace Doconut):
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
string | Password | "" | Κωδικός πρόσβασης για προστατευμένα έγγραφα (αντιγράφεται αυτόματα στη διαμόρφωση μορφής). |
int | ImageResolution | 0 | Obsolete. Διατηρείται μόνο για συμβατότητα — ορίστε το ImageResolution στη διαμόρφωση μορφής αντί αυτού. |
string | Watermark | "" | Προσαρμοσμένο κείμενο υδατογραφήματος που σχεδιάζεται στις αποδομένες σελίδες. Συμβολοσειρά μορφής: "^Text~Color~FontSize~FontName~Opacity~Angle", π.χ. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Κυλιόμενη λήξη συνεδρίας σε λεπτά. |
bool | IsSecured | true | Δεν επιβάλλεται αυτή τη στιγμή — διατηρημένο. Η σύνδεση διακριτικού ελέγχεται παγκοσμίως από το DoconutOptions.UnsafeMode (δείτε Core Concepts → Sessions & Security). |
Η κλάση εκθέτει επίσης εξειδικευμένες ιδιότητες που είναι σκόπιμα εκτός της κανονικής ροής προβολής ενός μόνο κεντρικού υπολογιστή:
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
bool | IsWebFarm | false | Σημαδεύει τη λειτουργία ανοίγματος ως σενάριο web-farm. Χρησιμοποιήστε μόνο με την αντίστοιχη αρχιτεκτονική κοινόχρηστης αποθήκευσης/συνεδρίας. |
string | WebFarmPath | "" | Κοινόχρηστη διαδρομή που χρησιμοποιείται από τη εξειδικευμένη ροή εργασίας web-farm. Κενή στην κανονική προβολή ενός μόνο κεντρικού υπολογιστή. |
bool | EditMode | false | Διατηρημένο για τη ροή εργασίας του Editor που διανέμεται ξεχωριστά· αφήστε το false για την τυπική προβολή. |
Προσαρμοσμένο υδατογράφημα
DocOptions.Watermark χρησιμοποιεί έξι πεδία χωρισμένα με tilde. Ένα προαιρετικό αρχικό ^ ζητά τη διάταξη σε όλες τις γωνίες:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Πεδίο | Παράδειγμα | Σημασία |
|---|---|---|
Leading ^ | ^ | Προαιρετική διάταξη σε όλες τις γωνίες. Χωρίς αυτό, χρησιμοποιείται η κανονική τοποθέτηση υδατογραφήματος. |
| Text | Confidential | Κείμενο που αποδίδεται σε κάθε σελίδα. Δεν πρέπει να είναι κενό. |
| Color | Red | Ονομαστικό χρώμα που κατανοείται από το επίπεδο σχεδίασης. |
| FontSize | 24 | Μέγεθος γραμματοσειράς· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή του renderer. |
| FontName | Verdana | Ζητούμενη οικογένεια γραμματοσειράς. Βεβαιωθείτε ότι είναι εγκατεστημένη στο περιβάλλον ανάπτυξης. |
| Opacity | 80 | Τιμή byte από 0 έως 255. Πρέπει να αναλυθεί επιτυχώς. |
| Angle | -45 | Γωνία περιστροφής σε μοίρες· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή. |
Ο αναλυτής αναμένει ακριβώς έξι πεδία μετά το προαιρετικό ^. Μια μη έγκυρη ορισμός αντικαθίσταται από το ορατό fallback Invalid Watermark του SDK αντί να εξαφανιστεί σιωπηρά.
Απόφαση άδειας
| Κατάσταση άδειας | Παρεχόμενη προσαρμοσμένη τιμή | Αποτέλεσμα απόδοσης |
|---|---|---|
| Έγκυρη πληρωμένη άδεια προβολέα | Όχι | Καθαρή σελίδα |
| Έγκυρη πληρωμένη άδεια προβολέα | Ναι | Προσαρμοσμένο υδατογράφημα |
| Ενεργή προσωρινή/δοκιμαστική βασική άδεια προβολέα | Όχι | Καθαρή σελίδα βασικού προβολέα |
| Ενεργή προσωρινή/δοκιμαστική βασική άδεια προβολέα | Ναι | Προσαρμοσμένο υδατογράφημα όταν εφαρμόζεται η καθαρή διαδρομή βασικού προβολέα |
| Άδεια που λείπει, απορρίπτεται, έχει λήξει, λανθασμένη έκδοση ή μη έγκυρο domain | Οποιοδήποτε | Υδατογράφημα επιβολής/αξιολόγησης· η προσαρμοσμένη τιμή δεν την αντικαθιστά |
| Απόδοση plugin υπό κανόνες αξιολόγησης | Οποιοδήποτε | Υδατογράφημα αξιολόγησης |
Η ίδια απόφαση εφαρμόζεται στις εικόνες σελίδων που εξυπηρετούνται και στις εξαγωγές σημειώσεων. Η έξοδος Animated GIF σφραγίζεται καρέ‑καρέ. Έτσι, ένα προσαρμοσμένο υδατογράφημα είναι χαρακτηριστικό εφαρμογής με άδεια, όχι τρόπος αντικατάστασης ή καταστολής του υδατογραφήματος αξιολόγησης.
API Σημειώσεων
Φόρτωση και εξαγωγή σημειώσεων στο διακομιστή. Η πλήρης περιήγηση βρίσκεται στα Guides → Annotations· η επιφάνεια είναι:
| Μέλος | Σκοπός |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Διαχειριστής δεσμευμένος στις διαστάσεις σελίδας της ανοικτής συνεδρίας |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Διαχειριστής με ρητές διαστάσεις σελίδας |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Διαχειριστής ανεξάρτητος από τη συνεδρία |
void LoadAnnotationData(string token, AnnotationManager manager) | Φορτώνει σημειώσεις που δημιουργήθηκαν σε C# στη συνεδρία |
void LoadAnnotationData(string token, string annotationData) | Φορτώνει σημειώσεις από το κωδικοποιημένο page/Base64 περιτύλιγμα που επιστρέφεται από το AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Φορτώνει σημειώσεις από XML |
XmlDocument GetAnnotationXML(string token) | Εξάγει τις σημειώσεις της συνεδρίας ως XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF με ενσωματωμένες σημειώσεις |
Task<int> ExportAnnotationsToPngAsync(…) | Αρχεία PNG με ενσωματωμένες σημειώσεις |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP με PNG ανά σελίδα με ενσωματωμένες σημειώσεις |
Μεταδεδομένα DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Η μέθοδος υπάρχει για ευθυγράμμιση του API, αλλά ο προβολέας DICOM .NET 6 δεν μπορεί να παρέχει τεχνικές ετικέτες. Επιστρέφει null για συνεδρίες DICOM και μη‑DICOM· σε συνεδρία DICOM γράφει επίσης μια εφάπαξ προειδοποίηση που εξηγεί τον περιορισμό της πλατφόρμας. Η απόδοση σελίδας, πλαισίου και animation παραμένει υποστηριζόμενη.
Βοηθητικά πόρων — ReferenceCss / ReferenceScripts
Εκπέμπει τις ετικέτες <link>/<script> για τους ενσωματωμένους πόρους που παρέχονται από το UseDoconutResources(), με τη σωστή σειρά εξαρτήσεων. Τα πακέτα για λειτουργίες υπό άδεια όπως η αναζήτηση και οι σημειώσεις εκπέμπονται μόνο όταν η άδεια τις ενεργοποιεί, διατηρώντας το UI του πελάτη συνεπές με τη συμπεριφορά του διακομιστή.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Σημαίες CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (υπό άδεια αναζήτησης), IncludeAnnotationCss (υπό άδεια σημειώσεων).
Σημαίες ScriptConfig: IncludeJQuery (απαιτείται από όλα τα άλλα), IncludeBootstrap, IncludeViewerScripts (πυρήνας: docViewer.js + splitter + links), IncludeSearchScripts και IncludeSearchBar (υπό άδεια αναζήτησης), IncludeAnnotationScripts και IncludeAnnotationBar (υπό άδεια σημειώσεων).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Ήταν αυτή η σελίδα χρήσιμη;