이식 가능한 인쇄 플랜
논리 페이지 매김을 네이티브 출력에서 분리합니다. 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을 보존합니다. 내보내기는 명시적 0 차원을 유지하고, XLS/XLSX 변환은 선택된 모드를 보존합니다
백분율 배율은 낡은 맞춤 차원을 무시합니다. 맞춤 모드는 저장된 백분율 배율을 무시하고, 양수 맞춤 차원은 수동 나누기를 무시합니다. 두 축 모두 0이면 100% 배율에서 수동 나누기를 유지하고, 양수 한도는 작은 범위를 키우지 않으면서 넘치는 콘텐츠를 줄입니다
논리 페이지 매김은 공급된 스냅샷 지오메트리에 의존합니다. 프린터 드라이버 지표와 Excel PDF 내보내기 배율은 물리 출력을 바꿀 수 있으며 정확한 시각적 동등성은 보장하지 않습니다
분리된 플랜 직접 만들기
CreateXLSPortablePrintPlan(Snapshot, Areas, Options)는 0 기반 포함 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 | 음수 아닌 페이지 한도이며 0은 제한 없는 축입니다. 양수 한도는 10%와 100% 사이에서 실현 가능한 배율을 찾습니다 |
TitleFirstRow, TitleLastRow, TitleFirstColumn, TitleLastColumn | 완전한 0 기반 포함 제목 범위이며, 두 끝점을 -1로 두면 해당 축을 끕니다 |
RowBreaks, ColumnBreaks | 새 페이지가 시작되는 엄격히 오름차순의 고유한 0 기반 위치 배열인 TXLSPortablePrintBreaks입니다. 통합 문서 어댑터는 시트를 편집하지 않고 분리된 메타데이터를 정렬합니다 |
Order | TXLSPortablePrintOrder: xppoDownThenOver 또는 xppoOverThenDown |
MaxPages | 양수 전체 페이지 한도이며 기본값 256, 최대 100,000입니다 |
MaxPlanBytes | 작업 저장소, 분리 스냅샷 페이로드, 페이지 레코드가 이 양수 메모리 예산을 공유하며 기본값 64MiB, 최대 1GiB입니다 |
MaxPlanningSteps | 양수 제한 플래닝 작업 예산이며 기본값 64Mi 단계, 최대 2Gi 단계입니다. 초과하면 EXLSPortablePrintBudget을 던집니다 |
지오메트리는 유한해야 합니다. 숨은 차원은 크기 0이고, 페이지 나누기가 병합을 갈라서는 안 되며, 영역이나 제목이 병합과 부분적으로 교차해서는 안 됩니다. 너무 큰 셀이나 병합은 조용히 잘리는 대신 거부됩니다
결과 검사 또는 렌더링
IXLSPortablePrintPlan.Snapshot은 분리된 불변 렌더 스냅샷을 소유하고, PageCount는 논리 페이지 수를 보고하며, 0 기반 Pages[Index]는 분리된 타일 배열을 가진 TXLSPortablePrintPage를 반환합니다
각 페이지는 AreaIndex, AcrossIndex, DownIndex, 0 기반 포함 Body, Scale, PageWidthPoints, PageHeightPoints, Tiles를 노출합니다
TXLSPortablePrintTiles는 반복되는 모서리, 제목 행, 제목 열, 본문에 대해 최대 네 개의 TXLSPortablePrintTile 레코드를 담습니다. 각 타일은 배율 미적용 소스 SourceLeft, SourceTop, SourceRight, SourceBottom과 물리 대상 DestinationLeft, DestinationTop을 노출합니다
PrepareXLSPortableCairoLayout(Plan, Fonts, Options) 오버로드는 분리된 페이지 레코드를 유지하고 타일마다 장면 콘텐츠를 자르고 배율을 적용하며, 플랜의 용지 크기와 여백을 사용합니다. 래스터·폰트·셰이핑·드로잉 예산은 반복되는 콘텐츠에도 계속 적용됩니다
Layout.PageCount는 플랜과 일치합니다. PDF는 여러 페이지를 담은 파일 하나를 만들고 SVG와 PNG는 논리 페이지마다 파일 하나를 만듭니다. 레이아웃의 텍스트 줄 검사는 페이지별 반복 위치가 아니라 배율 미적용 스냅샷 좌표를 유지합니다
기존 출력 파일은 거부되고, Windows 네이티브 Cairo 진입점은 명시적으로 지원되지 않습니다. 종속성, 폰트 매핑, 장면·출력 한도는 이식 가능한 헤드리스 출력을 참조하세요