Plans d'impression portables
Séparez la pagination logique de la sortie native : lxPortablePrint crée un plan d'impression immuable depuis un instantané de rendu détaché, et lxPortableCairo dessine ses pages en PDF, SVG ou PNG sous Linux et macOS
Le planificateur emploie des points physiques et des bornes de cellules complètes, préserve les plages fusionnées, répète les titres de lignes et de colonnes, et applique des zones d'impression disjointes, des sauts manuels, l'orientation, les marges, le centrage, la mise à l'échelle et l'ordre des pages sans modifier le classeur source
Employer la mise en page du classeur
CreateXLSPortableWorkbookPrintPlan dans lxPortableWorkbookPrint propose des overloads pour un TXLSWorkbook et un TXLSXWorkbook empruntés ; tous deux acceptent SheetIndex, OriginRow, OriginColumn, Snapshot et Defaults
L'index de feuille et l'origine de l'instantané sont en base un ; l'adaptateur exige un instantané de la génération courante du classeur et un rectangle capturé contenant chaque zone d'impression complète et chaque plage de titres répétés
L'identité de l'instantané inclut sa génération, tandis que l'appelant fournit la feuille et l'origine correspondantes ; conservez le bon contexte de feuille en transportant un instantané, car le format d'instantané n'encode aucune identité de classeur ni de feuille de calcul
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;
Employez le fournisseur de géométrie adossé aux polices explicite décrit dans la capture native directe de classeurs pour capturer sous Linux ou macOS ; la pagination elle-même n'exige ni Cairo, ni fichiers de polices, ni Excel, ni driver d'imprimante
L'adaptateur de classeur prend un bail de lecture temporaire, lit les métadonnées existantes et renvoie des données détachées ; il n'adopte ni un classeur brut via une interface propriétaire, ni ne retient un bail de classeur dans le résultat
Les noms de feuilles entre guillemets, les guillemets échappés et les zones d'impression séparées par des virgules ne sont acceptés que pour la feuille sélectionnée ; des références hors du rectangle capturé, des références à des feuilles étrangères, des plages de titres incomplètes et des plages mal formées sont explicitement rejetées
Les formats de papier reconnus sont Letter, Tabloid, Ledger, Legal, A3, A4, A5, B4 et B5 ; un format de papier non spécifié emploie Defaults.PageWidthPoints et Defaults.PageHeightPoints, tandis qu'un format explicite non reconnu est rejeté
Le contenu d'en-têtes et de pieds de page, les en-têtes de lignes/colonnes imprimés, le quadrillage d'impression activé, l'apparence noir et blanc ou brouillon, l'impression des commentaires et les substitutions d'erreurs sont actuellement rejetés, car cet adaptateur ne peut pas dessiner ces réglages fidèlement ; les classeurs Classic activent le quadrillage d'impression par défaut, donc désactivez PageSetup.PrintGridlines pour ce contrat pris en charge
Mode d'ajustement et défauts natifs
TXLSXWorksheet.PageFitToPages sélectionne le mode d'ajustement indépendamment de ses dimensions : régler FitToWidth ou FitToHeight sélectionne le mode d'ajustement, et régler PageScale sélectionne la mise à l'échelle en pourcentage
L'import XLSX préserve sheetPr/pageSetUpPr/@fitToPage et le défaut OOXML de un pour une dimension d'ajustement omise ; l'export conserve les dimensions zéro explicites, et la conversion XLS/XLSX préserve le mode sélectionné
La mise à l'échelle en pourcentage ignore des dimensions d'ajustement périmées ; le mode d'ajustement ignore une échelle en pourcentage stockée, et des dimensions d'ajustement positives ignorent les sauts manuels ; zéro sur les deux axes conserve les sauts manuels à une échelle de 100%, tandis que des limites positives réduisent un contenu surdimensionné sans agrandir une petite plage
La pagination logique dépend de la géométrie de l'instantané fourni ; les métriques des drivers d'imprimante et la mise à l'échelle de l'export PDF d'Excel peuvent changer la sortie physique et ne constituent pas une garantie d'équivalence visuelle exacte
Construire un plan détaché directement
CreateXLSPortablePrintPlan(Snapshot, Areas, Options) accepte des TXLSPortablePrintRanges inclusifs en base zéro ; un tableau Areas vide sélectionne tout l'instantané, et chaque TXLSPortablePrintRange contient FirstRow, FirstColumn, LastRow et LastColumn
Partez de XLSDefaultPortablePrintOptions, puis réglez les champs de TXLSPortablePrintOptions ci-dessous
| Champs | Contrat |
|---|---|
PageWidthPoints, PageHeightPoints | Dimensions physiques positives du papier en points, A4 par défaut |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | Marges non négatives laissant un rectangle imprimable positif, 36 points par défaut |
Landscape, CenterHorizontally, CenterVertically | Landscape échange les dimensions portrait ; le centrage s'applique au corps de chaque page et à ses titres répétés |
ScalePercent | 10 à 400, 100 par défaut ; s'applique quand aucune dimension d'ajustement n'est positive |
FitToPagesWide, FitToPagesTall | Limites de pages non négatives, zéro pour un axe sans restriction ; des limites positives cherchent une échelle faisable entre 10% et 100% |
TitleFirstRow, TitleLastRow, TitleFirstColumn, TitleLastColumn | Plages de titres complètes inclusives en base zéro, ou -1 aux deux bornes pour désactiver cet axe |
RowBreaks, ColumnBreaks | Tableaux TXLSPortablePrintBreaks de positions uniques strictement croissantes en base zéro où commence une nouvelle page ; l'adaptation du classeur trie les métadonnées détachées sans éditer la feuille |
Order | TXLSPortablePrintOrder : xppoDownThenOver ou xppoOverThenDown |
MaxPages | Limite totale positive de pages, 256 par défaut et 100 000 au maximum |
MaxPlanBytes | Stockage de travail, payload de l'instantané détaché et enregistrements de pages partagent ce budget mémoire positif, 64 MiB par défaut et 1 GiB au maximum |
MaxPlanningSteps | Budget positif et borné de travail de planification, 64 Mi pas par défaut et 2 Gi pas au maximum ; le dépasser lève EXLSPortablePrintBudget |
La géométrie doit être finie ; les dimensions masquées ont une taille nulle, un saut de page ne peut pas couper une fusion, une zone ou un titre ne peut pas intersecter partiellement une fusion, et une cellule ou une fusion surdimensionnée est rejetée au lieu d'être silencieusement coupée
Inspecter ou rendre le résultat
IXLSPortablePrintPlan.Snapshot détient un instantané de rendu immuable détaché, PageCount indique le nombre de pages logiques, et des Pages[Index] en base zéro renvoient un TXLSPortablePrintPage avec un tableau de tuiles détaché
Chaque page expose AreaIndex, AcrossIndex, DownIndex, son Body inclusif en base zéro, Scale, PageWidthPoints, PageHeightPoints et Tiles
TXLSPortablePrintTiles contient au plus quatre enregistrements TXLSPortablePrintTile pour le coin répété, les lignes de titres, les colonnes de titres et le corps ; chaque tuile expose la source non mise à l'échelle SourceLeft, SourceTop, SourceRight, SourceBottom et la destination physique DestinationLeft, DestinationTop
L'overload PrepareXLSPortableCairoLayout(Plan, Fonts, Options) conserve les enregistrements de pages détachés, rogne et met à l'échelle le contenu de scène pour chaque tuile, et emploie les dimensions de papier et les marges du plan ; les budgets raster, police, shaping et dessin continuent de s'appliquer au contenu répété
Layout.PageCount correspond au plan ; le PDF produit un fichier multipage, tandis que SVG et PNG produisent un fichier par page logique ; l'inspection des lignes de texte de la disposition conserve les coordonnées non mises à l'échelle de l'instantané plutôt que les positions répétées par page
Des fichiers de sortie existants sont rejetés, et le point d'entrée Cairo natif Windows reste explicitement non pris en charge ; voir la sortie headless portable pour les dépendances, le mappage de polices, les limites de scène et de sortie