Настройка в .NET 6 или выше
Файл Startup.cs
В файле Startup.cs проекта .NET Core эти строки кода определяют конфигурацию конвейера промежуточного ПО с использованием метода MapWhen. Предоставленное предикат проверяет, заканчивается ли путь входящего запроса на DocImage.axd. Внутри этого блока вызывается метод UseDoconut с объектом DoconutOptions в качестве аргумента.
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());Добавить пространства имён Doconut
В вашем проекте добавьте следующие директивы using:
using Doconut;
using Doconut.Configs;
using Doconut.Clouds;Создать объект Viewer
Эта строка создает новый экземпляр класса Viewer, позволяя вам создать объект viewer в вашем коде.
// License is configured via AddDoconut; obtain the viewer from DI.
var docViewer = app.Services.GetRequiredService<Viewer>();Настроить объект DocOptions
Пример инициализации объекта DocOptions с конкретными настройками:
```csharp
// Document opening options – password and session timeout
var docOptions = new DocOptions
{
Password = string.Empty,
TimeOut = 30
};
// Per‑format rendering options – set image resolution via the format‑specific config
var pdfConfig = new PdfConfig
{
ImageResolution = 200
};
```Настройка объекта конфигурации
Инициализировать новый объект PdfConfig с конкретными настройками для обработки PDF‑документов:
var config = new PdfConfig { DefaultRender = true, ExtractHyperlinks = true };Открыть ваш документ
Эта строка вызывает метод OpenDocument объекта viewer, передавая путь к файлу документа, расположенного на сервере, а также ранее сконфигурированные объекты PdfConfig и DocOptions в качестве параметров.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
AllowSearch = true,
AllowCopy = true,
ImageResolution = 150
});Добавить viewer в ваш HTML
<div id="div_ctlDoc"></div>Добавить файлы CSS и JavaScript
Добавьте следующие файлы CSS и JavaScript на страницу. Эти скрипты включены в ZIP‑файл с примерами кода.
<!-- Main Viewer Related Scripts -->
<script src="scripts/splitter.js"></script>
<script src="scripts/docViewer.js"></script>
<script src="scripts/documentLinks.js"></script>
<!-- Viewer functions -->
<script src="scripts/docViewer.UI.js?v=1"></script>Добавить лицензии в ваш проект
Автоматическое обнаружение лицензий
Чтобы инициализировать docViewer с автоматическим обнаружением лицензий, используйте следующую строку:
app.MapPost("/api/open", async (Viewer viewer) =>
{
// The token is opaque — hand it to the widget, never log or persist it.
string token = await viewer.OpenDocumentAsync("wwwroot/files/Sample.pdf");
return Results.Ok(new { token });
});Добавить стандартную лицензию вручную
Вы можете вручную указать путь к единственному файлу лицензии по умолчанию при инициализации viewer.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});Добавить лицензию через поток
Этот метод использует перегрузку Viewer.DoconutLicense(Stream licenseStream) для добавления лицензии с помощью потока.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});Добавить лицензию через XML‑документ
Этот метод использует перегрузку Viewer.DoconutLicense(XMLDocument licence) для добавления лицензии с помощью XML‑документа.
// License XML from a database, environment variable, or secret manager —
// no file on disk. Beaten only by LicenseStream.
builder.Services.AddDoconut(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Вручную добавить несколько лицензий плагинов по умолчанию
Если необходимо указать несколько лицензий, вы можете предоставить список путей к файлам при инициализации viewer.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // session state needs a cache (MVC/Razor Pages already add one)
builder.Services.AddSession(); // Doconut document security rides on ASP.NET session state
app.UseSession(); // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();Добавить лицензию плагина через поток
Этот метод использует перегрузку Viewer.SetLicensePlugin(Stream pluginLicence) для добавления лицензии плагина с помощью потока.
using var pluginLicenseStream = new FileStream("path/to/your/plugin-license.lic", FileMode.Open);
builder.Services.AddDoconut(options =>
{
// The stream takes precedence over LicenseContent, LicensePath, and auto‑search.
options.LicenseStream = pluginLicenseStream;
});Добавить лицензию плагина через XML‑документ
Этот метод использует перегрузку Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) для добавления лицензии плагина с помощью XML‑документа.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});Необходимые пакеты NuGet
Чтобы ваш проект был полностью совместим с .NET Core Standard, необходимо включить следующие пакеты NuGet, перечисленные в алфавитном порядке.
- MessagePack - Version 2.5.140
- Microsoft.Bcl.AsyncInterfaces - Version 8.0.0
- Microsoft.Extensions.Caching.Abstractions - Version 8.0.0
- Microsoft.Extensions.Configuration - Version 8.0.0
- Microsoft.Extensions.Configuration.Abstractions - Version 8.0.0
- Microsoft.Extensions.Configuration.FileExtensions - Version 8.0.0
- Microsoft.Extensions.Configuration.Json - Version 8.0.0
- Microsoft.Extensions.FileProviders.Abstractions - Version 8.0.0
- Microsoft.Extensions.FileProviders.Physical - Version 8.0.0
- Microsoft.Extensions.FileSystemGlobbing - Version 8.0.0
- Microsoft.Extensions.Primitives - Version 8.0.0
- System.Buffers - Version 4.5.1
- System.Formats.Asn1 - Version 8.0.0
- System.Numerics.Vectors - Version 4.5.0
- System.Security.Cryptography.Cng - Version 5.0.0
- System.Security.Cryptography.Pkcs - Version 8.0.0
- System.Text.Encoding.CodePages - Version 8.0.0
- System.Text.Encodings.Web - Version 8.0.0
- System.Text.Json - Version 8.0.3
- System.Threading.Tasks.Extensions - Version 4.5.4
Параметры конфигурации рендеринга
Вы можете настроить поведение рендеринга с помощью следующих параметров:
- CadConfig: используется для файлов DWG, DXF и DGN.
- EmailConfig: используется для файлов EML, EMLX и MSG.
- EpubConfig: используется для файлов EPUB.
- ExcelConfig: используется для файлов Excel и CSV.
- MhtConfig: используется для файлов MHT.
- PptConfig: используется для файлов PowerPoint.
- ProjectConfig: используется для файлов MPP.
- PsdConfig: используется для файлов PSD.
- TxtConfig: используется для файлов TXT.
- TiffConfig: используется для файлов TIFF.
Конфигурация параметров рендеринга
Параметры рендеринга настраиваются с помощью свойства DefaultRender:
- DefaultRender = true : Эта опция обеспечивает более высокое качество рендеринга, но использует больше памяти сервера и процессорного времени.
- DefaultRender = false : Эта опция обеспечивает более быструю отрисовку за счёт небольшого снижения качества.
Как добавить аннотацию изображения
На C#
1. Откройте документ и получите размеры первой страницы. 2. Инициализируйте AnnotationManager с размерами страницы. 3. Создайте ImageAnnotation, указав путь к изображению в imgUrl, и задайте позицию и размер в Rectangle. 4. Добавьте аннотацию в менеджер и загрузите её в просмотрщик документа для отображения.
var token = await viewer.OpenDocumentAsync(pathToFile, config, documentOptions);
// The annotation manager is automatically bound to the opened document's page dimensions.
using var annMgr = viewer.GetAnnotationManager(token);
var imgAnn = new ImageAnnotation(
1,
new Rectangle(600, 700, 750, 300),
"img/sample.png"
);
annMgr.Add(imgAnn);
viewer.LoadAnnotationData(token, annMgr);На JavaScript
1. Убедитесь, что YourController доступен. 2. Создайте новый ImageAnnotation, задав путь к изображению с помощью SetNote. 3. Добавьте и отрисуйте аннотацию, чтобы отобразить её в документе.
function ImageStamp() {
if (null != objctlDoc.YourController()) {
var objStampImage = new ImageAnnotation({ left: 200, top: 200, width: 260, height: 55 });
objctlDoc.YourController().AddAnnotation(null, objStampImage, null);
objStampImage.SetNote('/images/Approved_Stamp.png');
objStampImage.Paint();
}
}Пользовательские шрифты в документах Word
Свойство FontFolders в классе WordConfig указывает пользовательские каталоги, в которых приложение будет искать шрифты. Это особенно полезно при обработке документов Word, которые используют шрифты, не установленные в системных каталогах шрифтов по умолчанию.
var config = new WordConfig
{
FontFolders = new string[] { "C:\\CustomFonts", "D:\\SharedFonts" }
};Важное обновление для Doconut 25.2.0
Необходимо обновить пакет System.Text.Json до версии 8.0.5 во всех ваших проектах. Это обновление критически важно для обеспечения совместимости с последними функциями и устранения важных улучшений безопасности.
Кодировка электронной почты
Свойство EmailEncoding в классе EmailConfig указывает предпочтительную кодировку как темы письма, так и его тела.
var emailConfig = new EmailConfig {
EmailEncoding = Encoding.UTF8 // Set preferred email encoding
};Кодировка темы и тела
Свойства SubjectEncoding и BodyEncoding в классе EmailConfig определяют кодировку, используемую соответственно для темы и тела письма.
var emailConfig = new EmailConfig {
SubjectEncoding = Encoding.UTF8, // Set encoding for the subject
BodyEncoding = Encoding.UTF8 // Set encoding for the body
};Поддержка культуры в Word Viewer
Свойство DocumentCulture в классе WordConfig позволяет явно задать культуру для файлов DOC и DOCX. Это гарантирует, что локализованный контент — такие как даты, валюты и числа — отображается точно так же, как в Microsoft Word. Это особенно полезно для языков со специфическими требованиями к форматированию.
var config = new WordConfig { DocumentCulture = "he-IL" }; // Hebrew (Israel)
var config = new WordConfig { DocumentCulture = "ar-SA" }; // Arabic (Saudi Arabia)
var config = new WordConfig { DocumentCulture = "th-TH" }; // Thai (Thailand)
var config = new WordConfig { DocumentCulture = "ja-JP" }; // Japanese (Japan)