Переносимые планы печати
Отделите логическую разбивку на страницы от нативного вывода: 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 из строго возрастающих уникальных позиций с отсчётом от нуля, где начинается новая страница; адаптация книги сортирует отсоединённые метаданные, не редактируя лист |
Order | TXLSPortablePrintOrder: 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-вывод