可攜式列印計畫
把邏輯分頁與原生輸出分開: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,而無法識別的明確紙張大小會被拒
頁首頁尾內容、列印列欄標號、啟用的列印格線、黑白或草稿外觀、列印註解與錯誤替代值目前都會被拒,因為這個配接器無法如實繪製這些設定;傳統活頁簿預設啟用列印格線,所以這條受支援契約請關閉 PageSetup.PrintGridlines
縮放模式與原生預設
TXLSXWorksheet.PageFitToPages 獨立於其尺寸選擇貼合模式:設定 FitToWidth 或 FitToHeight 即選擇貼合模式,設定 PageScale 則選擇百分比縮放
XLSX 匯入保留 sheetPr/pageSetUpPr/@fitToPage,以及貼合維度省略時 OOXML 預設的一;匯出保留明確的零維度,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) 多載保留分離的頁面記錄,為每個瓷磚裁切與縮放場景內容,並使用計畫的紙張尺寸與邊距;點陣、字型、shaping 與繪製預算對重複內容照樣生效
Layout.PageCount 與計畫相符;PDF 產生一個多頁檔,SVG 與 PNG 則每個邏輯頁一個檔;版面的文字行檢視保留未縮放的快照座標,而不是每頁重複後的位置
既有的輸出檔案會被拒,Windows 上的原生 Cairo 進入點仍明確不受支援;依賴、字型映射、場景與輸出上限請見可攜式無頭輸出