Документация HotXLS / Справочник по API

Переносимые планы печати

Отделите логическую разбивку на страницы от нативного вывода: lxPortablePrint создаёт неизменяемый план печати из отсоединённого снимка рендеринга, а lxPortableCairo рисует его страницы как PDF, SVG или PNG на Linux и macOS

Планировщик работает в физических пунктах и по полным границам ячеек, сохраняет объединённые диапазоны, повторяет заголовки строк и столбцов и применяет непересекающиеся области печати, ручные разрывы, ориентацию, поля, центрирование, масштабирование и порядок страниц, не меняя исходную книгу

Использование настройки страниц книги

CreateXLSPortableWorkbookPrintPlan в lxPortableWorkbookPrint имеет перегрузки для заимствованных TXLSWorkbook и TXLSXWorkbook; обе принимают SheetIndex, OriginRow, OriginColumn, Snapshot и Defaults

Индекс листа и начало снимка отсчитываются от 1; адаптер требует снимок текущего поколения книги и захваченный прямоугольник, содержащий каждую полную область печати и диапазон повторяющихся заголовков

Идентичность снимка включает его поколение, а вызывающий подаёт соответствующие лист и начало; сохраняйте правильный контекст листа при переносе снимка, потому что формат снимка не кодирует идентичность книги или листа

Snapshot := CaptureXLSPortableRenderSnapshot(Owner, 1, 1, 1, 30, 6,
  XLSDefaultPortableRenderLimits, Geometry);
Plan := CreateXLSPortableWorkbookPrintPlan(Workbook, 1, 1, 1,
  Snapshot, XLSDefaultPortablePrintOptions);
Layout := PrepareXLSPortableCairoLayout(Plan, Fonts,
  XLSDefaultPortableCairoOptions);
try
  Files := Layout.Save('/srv/output/report.pdf', xpcfPDF);
  Files := Layout.Save('/srv/output/report.svg', xpcfSVG);
  Files := Layout.Save('/srv/output/report.png', xpcfPNG);
finally
  Layout.Free;
end;

При захвате на Linux или macOS используйте явного поставщика геометрии на файлах шрифтов, описанного в разделе прямой нативный захват книги; самой разбивке на страницы не нужны ни Cairo, ни файлы шрифтов, ни Excel, ни драйвер принтера

Адаптер книги берёт временную аренду на чтение, читает существующие метаданные и возвращает отсоединённые данные; он не принимает сырую книгу через владеющий интерфейс и не удерживает аренду книги в результате

Имена листов в кавычках, экранированные кавычки и разделённые запятыми области печати принимаются только для выбранного листа; ссылки вне захваченного прямоугольника, ссылки на чужие листы, неполные диапазоны заголовков и искажённые диапазоны отклоняются явно

Распознаваемые размеры бумаги — Letter, Tabloid, Ledger, Legal, A3, A4, A5, B4 и B5; неуказанный размер бумаги использует Defaults.PageWidthPoints и Defaults.PageHeightPoints, а нераспознанный явный размер бумаги отклоняется

Содержимое колонтитулов, печатаемые заголовки строк и столбцов, включённые линии сетки печати, чёрно-белый или черновой вид, печать комментариев и подстановки ошибок сейчас отклоняются, потому что этот адаптер не может достоверно нарисовать эти настройки; книги Classic включают линии сетки печати по умолчанию, поэтому для этого поддерживаемого контракта отключите PageSetup.PrintGridlines

Режим масштабирования и нативные значения по умолчанию

TXLSXWorksheet.PageFitToPages выбирает режим вписывания независимо от своих размеров: установка FitToWidth или FitToHeight выбирает режим вписывания, а установка PageScale — масштабирование в процентах

Импорт XLSX сохраняет sheetPr/pageSetUpPr/@fitToPage и значение OOXML по умолчанию — единицу для опущенного измерения вписывания; экспорт сохраняет явные нулевые размеры, а преобразование XLS/XLSX сохраняет выбранный режим

Масштабирование в процентах игнорирует устаревшие размеры вписывания; режим вписывания игнорирует сохранённый процентный масштаб, а положительные размеры вписывания игнорируют ручные разрывы; ноль по обеим осям сохраняет ручные разрывы при масштабе 100%, а положительные лимиты уменьшают oversized-контент, не увеличивая маленький диапазон

