可移植打印计划
把逻辑分页与原生输出分离:lxPortablePrint 从分离的渲染快照创建不可变打印计划,lxPortableCairo 在 Linux 和 macOS 上把各页画成 PDF、SVG 或 PNG
规划器使用物理点数和完整单元格边界,保留合并区域、重复行列标题,并应用互不相交的打印区域、手动分页符、方向、页边距、居中、缩放与页面顺序,全程不改源工作簿
使用工作簿页面设置
lxPortableWorkbookPrint 中的 CreateXLSPortableWorkbookPrintPlan 为借用的 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 默认值 1;导出保留显式的零维度,XLS/XLSX 转换保留所选模式
百分比缩放忽略过期的适应维度;适应模式忽略存储的百分比缩放,正的适应维度忽略手动分页符;两轴都为零时在 100% 缩放下保留手动分页符,而正的限额只缩小过大内容,不放大过小的范围
逻辑分页取决于所提供的快照几何;打印机驱动度量和 Excel PDF 导出缩放可能改变物理输出,不构成精确视觉等价的保证
直接构建分离计划
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 MiB,最大 1 GiB |
MaxPlanningSteps | 正的有界规划工作量预算,默认 64 Mi 步,最大 2 Gi 步;超限抛出 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 每个逻辑页产出一个文件;布局的文本行检查保留未缩放的快照坐标,而不是逐页的重复位置
既有的输出文件会被拒绝,Windows 原生 Cairo 入口仍显式不受支持;依赖、字体映射、场景与输出限制参见 可移植的无界面输出