Προβολέας
Η κύρια κλάση προβολέα εγγράφων
Viewer (namespace Doconut) είναι το δημόσιο σημείο εισόδου για το άνοιγμα εγγράφων από ελεγκτές MVC, σελίδες Web Forms και χειριστές. Είναι μια προσωρινή υπηρεσία που δημιουργείται από το DoconutHost.Initialize; αποκτήστε την εκεί που τη χρησιμοποιείτε:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();new Viewer() λειτουργεί επίσης μόλις εκτελεστεί το DoconutHost.Initialize — επιλύει τις ίδιες υπηρεσίες — κάτι που διατηρεί τον κώδικα που έχει μεταφερθεί από το κλασικό πακέτο συμβατό. Πριν από το Initialize, πετάει InvalidOperationException.
Viewer δεν διατηρεί κατάσταση εγγράφου ανά αίτηση και σκόπιμα δεν υλοποιεί το IDisposable: οι συνεδρίες εγγράφων ζουν ανεξάρτητα από αυτό, έτσι η απελευθέρωση ενός Viewer δεν μπορεί ποτέ να κλείσει ένα ανοιχτό έγγραφο (δείτε Πώς Λειτουργεί ο Προβολέας).
OpenDocumentAsync
Ανοίγει ένα έγγραφο και επιστρέφει το διακριτικό συνεδρίας που χρησιμοποιεί το widget για κάθε επόμενη αίτηση. Όταν το UnsafeMode είναι false (η προεπιλογή), το διακριτικό χορηγείται στη συνεδρία ASP.NET της τρέχουσας αίτησης — καλέστε το από μια αίτηση που διαθέτει κατάσταση συνεδρίας (δείτε Συνεδρίες & Ασφάλεια).
| Υπερφόρτωση | Χρήση όταν |
|---|---|
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 (HttpPostedFileBase in MVC; HttpPostedFile in Web Forms)
using (var ms = new MemoryStream())
{
await file.InputStream.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(Path.GetFileName(file.FileName)));
}Εξαιρέσεις προς διαχείριση:
LicenseException— βρέθηκε άδεια αλλά απορρίφθηκε (το μήνυμα μεταφέρει τον λόγο), ή η μορφή απαιτεί δυνατότητα plugin που η άδεια δεν παρέχει.FormatNotSupportedException— κανένας προβολέας δεν διαχειρίζεται την επέκταση του αρχείου.InvalidDataException— το περιεχόμενο είναι κατεστραμμένο ή δεν ταιριάζει με την επέκταση του.
OpenDocument (συγχρονικό)
Για κώδικα code-behind σε Web Forms και άλλον κώδικα που δεν χρησιμοποιεί ασύγχρονες σελίδες:
string OpenDocument(string filePath, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(Stream stream, string fileName, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(byte[] bytes, string fileName, BaseConfig? config = null, DocOptions? options = null)Κάθε μέθοδος επιστρέφει το διακριτικό και επίσης το αποθηκεύει στο viewer.Token. Το fileName πρέπει να περιέχει τη σωστή επέκταση. Αυτές οι περιτυλίξεις είναι ασφαλείς για κλήση από μια σελίδα Web Forms: η διαδρομή ανοίγματος δεν επανέρχεται ποτέ στο πλαίσιο της αίτησης ASP.NET, έτσι η αναμονή δεν μπορεί να προκαλέσει αδιέξοδο. Το ίδιο δεν ισχύει για κάθε ασύγχρονο API του Doconut — δείτε την ενότητα Web Forms του Plugin Μετατροπέα.
Κλείσιμο Εγγράφου
void CloseDocument(string token)Αφαιρεί τη συνεδρία (απελευθερώνοντας αμέσως τη μηχανή εγγράφου), αφαιρεί την άδεια του token από τη συνεδρία ASP.NET της τρέχουσας αίτησης και ανακαλεί το token. Προαιρετικό — η κυλιόμενη λήξη εκτελεί τον ίδιο καθαρισμό — αλλά συνιστάται για μεγάλα έγγραφα.
Ερωτήματα Συνεδρίας
| Μέλος | Επιστρέφει |
|---|---|
int GetPageCount(string token) | Συνολικές σελίδες του ανοιχτού εγγράφου |
(int Width, int Height) GetPageDimensions(string token, int page = 1) | Προεπιλεγμένο μέγεθος σελίδας που αποδίδεται στο 100% ζουμ — ο χώρος συντεταγμένων για τα σχόλια που δημιουργούνται στον κώδικα |
IReadOnlyList<string> GetWorksheetNames(string token) | Τα φύλλα εργασίας του υπολογιστικού φύλλου που αποδίδονται, με τη σειρά του βιβλίου εργασίας· κενό για άλλα έγγραφα |
Κάθε μέθοδος ρίχνει εξαίρεση εάν το token είναι άγνωστο ή έχει λήξει.
DocOptions
Επιλογές ανά άνοιγμα, ανεξάρτητες από μορφή (namespace Doconut):
| Τύπος | Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|---|
string | Password | "" | Κωδικός πρόσβασης για προστατευμένα έγγραφα (αντιγράφεται αυτόματα στη διαμόρφωση μορφής). |
string | Watermark | "" | Προσαρμοσμένο κείμενο υδατογραφήματος που σχεδιάζεται στις αποδιδόμενες σελίδες — δείτε παρακάτω. |
int | TimeOut | 60 | Κυλιόμενη λήξη συνεδρίας, σε λεπτά. |
string | BrowserId | "" | Web farms: το πρόγραμμα περιήγησης στο οποίο δεσμεύεται ένα υπογεγραμμένο εισιτήριο. Ορίστε το με DoconutFarmBinding.EnsureBrowserId (δείτε Συνεδρίες & Ασφάλεια). |
string | UserId | "" | Web farms: ο συνδεδεμένος χρήστης στον οποίο δεσμεύεται ένα εισιτήριο, από DoconutFarmBinding.ResolveUserId. |
int | ImageResolution | 0 | Παρωχημένο. Ορίστε το ImageResolution στη διαμόρφωση μορφής αντί αυτού. |
bool | IsSecured | true | Καθορισμένο· δεν επιβάλλεται. Ο έλεγχος πρόσβασης είναι το DoconutOptions.UnsafeMode. |
bool | IsWebFarm / string WebFarmPath | false / "" | Διατηρείται για κώδικα που μετοχίστηκε από το κλασικό πακέτο. Δεν ενεργοποιούν τη λειτουργία φάρμας — το AddDoconutDistributed το κάνει. |
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
});| Πεδίο | Παράδειγμα | Σημασία |
|---|---|---|
Leading ^ | ^ | Προαιρετική διάταξη σε όλες τις γωνίες. Χωρίς αυτό, χρησιμοποιείται η κανονική τοποθέτηση. |
| Text | Confidential | Κείμενο που σχεδιάζεται σε κάθε σελίδα. Δεν πρέπει να είναι κενό. |
| Color | Red | Ένα χρωματικό όνομα. |
| FontSize | 24 | Μέγεθος γραμματοσειράς· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή. |
| FontName | Verdana | Οικογένεια γραμματοσειράς. Πρέπει να είναι εγκατεστημένη στον διακομιστή — το Windows Server έχει λιγότερες γραμματοσειρές από έναν υπολογιστή. |
| Opacity | 80 | 0 έως 255. Πρέπει να μπορεί να αναλυθεί. |
| Angle | -45 | Περιστροφή σε μοίρες· εσφαλμένη αριθμητική είσοδος επιστρέφει στην προεπιλογή. |
Ο αναλυτής αναμένει ακριβώς έξι πεδία μετά το προαιρετικό ^. Μια μη έγκυρη ορισμός αντικαθίσταται από ένα ορατό Invalid Watermark κείμενο αντί να εξαφανίζεται σιωπηλά.
Απόφαση άδειας
| Κατάσταση άδειας | Παρεχόμενη προσαρμοσμένη τιμή | Αποτέλεσμα απόδοσης |
|---|---|---|
| Έγκυρη πληρωμένη άδεια προβολής | Όχι | Καθαρή σελίδα |
| Έγκυρη πληρωμένη άδεια προβολής | Ναι | Προσαρμοσμένο υδατογράφημα |
| Ενεργή προσωρινή/δωρητική άδεια | Όχι | Καθαρή σελίδα |
| Ενεργή προσωρινή/δωρητική άδεια | Ναι | Προσαρμοσμένο υδατογράφημα |
| Απουσία, απόρριψη, λήξη, λανθασμένη έκδοση ή άδεια με μη έγκυρο domain | Οποιαδήποτε | Υδατογράφημα αξιολόγησης· η προσαρμοσμένη τιμή δεν την αντικαθιστά |
Η ίδια απόφαση ισχύει για τις σελίδες που σερβίρονται και για τις εξαγωγές σχολίων. Ένα προσαρμοσμένο υδατογράφημα είναι χαρακτηριστικό μιας αδειοδοτημένης εφαρμογής, όχι τρόπος αντικατάστασης του υδατογραφήματος αξιολόγησης.
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) | Φορτώνει το κωδικοποιημένο περιεχόμενο που επιστρέφει το 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)Σε αυτό το πακέτο επιστρέφει πάντα null, και το αίτημα μεταδεδομένων του widget απαντά 501 Not Implemented: η ανάγνωση ετικετών DICOM δεν είναι διαθέσιμη στο .NET Framework. Η απόδοση DICOM — σελίδες, πλαίσια και animation — λειτουργεί. Δείτε DICOM Plugin.
Βοηθητικά πόρων — ReferenceCss / ReferenceScripts
Εκπέμπει τις ετικέτες <link> και <script> για τους πόρους που εξυπηρετεί η μονάδα πόρων υπό DoconutOptions.ResourcesPath, με σειρά εξάρτησης. Τα αρχεία για λειτουργίες με άδεια (Search, Annotation) εκπέμπονται μόνο όταν η άδεια τα παρέχει.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)
bool IsSearchEnabled { get; } // license state, for guarding ribbon init code
bool IsAnnotationEnabled { get; }CssConfig flags: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search-gated), IncludeAnnotationCss (annotation-gated).
ScriptConfig flags: IncludeJQuery (required by all others), IncludeBootstrap, IncludeViewerScripts (the core viewer scripts), IncludeSearchScripts and IncludeSearchBar (search-gated), IncludeAnnotationScripts and IncludeAnnotationBar (annotation-gated).
Και τα δύο επιστρέφουν HTML: γράψτε τα με @Html.Raw(...) στο MVC 5 (παράγετέ τα στον ελεγκτή — οι προβολές δεν έχουν @inject) ή <%= %> στα Web Forms. Quick Start δείχνει και τα δύο.
RenderViewer
string RenderViewer(string elementId, string token, ViewerConfig? config = null)Επιστρέφει ένα μπλοκ <script> που αρχικοποιεί το widget στο στοιχείο με id elementId και εμφανίζει το έγγραφο: docViewer({...}) που δημιουργείται από το ViewerConfig (προεπιλογή: BasePath: '/', ResPath: 'doconut-res/images'), μετά .View(token). Γράψτε το μετά τα scripts του viewer. Το παραγόμενο script δεν διατηρεί αναφορά στο αντικείμενο viewer, έτσι μια σελίδα με τη δική της γραμμή εργαλείων πρέπει να αρχικοποιήσει το widget χειροκίνητα. Δείτε ViewerConfig.
Web farm
string? AccessToken περιέχει το υπογεγραμμένο εισιτήριο που εκδόθηκε από το πιο πρόσφατο άνοιγμα όταν η διανεμημένη λειτουργία είναι ενεργή και το UnsafeMode είναι false; είναι null σε έναν μόνο διακομιστή. Στείλτε το στο widget με το token: objViewer.View(token, access).
Ήταν αυτή η σελίδα χρήσιμη;