Логическая разбивка на страницы зависит от геометрии поданного снимка; метрики драйвера принтера и масштабирование экспорта PDF в Excel могут менять физический вывод и не дают гарантии точного визуального соответствия

Прямая сборка отсоединённого плана

CreateXLSPortablePrintPlan(Snapshot, Areas, Options) принимает TXLSPortablePrintRanges с включающими границами и отсчётом от нуля; пустой массив Areas выбирает весь снимок, а каждый TXLSPortablePrintRange содержит FirstRow, FirstColumn, LastRow и LastColumn

Начните с XLSDefaultPortablePrintOptions, затем задайте поля TXLSPortablePrintOptions из таблицы ниже

ПоляКонтракт
PageWidthPoints, PageHeightPointsПоложительные физические размеры бумаги в пунктах, по умолчанию A4
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPointsНеотрицательные поля, оставляющие положительный печатный прямоугольник, по умолчанию 36 пунктов
Landscape, CenterHorizontally, CenterVerticallyАльбомная ориентация меняет местами размеры портретной; центрирование применяется к телу каждой страницы и её повторяющимся заголовкам
ScalePercentОт 10 до 400, по умолчанию 100; применяется, когда ни одно измерение вписывания не положительное
FitToPagesWide, FitToPagesTallНеотрицательные лимиты страниц, ноль для неограниченной оси; положительные лимиты ищут осуществимый масштаб между 10% и 100%
TitleFirstRow, TitleLastRow, TitleFirstColumn, TitleLastColumnПолные диапазоны заголовков с отсчётом от нуля и включающими границами, либо -1 на обоих концах для отключения оси
RowBreaks, ColumnBreaksМассивы TXLSPortablePrintBreaks из строго возрастающих уникальных позиций с отсчётом от нуля, где начинается новая страница; адаптация книги сортирует отсоединённые метаданные, не редактируя лист
OrderTXLSPortablePrintOrder: xppoDownThenOver или xppoOverThenDown
MaxPagesПоложительный общий лимит страниц, по умолчанию 256 и максимум 100 000
MaxPlanBytesРабочее хранилище, полезная нагрузка отсоединённого снимка и записи страниц разделяют этот положительный бюджет памяти, по умолчанию 64 МиБ и максимум 1 ГиБ
MaxPlanningStepsПоложительный ограниченный бюджет работы планирования, по умолчанию 64 млн шагов и максимум 2 млрд шагов; превышение вызывает EXLSPortablePrintBudget

Геометрия должна быть конечной; скрытые размеры имеют нулевой размер, разрыв страницы не может разрезать объединение, область или заголовок не могут частично пересекать объединение, а негабаритная ячейка или объединение отклоняются вместо молчаливой обрезки

Инспекция и рендеринг результата

IXLSPortablePrintPlan.Snapshot владеет отсоединённым неизменяемым снимком рендеринга, PageCount сообщает логическое количество страниц, а Pages[Index] с отсчётом от нуля возвращает TXLSPortablePrintPage с отсоединённым массивом плиток

Каждая страница открывает AreaIndex, AcrossIndex, DownIndex, своё тело Body с отсчётом от нуля и включающими границами, Scale, PageWidthPoints, PageHeightPoints и Tiles

TXLSPortablePrintTiles содержит не более четырёх записей TXLSPortablePrintTile — для повторяющегося угла, строк заголовков, столбцов заголовков и тела; каждая плитка открывает немасштабированные исходные SourceLeft, SourceTop, SourceRight, SourceBottom и физические назначения DestinationLeft, DestinationTop

Перегрузка PrepareXLSPortableCairoLayout(Plan, Fonts, Options) удерживает отсоединённые записи страниц, отсекает и масштабирует содержимое сцены для каждой плитки и использует размеры бумаги и поля плана; растровые, шрифтовые, шейпинговые и рисовальные бюджеты продолжают применяться к повторяющемуся контенту

Layout.PageCount совпадает с планом; PDF даёт один многостраничный файл, а SVG и PNG — по одному файлу на логическую страницу; инспекция текстовых строк раскладки сохраняет немасштабированные координаты снимка, а не постраничные повторяющиеся позиции

Существующие выходные файлы отклоняются, а точка входа нативного Cairo на Windows остаётся явно неподдерживаемой; о зависимостях, сопоставлении шрифтов, сценах и лимитах вывода см. переносимый headless-вывод