Одно целое число — общее количество страниц в PDF — стоит за удивительно большим числом практических решений: ограничения на загрузку, оценка расхода бумаги для печати, операции разделения, индикаторы прогресса. Большинство библиотек рендеринга PDF лишь отрисовывают страницы и не предоставляют простого счётчика, а отправка файла на сервер только ради чтения количества страниц увеличивает задержку и создаёт проблемы с приватностью.
Когда пользователь заполняет PDF-форму и сохраняет её, введённые значения остаются внутри структур полей документа — а не в виде обычного текста, который можно искать или массово копировать. Для формы с тридцатью или сорока полями ручное переписывание становится узким местом. Более глубокая проблема в том, что каждый тип поля хранит значение по-своему: текстовое поле возвращает строку, флажок возвращает логическое значение, поле со списком отделяет варианты от выбранного значения, а радиокнопка хранит выбранный элемент. Единого универсального вызова «дай мне значение» не существует.
У столбчатой диаграммы с регионами и месяцами на одной оси есть две проблемы, и это не одна и та же проблема. Первая: подписи категорий сливаются в одну строку — «Север», «янв», «Север», «фев» — и читателю приходится мысленно заново группировать, какой месяц относится к какому региону. Вторая: когда к ряду продаж, исчисляющихся в миллионах, добавляется ряд темпов роста, темп роста превращается в плоскую линию, прижатую к базовой линии, потому что одна ось значений не может обслуживать два порядка величин одновременно.
Таблица продаж с двадцатью столбцами чисел точна, но нечитаема. Глаз не может достаточно быстро сравнить 43 210 и 38 900 в строке, чтобы найти слабый квартал, и человек, читающий отчет, знает это — поэтому он просит диаграмму. Но диаграмма для каждого столбца означает двадцать диаграмм, и теперь рабочий лист — это галерея, а не таблица.
Рабочий лист — это не всегда просто сетка с числами. Иногда это холст: блок-схема, набросанная между блоками данных, диаграмма связей, соединяющая команды с проектами, выноска, указывающая от заметки к ячейке, которую она поясняет. Во всех этих случаях недостающий элемент — это линия: прямой штрих между двумя блоками, изогнутая дуга вокруг области, угловой соединитель, который изгибается один раз и продолжается.
Линия между двумя блоками в блок-схеме говорит: «эти элементы связаны». Стрелка от одного к другому говорит: «этот идёт первым». Именно это различие — направление — отличает соединитель от украшения, и именно этого не может сделать базовый API `Lines.AddLine()` на обоих концах. Схеме процесса нужна стрелка, выходящая из каждого шага; диаграмме причинно-следственных связей нужны стрелки, направленные внутрь; для сравнения иногда нужны стрелки с двумя наконечниками, чтобы показать двунаправленную связь. Ничего из этого невозможно с одним `EndArrowHeadStyle`.
Кто-то создал эту книгу много лет назад. Она пересчитывается при изменении данных, итоги меняются так, как уже никто не предскажет, и нет документации — потому что формулы и есть документация. Чтение чисел не расскажет, как они были получены. Чтение правил — расскажет.
Сгенерированная электронная таблица, полная предварительно вычисленных чисел, — это снимок. Она выглядит правильно в момент создания и сразу начинает устаревать: данные, лежащие в её основе, меняются, а числа внутри — нет, и как только файл покидает ваше приложение, никто не может сказать, какие ячейки разрешено изменять. Книга, которая несёт свои формулы, напротив, остаётся живым документом — измените входные данные, и итоги последуют за ними.
Page 2 of 3
Дом Spire.Office page 2