Προβολέας
Η κύρια κλάση προβολής εγγράφων
Viewer (namespace Doconut) είναι το δημόσιο σημείο εισόδου για το άνοιγμα εγγράφων από σελίδες Razor, ελεγκτές MVC, συστατικά Blazor ή ελάχιστα APIs. Είναι sealed, καταχωρημένο ως transient υπηρεσία από το AddDoconut(), και επιλύεται μέσω ένεσης κατασκευής — ποτέ μην το δημιουργείτε απευθείας.
Η προηγούμενη βιβλιοθήκη .NET Standard έδειχνε έναν δημόσιο κατασκευαστή που έπαιρνε τη μνήμη cache, τον HTTP context accessor, και μία ή περισσότερες διαδρομές άδειας. Αυτός ο κατασκευαστής έχει αφαιρεθεί· το service graph παρέχει αυτές τις εξαρτήσεις.
Viewer δεν διατηρεί κατάσταση ανά αίτημα και σκόπιμα δεν υλοποιεί το IDisposable: οι συνεδρίες εγγράφων ζουν ανεξάρτητα στην κρυφή μνήμη συνεδρίας, έτσι η απελευθέρωση της υπηρεσίας δεν μπορεί ποτέ να κλείσει ένα ανοιχτό έγγραφο (δείτε Βασικές Έννοιες → Πώς Λειτουργεί ο Προβολέας).
OpenDocumentAsync
Ανοίγει ένα έγγραφο και επιστρέφει το token συνεδρίας που χρησιμοποιεί το widget του πελάτη για όλες τις επόμενες αιτήσεις. Κάθε άνοιγμα είναι ασύγχρονο — δεν υπάρχει συγχρονική OpenDocument.
| Υπερφόρτωση | Χρήση όταν |
|---|---|
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)Συνολικές σελίδες της ανοιχτής συνεδρίας. Εξαίρεση εάν το token είναι άγνωστο ή έχει λήξει.
Σημαίες Δυνατοτήτων
| Μέλος | Σημασία |
|---|---|
bool IsSearchEnabled | Η τρέχουσα άδεια παρέχει Search |
bool IsAnnotationEnabled | Η τρέχουσα άδεια παρέχει Annotation |
Χρησιμοποιήστε τα σε μια Razor view για να αποδώσετε ένα αδειοδοτημένο Ribbon μόνο όταν ο διακομιστής θα το εξυπηρετήσει πραγματικά — δείτε Γρήγορη Έναρξη.
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 | Δεν επιβάλλεται επί του παρόντος — κρατημένο. Η σύνδεση token ελέγχεται παγκοσμίως από το DoconutOptions.UnsafeMode (δείτε Βασικές Έννοιες → Συνεδρίες & Ασφάλεια). |
Η κλάση εκθέτει επίσης εξειδικευμένες ιδιότητες που είναι σκόπιμα εκτός της κανονικής ροής προβολής ενός μόνο κεντρικού υπολογιστή:
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
bool | IsWebFarm | false | Σημαδεύει τη λειτουργία ανοίγματος ως σενάριο κοινόχρηστης αποθήκευσης. Σημειώστε την κεφαλαιοποίηση — η προηγούμενη βιβλιοθήκη το έγραφε IsWebfarm. |
string | WebFarmPath | "" | Κοινόχρηστη διαδρομή που χρησιμοποιείται από αυτή τη ροή εργασίας. Πρώην WebfarmPath. Κενή στην κανονική προβολή ενός μόνο κεντρικού υπολογιστή, και δεν χρειάζεται στη διαδρομή δημοσίευσης που περιγράφεται στα Κατανεμημένες Αναπτύξεις. |
bool | EditMode | false | Δεσμευμένο για ξεχωριστή ροή εργασίας επεξεργασίας που διανέμεται ξεχωριστά· αφήστε το 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
});| Πεδίο | Παράδειγμα | Σημασία |
|---|---|---|
Αρχικό ^ | ^ | Προαιρετική διάταξη σε όλες τις γωνίες. Χωρίς αυτό, χρησιμοποιείται η κανονική τοποθέτηση υδατογραφήματος. |
| Κείμενο | Confidential | Κείμενο που εμφανίζεται σε κάθε σελίδα. Δεν πρέπει να είναι κενό. |
| Χρώμα | Red | Ονομαστικό χρώμα που κατανοείται από τη στρώση σχεδίασης. |
| Μέγεθος γραμματοσειράς | 24 | Μέγεθος γραμματοσειράς· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή του renderer. |
| Όνομα γραμματοσειράς | Verdana | Ζητούμενη οικογένεια γραμματοσειρών. Βεβαιωθείτε ότι είναι εγκατεστημένη στο περιβάλλον ανάπτυξης. |
| Αδιαφάνεια | 80 | Τιμή byte από 0 έως 255. Πρέπει να αναλυθεί επιτυχώς. |
| Γωνία | -45 | Γωνία περιστροφής σε μοίρες· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή. |
Ο αναλυτής αναμένει ακριβώς έξι πεδία μετά το προαιρετικό ^. Μια μη έγκυρη ορισμός αντικαθίσταται από το ορατό εφεδρικό Invalid Watermark του SDK αντί να εξαφανιστεί σιωπηρά.
Απόφαση άδειας
| Κατάσταση άδειας | Παρεχόμενη προσαρμοσμένη τιμή | Αποτέλεσμα απόδοσης |
|---|---|---|
| Έγκυρη πληρωμένη άδεια προβολέα | Όχι | Καθαρή σελίδα |
| Έγκυρη πληρωμένη άδεια προβολέα | Ναι | Προσαρμοσμένο υδατογράφημα |
| Ενεργός προσωρινός/δείγματος βασικός προβολέας | Όχι | Καθαρή σελίδα βασικού προβολέα |
| Ενεργός προσωρινός/δείγματος βασικός προβολέας | Ναι | Προσαρμοσμένο υδατογράφημα όταν εφαρμόζεται η καθαρή διαδρομή του βασικού προβολέα |
| Άδεια που λείπει, απορρίπτεται, έχει λήξει, λάθος έκδοση ή μη έγκυρο domain | Οποιαδήποτε | Υδατογράφημα επιβολής/αξιολόγησης· η προσαρμοσμένη τιμή δεν το παρακάμπτει |
| Απόδοση plugin υπό κανόνες αξιολόγησης | Οποιαδήποτε | Υδατογράφημα αξιολόγησης |
Η ίδια απόφαση εφαρμόζεται στις εικόνες σελίδων που εξυπηρετούνται και στις εξαγωγές σχολίων. Η έξοδος Animated GIF σφραγίζεται καρέ‑καρέ. Έτσι, ένα προσαρμοσμένο υδατογράφημα είναι χαρακτηριστικό εφαρμογής με άδεια, όχι τρόπος αντικατάστασης ή καταστολής του υδατογραφήματος αξιολόγησης.
API Σχολίων
Φόρτωση και εξαγωγή σχολίων στο διακομιστή. Ο πλήρης οδηγός βρίσκεται στις Οδηγίες → Σχόλια· η σύνοψη είναι:
| Μέλος | Σκοπός |
|---|---|
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) | Φόρτωση σχολίων από το κωδικοποιημένο envelope σελίδας/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 ανά σελίδα με ενσωματωμένα σχόλια |
Κάθε μία από αυτές απαιτεί το token της συνεδρίας. Η μορφή GetAnnotationManager(pageWidth, pageHeight) της προηγούμενης βιβλιοθήκης, που δεν απαιτεί συνεδρία, παραμένει για τη δημιουργία σχολίων εκτός συνεδρίας, αλλά η φόρτωσή τους απαιτεί ακόμη token.
Μεταδεδομένα DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Η μέθοδος υπάρχει για ευθυγράμμιση του API, αλλά αυτό το πακέτο δεν μπορεί να παρέχει τεχνικές ετικέτες DICOM: ο αναγνώστης μεταδεδομένων διανέμεται μόνο σε έκδοση .NET 8. Επιστρέφει 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 (search-gated), IncludeAnnotationCss (annotation-gated).
ScriptConfig σημαίες: IncludeJQuery (απαιτείται από όλα τα άλλα), IncludeBootstrap, IncludeViewerScripts (πυρήνας: docViewer.js + splitter + links), IncludeSearchScripts και IncludeSearchBar (search-gated), IncludeAnnotationScripts και IncludeAnnotationBar (annotation-gated).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Αυτά τα βοηθητικά είναι ο υποστηριζόμενος τρόπος για την παροχή των πόρων του προγράμματος περιήγησης. Εφαρμογές που
αντέγραψαν τα docViewer.js, documentLinks.js και docViewer.UI.js στο wwwroot θα πρέπει
να αφαιρέσουν αυτά τα αντίγραφα μόλις η σελίδα αποδοθεί από τις εκπεμπόμενες ετικέτες.
Ήταν αυτή η σελίδα χρήσιμη;