/
afanasevn
/
PdfEncoder
Обзор
Документация
Войти
/
afanasevn
/
PdfEncoder
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/PdfEncoder.Application/Abstractions/IPdfClassifier.cs
70 строк
2 KB
IBS\NAfanasev
Hybrid file processing
06 июл 2026, 18:43
06 июл 2026, 18:43
77054a0
Код
Авторство
О чём код?
using PdfEncoder.Domain.Enums; namespace PdfEncoder.Application.Abstractions; /// <summary> /// Классификация технического типа PDF без ИИ. /// </summary> public interface IPdfClassifier { /// <summary> /// Определяет <see cref="PdfDocumentKind"/> по эвристикам PdfPig. /// </summary> /// <param name="content">Содержимое PDF.</param> /// <param name="ct">Токен отмены.</param> Task<PdfClassificationResult> ClassifyAsync( ReadOnlyMemory<byte> content, CancellationToken ct); } /// <summary> /// Результат классификации PDF. /// </summary> public sealed record PdfClassificationResult { /// <summary> /// Определённый технический тип документа. /// </summary> public PdfDocumentKind Kind { get; init; } /// <summary> /// Постраничная классификация для mixed routing и OCR. /// </summary> public IReadOnlyList<PageClassification> Pages { get; init; } = []; /// <summary> /// Признак наличия AcroForm fields в документе. /// </summary> public bool HasAcroForm { get; init; } } /// <summary> /// Классификация одной страницы. /// </summary> public sealed record PageClassification { /// <summary> /// Номер страницы (1-based). /// </summary> public int PageNumber { get; init; } /// <summary> /// Есть ли на странице достаточный text layer для извлечения без OCR. /// </summary> public bool HasTextLayer { get; init; } /// <summary> /// Число буквенных символов на странице (эвристика PdfPig words). /// </summary> public int LetterCount { get; init; } /// <summary> /// На странице есть embedded images (PdfPig <c>GetImages()</c>). /// </summary> public bool HasEmbeddedImages { get; init; } /// <summary> /// Доля площади MediaBox, занятая embedded images (0..1). /// </summary> public double ImageCoverageRatio { get; init; } }