Draagbare headless uitvoer
Beschikbaar sinds versie 2.384.100 als een begrensde uitvoerpijplijn met expliciete capture- en rendering-API's
Leg een ondersteund bereik uit een Classic XLS- of XLSX-werkmap op Windows vast, transporteer zijn onveranderlijke snapshot en render PDF, SVG of PNG op Linux of macOS met Free Pascal en native Cairo
De capture-adapter gebruikt de werkmapengine; capture op Windows gebruikt zijn standaard geometrieservice, terwijl native capture op Linux en macOS een expliciete FreeType/HarfBuzz-geometrieservice kan meeleveren, ondersteund door door de toepassing gekozen lettertypebestanden
De aparte native consumer accepteert lxPortableRender-scènes via lxPortableCairo, zonder Excel of een desktopsessie; zijn geometrie-API gebruikt ook de bestaande draagbare werkmapweergave- en render-geometrie-units
De consumer accepteert een onveranderlijke scène of transferstream; de platformvereisten voor het laden en berekenen van werkmappen worden apart beschreven bij Free Pascal-ondersteuning
Een bestaand werkbladbereik vastleggen
CaptureXLSPortableRenderSnapshot in lxPortableWorkbookCapture accepteert een IXLSWorkbook of IXLSXWorkbookOwner, met expliciete of standaard TXLSPortableRenderLimits; twee extra overloads accepteren expliciete limieten gevolgd door een IXLSRenderGeometry-provider die tot de capture-weergave is beperkt
SheetIndex en de inclusieve Row1, Col1, Row2, Col2 zijn 1-based; de resulterende snapshot bewaart zero-based posities relatief aan de vastgelegde rechthoek
program CaptureRectangle;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, lxHandleX, lxPortableRender,
lxPortableWorkbookCapture;
var
Workbook: TXLSXWorkbook;
Owner: IXLSXWorkbookOwner;
Snapshot: IXLSPortableRenderSnapshot;
Stream: TFileStream;
begin
Workbook := TXLSXWorkbook.Create;
Owner := Workbook;
if Workbook.Open('report.xlsx') <> 1 then
raise Exception.Create('Cannot open report.xlsx');
Snapshot := CaptureXLSPortableRenderSnapshot(Owner, 1, 1, 1, 30, 6);
Stream := TFileStream.Create('report.hxrs', fmCreate);
try
SaveXLSPortableRenderSnapshot(Snapshot, Stream,
XLSDefaultPortableRenderLimits);
finally
Stream.Free;
end;
Owner := nil;
end.
Houd de eigenaarsinterface in leven zolang je het werkmapobject gebruikt; geef de interface vrij in plaats van een interface-eigen werkmap handmatig vrij te geven
Voor Classic XLS gebruik je TXLSWorkbook en IXLSWorkbook uit lxHandle met dezelfde capture-aanroep
Capture leest bestaande formulecaches en weigert elke formule in de rechthoek zonder cache; het herberekent nooit impliciet, haalt geen externe data op en registreert geen nieuwe stijlen in de bronwerkmap
Herbereken expliciet vóór de capture wanneer je toepassing verse formuleresultaten nodig heeft; een bestaande cache wordt gerenderd zoals opgeslagen, dus capture garandeert niet zijn versheid
De bewerking houdt een leesweergave vast en controleert de werkmapgeneratie voordat hij terugkeert; zijn teruggegeven snapshot is losgemaakt van werkmapeigendom en blijft bruikbaar nadat de werkmap is vrijgegeven
Uiterlijk en capture-grenzen
De snapshot bevat opgemaakte weergavetekst, fysieke afmetingen in punten, opgeloste RGB-kleuren, ondersteunde cellettertypen en uitlijningen, opvullingen, randen en volledige samengevoegde rechthoeken; verborgen rijen en kolommen hebben grootte nul
Ondersteund lettertype-uiterlijk omvat vet, cursief, enkele onderstreping en doorhaling; ondersteund cel-uiterlijk omvat effen opvullingen, horizontale uitlijning links/midden/rechts, verticale uitlijning boven/midden/onder, terugloop, krimpen en leesvolgorde rechts-naar-links
Dunne, middelste, dikke, haarlijn-, dubbele, gestippelde, onderbroken en middel-onderbroken werkmapranden mappen naar de draagbare randstijlen en puntbreedtes; andere randstijlen worden geweigerd
Ondersteunde rich text draagt effectieve run-lettertypen, puntgroottes, RGB-kleuren, vet, cursief, enkele onderstreping, doorhaling en superscript of subscript op run-niveau; gewone celomtrek-/schaduw-/verticale lettertype-effecten, niet-ondersteunde onderstreepstijlen, gradiënt- of patroonopvullingen, diagonale randen, inspringing, tekstrotatie en niet-ondersteunde uitlijningen worden geweigerd
Een capture-rechthoek moet elke samengevoegde cel volledig bevatten; afgeknipte, overlappende of inconsistente samenvoegingen en incompatibele stijlen langs een samengevoegde buitenrand worden geweigerd
Bladachtergronden en niet-ondersteunde bladsoorten weigeren de capture; ondersteunde PNG/JPEG-afbeeldingen en gewone rechthoek-/ellipstekstvormen in beide werkmapfacades worden vastgelegd als geordende scèneobjecten, samen met XLSX-celafbeeldingen, Boolean-selectievakjes en de hieronder beschreven ondersteunde gegroepeerde XLSX-grafieksubset; niet-ondersteunde grafieken, shape-presets, WordArt, gegroepeerde transformaties, zwevende besturingselementen, Slicers, Timelines en sparklines worden geweigerd wanneer hun opgeloste voetprinten de rechthoek snijden
Niet-ondersteunde inhoud met een betrouwbaar opgeloste voetprint buiten de rechthoek kan naast capture bestaan; een onoplosbare tekenvoetprint weigert in plaats van mogelijk overlappende inhoud stilletjes weg te laten
Classic-tabelstijl die de rechthoek snijdt weigert; ingebouwde en ondersteunde aangepaste XLSX-tabelsecties worden opgelost in losgemaakte stijlcontext, met sectiegrote ruiten en directe celformaat-overschrijvingen
Voor ondersteunde geïmporteerde tabel-secties met effen of impliciete differentiële opvullingen levert RGB bgColor de zichtbare achtergrond; RGB fgColor alleen laat de overgeërfde achtergrond onveranderd, en een sectie met beide kleuren gebruikt zijn achtergrondkleur
Geïmporteerde tabelsecties met uiterlijk dat de getypeerde samenvatting niet kan representeren, weigeren wanneer die sectie geldt, waaronder onderstreping, getalnotaties, expliciet gewiste vet/cursief, lettertypeschema's, een expliciet geen-opvulling-patroon en niet-ondersteunde kleurvormen; een niet-gerelateerde sectie buiten de vastgelegde rechthoek blokkeert capture niet
Ondersteunde voorwaardelijke opmaak wordt toegepast zonder formule-evaluatie: gegecachte numerieke of datumvergelijkingen tegen letterlijke numerieke grenzen, letterlijke Boolean- of numerieke expressies, tekst-bevat-/voorvoegsel-/achtervoegselregels, lege waarden en fouten; hogere-prioriteit-uiterlijk wint per ondersteunde eigenschap, en XLSX StopIfTrue stopt lagere-prioriteit-matchende regels
Classic-tekstregels vereisen een letterlijke string-naald en matchen gegecachte stringcellen; XLSX-tekstregels gebruiken hun opgeslagen tekstcriteria
Ondersteund differentieel uiterlijk omvat opgeloste themakleuren met tint en gewone geïndexeerde kleuren; geïmporteerde automatische kleuren, niet-thema-tint, een differentiële opvulling met zowel voor- als achtergrondkleur, en niet-ondersteunde rand-, uitlijnings-, doorhalings- of ander niet-representeerbaar differentieel uiterlijk worden geweigerd wanneer de matchende regel geldt
Voorwaardelijke formules die evaluatie vereisen, aggregaat- of datumafhankelijke regels, kleurschalen, gegevensbalken en pictogramsets worden geweigerd waar ze worden aangetroffen; het aantal overlappende voorwaardelijke-opmaakregels is begrensd
Date1904-conversie kiest de toepasselijke rauwe numerieke-notatiesectie vóór het toepassen van de kalenderoffset; inactieve kalendersecties veranderen gewone numerieke weergave niet, en Boolean-waarden blijven Boolean
Een gekozen Date1904-kalendersectie in combinatie met opmaakvoorwaarden of verlopen-tijd-constructies weigert; ook gequote of geëscapete sectiescheiders weigeren, en deze grens blokkeert een gekozen gewone numerieke sectie niet alleen omdat een andere sectie een kalenderformaat is
Rich text en geordende tekenscènes
TXLSPortableCell.RichText is een array van TXLSPortableTextRun-records met Text, FontFamily, FontSizePoints, FontStyles, ColorRGB en BaselineShiftPoints; samengevoegde run-tekst moet exact gelijk zijn aan de weergavetekst van de cel
XLSX-runs erven weggelaten eigenschappen van het effectieve vastgelegde cellettertype, inclusief ondersteunde tabel- en voorwaardelijke opmaak; expliciet toegewezen false-vlaggen en expliciete none-/baseline-/automatische-kleurwaarden overstijgen de overerving
Native shared strings en inline strings behouden run-grenzen en witruimte; niet-ondersteunde native lettertypekinderen, attributen, namespaces, thema-/geïndexeerde rich-kleuren en fonetische annotaties weigeren in plaats van zichtbaar uiterlijk stilletjes te verliezen
Classic-runs lossen hun opgeslagen BIFF-lettertypeindices op tot volledige effectieve run-lettertypen; fonetische metadata en niet-ondersteunde run-lettertypen weigeren, en capture behoudt werkmapgeneratie en stijlpools
Classic-tekstvormen lezen bestaande OfficeArt-eigenschappen en TXO-lettertyperuns zonder tekenwrappers aan te maken of de werkmap te wijzigen; ankers gebruiken echte rij-/kolomafmetingen en offsets, ondersteunde effen opvullingen en contouren behouden hun kleuren en breedtes, en ingesloten PNG/JPEG-bytes worden losgemaakt vóór transport
Rechthoekige tekst gebruikt de native marges van 7,2 pt horizontaal en 3,6 pt verticaal; ellipstekst gebruikt daarnaast zijn ingeschreven tekstrechthoek en houdt gewone tekst binnen de vormcontour in beide werkmapfacades
Geïmporteerde Classic-rechthoek- en ellipscontainers behouden hun getypeerde tekst en opmaak; overgeslagen native shape- of groepsmetadata zonder oplosbare voetprint weigert de capture expliciet, terwijl onbekende objectstaartrecords, tekenextensies, rotatie, niet-effen opvullingen en niet-ondersteunde lijnstijlen een snijdend object weigeren
Geïmporteerde XLSX-tweecellige rechthoek- en ellipsankers ondersteunen expliciete RGB-effen opvullingen met alpha, effen of onderbroken/gestippelde contouren, fysieke ankeroffsets en één gewone rich-text-alinea; elke run behoudt zijn effectieve lettertype, puntgrootte, kleur, vet, cursief, enkele onderstreping en doorhaling, inclusief expliciete vet- of cursief-resets
De geïmporteerde shape-lezer reserveert rauwe XML-werkgeheugen vóór het parsen en controleert item-, byte- en tekstbudgetten coöperatief; het behoudt werkmaptekenvolgorde en leesleases zonder shapemodellen of afwezige cellen aan te maken
Onbekende native shape-eigenschappen, effecten, thema's, rotaties, gegroepeerde transformaties, meerdere alinea's en niet-ondersteunde ankertypes worden expliciet geweigerd; een opgeloste niet-ondersteunde voetprint buiten de capture-rechthoek blokkeert het gevraagde gebied niet
Superscript en subscript op run-niveau gebruiken twee derde van de run-lettertypegrootte en een basislijnverschuiving van een derde van de oorspronkelijke puntgrootte; een stijlgrens die een Unicode-shapingcluster splitst, of een CRLF-reeks die incompatibele run-grenzen overschrijdt, weigert tijdens native layout
TXLSPortableSceneObject draagt een Kind, puntgebaseerde X, Y, Width, Height, cliprechthoek, opvullings-/omtrekkleuren en dekking, optionele padpunten, tekstcel of gecodeerde rasterbytes en afmetingen
TXLSPortableSceneKind bevat xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG en xpskJPEG; arrayvolgorde is tekenvolgorde, waarbij latere objecten eerdere objecten bedekken
De extra CreateXLSPortableRenderSnapshot-overload accepteert een TXLSPortableSceneObjects-array; query IXLSPortableRenderSceneSnapshot voor zero-based Objects en ObjectCount, waarvan de getters losgemaakte kopieën teruggeven inclusief run-, punt- en rasterarrays
Celafbeeldingen en selectievakjespaden gaan aan zwevende tekenobjecten vooraf; zwevende tekenobjecten behouden werkmapvolgorde, fysieke ankers en viewport-clipping, en tekstvormen gebruiken het minor-thema-lettertype op 11 punten met tekstmarges van 7,2 pt horizontaal en 3,6 pt verticaal
PNG- en JPEG-afbeeldingen worden native gedecodeerd na preflight van header, pixelformaat en bytes; ondersteunde zwevende afbeeldingen behouden transparantie en uitrekgeometrie, terwijl celafbeeldingen binnen de cel of volledige samengevoegde rechthoek passen met behoud van beeldverhouding
Bijsnijden, rotatie, schaduwen, luminantie/gamma-aanpassing, tegeling, SVG-begeleiders en live camera-koppelingen blijven niet-ondersteund; bewaarde afbeelding-XML wordt gevalideerd tegen het ondersteunde uiterlijk, dus verborgen afbeeldingen, onbekende geneste metadata, eigenschappen in vreemde namespaces, niet-rechthoekige afbeeldingsgeometrie en niet-gemodelleerde transformaties weigeren alleen wanneer hun voetprint de capture overlapt
Boolean-cel-selectievakjes gebruiken een themaneutrale vectorbox en optioneel vinkje, inclusief effectieve besturingselementen die zijn overgeërfd uit rij- en kolomformaten; de gevraagde celdoorloop is begrensd vóór traversatie, andere soorten besturingselementen en lege of niet-Boolean selectievakjeswaarden weigeren, en ondersteunde celscènes onderdrukken fallback-tekst van scalaire Boolean- of beeldfouten
Een standaardselectievakje is invoer-metadata en fabriceert geen Boolean voor een afwezige cel; expliciet wissen van een direct celbesturingselement maskeert een overgeëfd besturingselement, terwijl het lezen van captures schaarse afwezigheid en de werkmapgeneratie behoudt
XLSReadPortableImageDimensions valideert een begrensde PNG IHDR of ondersteunde eight-bit sequentiële/progressieve JPEG-frame en geeft zijn gedeclareerde breedte en hoogte terug; decoderen blijft de verantwoordelijkheid van de renderer
IXLSPortableSceneCaptureSource.ReadPortableSceneObjects gebruikt 1-based werkmapcoördinaten en puntgebaseerde scènecoördinaten relatief aan het bereik, valideert het bereik en coöperatieve limieten en geeft verbruikte byte-, tekst- en itemaantallen terug; HasPortableCellScene identificeert cellen waarvan de scalaire weergave wordt vervangen door hun vastgelegde scène
Native layout CellCount telt rastercellen en LineCount omvat ook tekenscèneobjecten; de regel-CellIndex van een tekstobject is CellCount plus zijn zero-based volgnummer onder tekenscèneobjecten, terwijl GetCellGeometry beperkt blijft tot rastercellen
Scalaire snapshots serialiseren verder als HXRSNP01; snapshots met runs of scèneobjecten serialiseren als HXRSNP02, en de loader accepteert beide versies met hetzelfde onveranderlijke eigendoms- en invoerpositie-terugrolcontract
Het gecombineerde itembudget telt opgeslagen cellen, rich-runs, scèneobjecten en padpunten; bytelimieten rekenen gestage en losgemaakte arrays, tekst, gecodeerde rasterpayloads en begrensde native metadata-inspectie mee vóór toewijzing
Draagbare snapshot-API
| Symbool | Contract |
|---|---|
EXLSPortableRender | Exception die wordt gegeven bij ongeldige snapshotdata, niet-ondersteund capture-uiterlijk, onbeschikbare native backend, resourcelimieten of renderfouten |
TXLSPortableFontStyle, TXLSPortableFontStyles | xpfsBold, xpfsItalic, xpfsUnderline en xpfsStrikeout, gecombineerd als set |
TXLSPortableHorizontal, TXLSPortableVertical | xphLeft, xphCenter, xphRight en xpvTop, xpvCenter, xpvBottom |
TXLSPortableBorderStyle, TXLSPortableBorder | xpbsNone, xpbsSolid, xpbsDashed, xpbsDotted en xpbsDouble; elke rand draagt Style, WidthPoints en ColorRGB |
TXLSPortableCell | Zero-based Row/Column, positieve RowSpan/ColumnSpan, weergave-Text, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical en vier LeftBorder/TopBorder/RightBorder/BottomBorder-records |
TXLSPortableCells, TXLSPortableSizes | Dynamische arrays van opgeslagen cellen en fysieke rij-/kolomgroottes in punten |
TXLSPortableRenderLimits | MaxGridCells, MaxStoredCells, MaxBytes en MaxTextCharacters begrenzen constructie, capture en serialisatie |
XLSDefaultPortableRenderLimits | Geeft 2000000 rastercellen, 2000000 opgeslagen cellen, 67108864 bytes en 16777216 UTF-16-teksttekens terug |
XLSDefaultPortableCell | Initialiseert een celspan met Calibri op 11 punten en standaard op nul gezet uiterlijk; zet zijn positie en gewenste uiterlijk vóór constructie |
CreateXLSPortableRenderSnapshot | Valideert en kopieert generatie, rijhoogtes, kolombreedtes en opgeslagen cellen naar een losgemaakte onveranderlijke interface; cellen moeten uniek zijn, in rij-major-volgorde, binnen de grenzen liggen en niet-overlappende spans hebben |
IXLSPortableRenderSnapshot | Alleen-lezen Generation, RowCount, ColumnCount, CellCount, zero-based RowHeightPoints, ColumnWidthPoints en gekopieerde Cells-records |
| Snapshot-getter-methoden | GetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth en GetCell stellen dezelfde waarden bloot; ongeldige geïndexeerde toegang geeft een exception |
SaveXLSPortableRenderSnapshot | Valideert en serialiseert één snapshot naar een begrensde privébuffer en kopieert daarna de volledige HXRSNP01- of HXRSNP02-payload naar de meegegeven stream op zijn actuele positie |
LoadXLSPortableRenderSnapshot | Leest de geversione little-endian-snapshot met strikte UTF-8-tekst, valideert aantallen, geometrie, stijlen en spans en weigert achterblijvende data; bij een fout wordt de invoerstreampositie hersteld |
Alle limieten moeten positief zijn; het gevalideerde maximum is 2000000 raster-/opgeslagen cellen, 1073741824 bytes en 268435456 teksttekens, met afmetingen van hooguit 1048576 rijen op 16384 kolommen
MaxGridCells telt de volledige rechthoek, inclusief niet-opgeslagen lege cellen; CellCount telt opgeslagen zichtbare cellen en samengevoegde ankers en kan kleiner uitvallen
Generation registreert de brongeneratie of een door de toepassing geleverde waarde; het is metadata en geen live koppeling aan een werkmap of automatische versheidscontrole
Native rendering en expliciete lettertypen
XLSPortableCairoBackendAvailable rapporteert de beschikbaarheid van de gecompileerde native backend; native uitvoer vereist Free Pascal op Linux of macOS, met Cairo, FreeType, HarfBuzz en FriBidi-bibliotheken beschikbaar voor het proces
macOS-builds koppelen de vier native bibliotheken expliciet; een privé-afhankelijkheidsprefix en een expliciet loaderpad voor kindprocessen kunnen die leveren zonder gedeelde compilerinstellingen of shellprofielen te wijzigen
Windows Delphi XE5, Win32 en Win64 kunnen de draagbare interfaces compileren en snapshotserialisatie gebruiken, maar het voorbereiden van native Cairo-layout rapporteert daar backend-onbeschikbaarheid
Geef een expliciete lettertypeketen mee aan PrepareXLSPortableCairoLayout; de renderer probeert eerst matchende familie en vet/cursief-stijl, daarna same-style-fallbacks in meegegeven volgorde, en vereist glyph-dekking voor elke ondersteunde tekstcluster
Lever de werkelijke regular-, bold-, italic- en bold-italic-bestanden aan die je vastgelegde inhoud nodig heeft; er is geen systeemlettertypen-detectie of synthetische vet/cursief-substitutie, en ontbrekende bestanden, stijltoewijzingen of glyph-dekking weigeren
Lettertypebytes worden vastgelegd vóór shaping, dus het wijzigen van een bestand raakt latere layouts terwijl een bestaande layout zijn vastgelegde bytes behoudt; FaceIndex kiest de niet-negatieve face in een lettertypebestand of -collectie
Native bewerkingen worden geserialiseerd voor FreeType-face-veiligheid; onveranderlijke snapshots en inspectie van voorbereide layouts vereisen geen live werkmap
Fonts[0].FamilyName := 'Calibri'; Fonts[0].FileName := '/srv/fonts/Regular.ttf'; Fonts[0].FaceIndex := 0; Fonts[0].Bold := False; Fonts[0].Italic := False;
Hier is Calibri een expliciete familiealias voor het gekozen bestand, zodat de toepassing de lettertypetoewijzing beheert; inspecteer de uitvoermetrieken wanneer je naar een ander lettertype mapt
De renderer ondersteunt harde regeleinden, uitbreiding van tabs naar vier spaties, alinea-bidirectionele ordening, gevormde ligaturen en combinerende tekens, hebzuchtige terugloop en krimpen-om-passend-te-maken; terugloop gaat vóór krimpen
Terugloop behoudt de geïmplementeerde clustergrenzen voor combinerende tekens, variatieselectors, ZWJ en virama en geeft de voorkeur aan spaties en ideografische spaties; het is geen complete UAX #29-grafeem-implementatie of Unicode-regelafbrekingsalgoritme, en terugloopgrenzen voor regional-indicator en Hangul-Jamo zijn niet gegarandeerd
Lettertypegroottes resolveren naar 1/64 punt en tekst wordt geclipt op celgrenzen; PDF sluit expliciete lettertypen in met logische tekstmappings, SVG gebruikt vector-glyphpaden, en PNG tekent dezelfde gepositioneerde glyphs op de gevraagde DPI
Een layout voorbereiden en inspecteren
| Symbool | Contract |
|---|---|
TXLSPortableFontFile, TXLSPortableFontFiles | Eén expliciete toewijzing bevat FamilyName, FileName, FaceIndex, Bold en Italic; de dynamische array is geordend en bevat tussen 1 en 64 toewijzingen |
TXLSPortableCairoFormat, TXLSPortableOutputFiles | xpcfPDF, xpcfSVG of xpcfPNG, en een array van uitvoerbestandsnamen die bestandsopslag teruggeeft |
TXLSPortableCairoOptions | Paginabreedte/-hoogte, vier marges, celpadding en raster-DPI, plus limieten voor pagina, glyph, regel, layout, uitvoer, lettertype, shaping en tekenen |
XLSDefaultPortableCairoOptions | Initialiseert elke optie met begrensde standaardwaarden; gebruik het vóór het overschrijven van afzonderlijke velden |
PrepareXLSPortableCairoLayout | Valideert en kopieert een snapshot, legt expliciete lettertypebytes vast en geeft een beheerde voorbereide TXLSPortableCairoLayout terug; geef die vrij met Free |
TXLSPortableCairoLayout | Stelt PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save en Destroy bloot |
TXLSPortableTextLineInfo | Een gekopieerd regelrecord heeft CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints en logische Text |
TXLSPortableCellGeometry | Een gekopieerde rechthoek heeft XPoints, YPoints, WidthPoints en HeightPoints in de volledige layout |
GetTextLine(Index), GetCellGeometry(Index) | Zero-based geïndexeerde inspectie van voorbereide regels en opgeslagen cellen; ongeldige indices weigeren |
Paginering clippt vaste afdrukgebiedstegels in across-then-down-volgorde; een cel of tekstfragment dat paginagrenzen overschrijdt verschijnt op elke snijdende pagina, zonder automatisch passend maken van hele cellen, herhaling van werkblafdruktitels of interpretatie van werkmap-pagina-instelling
Renderer-opties en grenzen
| Velden | Standaardwaarden en betekenis |
|---|---|
PageWidthPoints, PageHeightPoints | 595 op 842 punten |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | 36 punten elk; marges moeten een positieve afdrukbare rechthoek overlaten |
CellPaddingPoints, RasterDPI | 2 punten en 96 DPI; DPI beïnvloedt PNG-afmetingen |
MaxPages, MaxGlyphs, MaxLines | 256 pagina's, 2000000 gevormde glyphs en 200000 tekstregels |
MaxLayoutBytes | 268435456 bytes voor begrensd layoutwerk en rasteroppervlaktecontroles |
MaxOutputBytes | 268435456 bytes per gerenderde uitvoerbuffer, dekkend voor de volledige PDF of één SVG/PNG-pagina in plaats van de som van aparte pagina-bestanden |
MaxFontBytes | 134217728 bytes over expliciete lettertype-invoerbestanden voor één layout |
MaxShapedCharacters, MaxDrawOperations | 16000000 elk, begrenzend shapingwerk en tekenwerk per pagina-cel |
Ongeldige of niet-eindige geometrie en niet-positieve werkbudgetten weigeren; pagina-afmetingen zijn afgekapt op 100000 punten en raster-DPI op 1200, met extra byte-, aantal- en rasteroppervlaktecontroles vóór rendering
De native procesbrede lettertypebyte-pool staat daarnaast hooguit 256 verschillende buffers en 256 MiB toe; exact identieke bytes mogen opslag delen, en capaciteit wordt pas vrijgegeven wanneer het werkelijke Cairo-eigen lettertypeface zijn buffer vrijgeeft
Geef elke layout vrij wanneer je klaar bent; de library reset geen gedeelde Cairo-caches, en een logisch voltooide layout kan lettertypebytes resident laten terwijl native Cairo nog een face beheert
Uitvoer schrijven en fouten afhandelen
SaveToStream(Stream, Format, PageIndex = 0) schrijft alle pagina's voor PDF en vereist PageIndex = 0; SVG en PNG schrijven de gekozen zero-based pagina
Snapshotserialisatie en native rendering voltooien in privé begrensde buffers vóór het kopiëren naar de doelstream; validatie- of renderfouten behouden die, maar een schrijffout in de stream van de aanroeper kan gedeeltelijke bytes achterlaten en volgt het eigen faalgedrag van die stream
Save(FileName, Format) schrijft één PDF-bestand of één SVG/PNG-bestand per pagina en geeft hun paden terug; bestandsnamen met meerdere pagina's krijgen -0001, -0002 en verdere achtervoegsels vóór de extensie
Bestaande bestands- of mapbestemmingen weigeren; elke opslag zet alle pagina's in staging, publiceert exclusieve nieuwe bestemmingen en ruimt zijn eigen gestage/gepubliceerde uitvoer op bij een fout
Het bestandssysteem moet de native exclusieve staging- en koppelingspublicatiebewerkingen ondersteunen; aparte PDF-, SVG- en PNG-opslagen zijn aparte bewerkingen en vormen geen gecombineerde transactie
Zelfstandige Linux-consumer
Tests/Portable/RenderPortableSnapshot.pas is een complete consumer die een snapshot laadt, één layout voorbereidt en alle drie de formaten opslaat; bouw hem op Linux met de draagbare units en native bibliotheken geïnstalleerd
fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas ./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96
fonts.tsv is UTF-8-tekst met vier door tabs gescheiden velden per toewijzing: familiealias, absoluut Linux-lettertypepad, face-index en een van regular, bold, italic of bolditalic
Calibri /srv/fonts/Regular.ttf 0 regular Calibri /srv/fonts/Bold.ttf 0 bold Calibri /srv/fonts/Italic.ttf 0 italic Calibri /srv/fonts/BoldItalic.ttf 0 bolditalic
Gebruik werkelijk geïnstalleerde of door de toepassing geleverde lettertypebestanden en kies een nieuwe uitvoerbasis, want bestaande doelbestanden worden geweigerd; neem extra same-style-fallbacks op voor scripts die de eerste toewijzing niet dekt
Stream := TFileStream.Create('report.hxrs', fmOpenRead or fmShareDenyWrite);
try
Snapshot := LoadXLSPortableRenderSnapshot(Stream,
XLSDefaultPortableRenderLimits);
finally
Stream.Free;
end;
Options := XLSDefaultPortableCairoOptions;
Layout := PrepareXLSPortableCairoLayout(Snapshot, Fonts, Options);
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;
Gegroepeerde grafiekregistratie
XLSRecordCachedChartScene in lxPagination registreert de puntgebaseerde primitieven van de bestaande grafieklayout-renderer in een onveranderlijke draagbare scenerepresentatie; zijn bron moet een losgemaakte TXLSXChart zijn zonder beherend werkblad en zonder bewaarde native XML, dus registratie kan werkbladverwijzingen niet oplossen of werkmapcaches niet vernieuwen
De huidige subset ondersteunt kolom-, staaf-, lijn-, spreidings-, cirkel-, donut- en gewone éénreeks-oppervlaktegrafieken met één primaire plotgroep, eindige numerieke waardecaches en strikt oplopende begrensde cacheindices; spreidings-categoriecaches bevatten numerieke X-coördinaten, terwijl de andere families opgeslagen categorielabels gebruiken
Kolom-, staaf-, lijn- en oppervlakte-waardecaches moeten aaneengesloten zero-based indices hebben; schaarse categoriewaarde-gaten weigeren, en registratie vouwt ontbrekende indices nooit uit tot een grote array
Staafplots behouden horizontale geometrie en categorische labels; cirkel- en donutplots gebruiken categoriele legendas FirstSliceAng en HoleSize en laten numerieke assen weg, terwijl gewone éénreeks-oppervlakteplots een gevulde veelhoek rond de nul-basislijn behouden
Lijn- en spreidingsreeksen ondersteunen onafhankelijke lijnzichtbaarheid, expliciete RGB-kleur en puntdikte via LineVisible, LineColorRGB en LineWidthPoints; LineStyleSet, LineColorSet en LineWidthSet onderscheiden expliciete instellingen van overgeërfde standaardwaarden, en EffectiveLineVisible lost de bestaande alleen-opvulling-conventie voor reeksen op
Markers ondersteunen de automatische cirkel, een expliciete cirkel of geen marker; een expliciete MarkerSize van 2 tot en met 72 zet zijn puntdiameter, en MarkerFillSet en MarkerBorderSet onderscheiden een expliciete zwarte RGB-waarde van nul van automatische kleurkeuze; verbindende segmenten worden getekend vóór dekvolle datamarkers
Expliciete markerranden zonder opgeslagen breedte gebruiken de gewone lijn van 0,75 punt, terwijl legendasamples de cirkeldiameter afkappen op 6 punten; aangevraagde titellettertypen worden weggeschreven op de werkelijke rich-text-run én zijn standaardteksteigenschappen, zodat hun zichtbare grootte, kleur en nadruk behouden blijven wanneer Excel de grafiek exporteert
Niet-ondersteunde grafiekfamilies, gestapelde of meerdere-reeksen-oppervlakteplots, meerdere-reeksen-cirkelplots, galerijstijlen, afgeronde hoeken, secundaire of gecombineerde plotgroepen, datumassen, aangepaste getalnotaties, logaritmische assen, aangepast snijgedrag, gedraaide tekst, trendlijnen, foutbalken, hiërarchische categorieën, gegevenslabels, andere markervormen en ontbrekende waardecaches geven EXLSPortableRender vóór rendering
Aangepaste waarde-as-ticklettertypen, secundaire rasters, expliciete hoofd-/secundaire eenheden, ongeldige expliciete reekskleuren en niet-ondersteunde asposities weigeren; staaflegendes vereisen voorlopig de gewone plaatsing rechts, en cirkelplots vereisen een eindig niet-nul gegroepeerd totaal en begrensde geometrie met een vroege conservatieve reservering voor boogberekeningswerkgeheugen
De teruggegeven array behoudt primitieve tekenvolgorde, expliciete kleuren, lettertypen, tekstuitlijning, dekking en grafiek-clippinggrenzen; item-, byte- en tekstadministratie omvat conservatieve renderer-werkgeheugenreserveringen, en coöperatieve cachecontroles gaan aan de toewijzing van werkarrays vooraf
XLSValidateCachedChartSceneModel voert dezelfde begrensde cache- en uiterlijk-preflight uit op een model zonder werkbladcellen op te lossen; de XLSX-capture-brug gebruikt deze controle vóór het klonen en registreert ondersteunde geschreven grafiekmodellen met lokale eendimensionale A1-verwijzingen, fysieke native ankeroffsets, bereik-clipping en tekenvolgorde
De platformneutrale recorder staat in lxPortableChart; de bestaande lxPagination-ingangspunten delen dezelfde layout- en primitieve registratie-inhoud en behouden het gedrag van de Windows-renderer met matchende onveranderlijke scènebytes en budgetadministratie per ondersteunde familie
Native Workbook-capture op Linux en macOS gebruikt de hieronder beschreven expliciete geometrie-overload; geïmporteerde RGB-opvulling van reeksen, plotgebiedachtergrond, grafiekachtergrond en grafiekrand worden teruggehaald uit hun eigen namespace-opgeloste shape-eigenschappen zodat een geneste reekskleur de plotachtergrond niet kan overschrijven
Geïmporteerde bewaarde ChartML wordt alleen geaccepteerd wanneer zijn namespace-uitgebreide element-, attribuut- en significantetekststroom matcht met de ondersteunde getypeerde reconstructie; namespace-aliassen en attribuutvolgorde normaliseren, terwijl niet-gemodelleerde native extensies, vreemde attributen en niet-ondersteund uiterlijk conservatief weigeren
Rauwe XML- en reconstructie-werkbudgetten worden gecontroleerd vóór kloon- en projectiewerk; alleen de losgemaakte kopie wist zijn gevalideerde bewaarde XML, en de bron behoudt native metadata, celopslag, cache-inhoud en generatie
Capture doorloopt de onderliggende OfficeArt-tekenvolgorde, inclusief grafiekframes die ontbreken in de publieke Shapes-wrapper, en weigert een snijdend niet-ondersteund frame in plaats van het stilletjes weg te laten
Classic gegroepeerde grafieken met gedeclareerd uiterlijk
Classic BIFF8-capture ondersteunt de zeven gewone grafiekfamilies hierboven wanneer hun kernrecords, lokale opgeslagen waarden, expliciete lineaire schalen en uiterlijk representeerbaar zijn; hij leest behouden records en beschikbare formulecaches zonder formules te evalueren, schaarse opslag uit te vouwen of gecompileerde formuliebomen te klonen
Gebruik TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) om een aparte alleen-lezen weergave te maken met een bevroren set TXLSClassicChartAppearanceDeclaration-waarden geleverd door IXLSClassicChartAppearanceSource; Geometry is optioneel op Windows en levert expliciete native lettertypemetingen op Linux of macOS
TXLSClassicChartAppearanceDeclarations is de dynamische array van primitieve declaraties die een toepassing kan gebruiken om die bron te implementeren
Geef die geconfigureerde weergave mee aan CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); coördinaten zijn 1-based en de adapter herstelt het actieve werkblad van de aanroeper wanneer de capture eindigt of weigert
De gewone capture-ingangspunten blijven onopgeloste effectieve Classic-layout- of legenda-lettertypen weigeren; het aparte weergave-ingangspunt gebruikt de al bevroren declaraties en geometrieprovider
| Declaratielid | Contract |
|---|---|
Generation, SheetIndex, ObjectId | De vastgepinde werkmapgeneratie, 1-based werkbladindex en werkelijke opgeslagen grafiekobjectidentiteit; verouderde generaties, ontbrekende of herhaalde identiteiten en identiteiten die bij een ander object horen worden geweigerd |
HasChartSize, ChartWidthPoints, ChartHeightPoints | Een expliciete eindige positieve grafiekframegrootte in punten; hij behoudt de opgeslagen ankerorigin en tekenvolgorde, terwijl een false-vlag de van het anker afgeleide afmetingen houdt |
HasPlotInnerRectangle, PlotInnerRectangle | Een expliciete binnenste plotrechthoek zonder labels en astitels; hij is vereist voor dit pad met gedeclareerd uiterlijk |
HasTitleRectangle, TitleRectangle | Een expliciete titelrechthoek wanneer de grafiek een titel heeft; brontekst, lettertypefamilie, nadruk en kleur komen nog steeds uit gevalideerde kernrecords |
HasLegendRectangle, LegendRectangle | De gedeclareerde legendagrenzen wanneer een legenda aanwezig is |
HasLegendFontSize, LegendFontSizePoints | De expliciete effectieve puntgrootte van de aanroeper voor een aanwezige legenda; kernlettertypefamilie, nadruk en kleur worden behouden |
TXLSPortableChartRectangle | Left, Top, Width en Height zijn eindige punten relatief aan het vastgelegde grafiekframe; actieve rechthoeken vereisen positieve afmetingen binnen dat frame |
Count, GetCount, ReadDeclaration | De bron rapporteert een begrensd aantal en geeft één primitief record per zero-based index terug zolang de weergave is geconfigureerd; declaraties worden gekopieerd vóór latere capture |
Deze waarden zijn door de aanroeper gedeclareerd uiterlijk, geen automatische Excel-layout of afgeleide lettertypeschaling; haal ze uit een onafhankelijk gecontroleerde bron of een door de toepassing gedefinieerde layout en beoordeel de uitvoer met de expliciete native lettertypetoewijzing die voor rendering wordt gebruikt
Expliciete frame-afmetingen en binnenste plotgrenzen moeten genoeg ruimte overlaten voor de gevalideerde aslabel-lettertypen; onvoldoende labelruimte weigert in plaats van tekst af te knippen of een passende schaalfactor toe te passen
Toepassingen houden de werkmapeigenaar in leven tot de weergave wordt vrijgegeven; de geleende weergave houdt een leeslease vast en behoudt de declaratiebron, terwijl de resulterende onveranderlijke snapshot noch de werkmap noch de provider vasthoudt
Ondersteunde kernprojectie omvat letterlijke effen opvullingen, zichtbare effen lijnen, cirkelmarkers, titel- en legendatekst, categorieplaatsing en begrensde expliciete numerieke ticks; automatische schalen, onopgelost automatisch marker-uiterlijk, afvlakking, onbekende rich-extensies, vreemde of niet-lineaire reeksverwijzingen en niet-representeerbare puntstijlen weigeren vóór uitvoer
Geometrie of een legendagrootte declareren machtigt niet het negeren van onbekende grafiekextensies of ongevalideerde stijlen; byte-, tekst-, opgeslagen-cel- en scenelimieten blijven gelden voor behouden brongegevens, declaraties, losgemaakte caches en registratiewerkgeheugen
De extra XLSValidateCachedChartSceneModel- en XLSRecordCachedChartScene-overloads accepteren TXLSCachedChartSceneAppearance voor een losgemaakt model; initialiseer het met XLSDefaultCachedChartSceneAppearance vóór het zetten van expliciete besturingselementen
De XLSReadClassicChartScene op lager niveau in lxClassicChartScene geeft een door de aanroeper beheerde losgemaakte TXLSXChart en primitief uiterlijk- en budgettellers terug vanuit een behouden TXLSCustomChart, zijn exacte broncalculator en een geleasede TXLSClassicChartSceneSource; geef het teruggegeven model vrij na registratie
TXLSClassicChartSceneSource.ReadAppearance levert een primitieve declaratie, ReadCell leest begrensde vastgepinde lokale opgeslagen waarden, ReadFont vult de meegegeven tekststijl met begrensde effectieve kernlettertypedata, en PaletteColor lost expliciete opgeslagen paletitems op; toepassingsimplementaties moeten de vastgepinde bron behouden en elke geleverde byte- en tekenquota naleven
| Scène-uiterlijk-lid | Betekenis |
|---|---|
SeriesMarkerSizePoints | Begrensde puntdiameters per reeks, inclusief gebroken waarden; nul houdt de markergrootte van het model aan en een niet-nul-overschrijving moet van 2 tot en met 72 punten zijn |
OverrideBorder, BorderColorRGB, BorderWidthPoints | Expliciet grafiekframe-contour-uiterlijk |
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPoints | Expliciete verf en puntbreedtes voor as, tick en hoofdraster |
AreaFillOpacity, SeriesFillAlpha | Oppervlakte-dekking en reeksopvulling-alpha |
UseAxisTickControls, CategoryBetween | Gevalideerde expliciete asbesturingselementen en categorische plaatsing |
TitleOffsetXPoints, TitleOffsetYPoints | Eindige offsets toegepast op de gewone titelpositie van de recorder |
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangle | Letterlijke puntrechthoeken relatief aan het grafiekframe |
PieRadiusRatio | Cirkelplot-straal als begrensde fractie van de kleinste plotdimensie |
Grafiekprimitieven volgen het bestaande layoutbeleid van HotXLS; grafiekgalerij-uiterlijk dat de niet-gemodelleerde standaardwaarden van Excel vereist blijft een expliciete niet-ondersteunde grens
Directe native werkmap-capture
CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) geeft een IXLSRenderGeometry terug die wordt ondersteund door dezelfde expliciete lettertypebestanden, FreeType, HarfBuzz en tekstshaping als de native uitvoer; kolombreedtes gebruiken de werkelijk gemeten maximale cijferbreedte met de werkmapcalibratie
De provider is eigenaar van losgemaakte lettertypebytes en een begrensde metriccache, controleert lettertype- en layoutbudgetten vóór toewijzing en valideert meetverzoeken vóór het wijzigen van gegecachte status; een volle cache kan ongecachte metingen teruggeven zonder boven zijn capaciteit uit te groeien
Capture controleert dat de providergeneratie en alle calibratievelden matchen met de actuele alleen-lezen werkmapweergave, behoudt de provider voor die weergave en laat de standaard geometriefabriek van de werkmap onveranderd; gewone standaard native geometrie blijft een expliciete GDI-grens
Leg de generatie vast via een expliciet vrijgegeven weergave vóór het aanmaken van de provider; het vasthouden van een tijdelijk interfaceresultaat kan zijn leeslease vasthouden tot de omliggende scope eindigt
View := Owner.CreateReadOnlyView; Generation := View.Generation; View := nil; Geometry := CreateXLSPortableCairoRenderGeometry(Fonts, Workbook.CaptureRenderCalibration, Generation, xlsrgbBitmap, XLSDefaultPortableCairoOptions, 4096); Snapshot := CaptureXLSPortableRenderSnapshot(Owner, 1, 1, 1, 30, 6, XLSDefaultPortableRenderLimits, Geometry);
Native consumers compileren met LX_PORTABLE_CORE en de bijbehorende native afhankelijkheden; Windows-aanroepen naar de native Cairo-geometriefabriek worden expliciet geweigerd, terwijl Windows-capture zijn bestaande geometriefabriek kan gebruiken via dezelfde scope-overloads
Werkelijke native capture ondersteunt de hierboven beschreven gemodelleerde scalaire, rich-text, ondersteunde raster-, gewone shape- en zeven gegroepeerde grafiekfamilies; grafiekcapture behoudt de oorspronkelijke geïmporteerde ChartML, gegroepeerde punten, schaarse celopslag, packed storage en de werkmapgeneratie
Voor onveranderlijke afdrukbereiken, marges, passend of percentages schalen, herhaalde titels, handmatige einde pagina's en paginering van hele cellen of samengevoegde cellen, zie draagbare afdrukplannen
Geavanceerde capture-brug
IXLSRenderCaptureSource in lxSemanticSnapshot is de interne coördinatie-interface die wordt geïmplementeerd door ondersteunde alleen-lezen werkmapweergaven; gewone toepassingen roepen de capture-overloads op eigenaarsbasis aan
TXLSClassicReadOnlyWorkbookView en TXLSXReadOnlyWorkbookView implementeren IXLSRenderCaptureSource, inclusief de acht rendermethoden hieronder; deze klassen coördineren capture via alleen-lezen weergaven, en de adapter beheert hun levensduur terwijl toepassingen hun werkmapeigenaarsinterface vasthouden en CaptureXLSPortableRenderSnapshot aanroepen
Hun bestaande TryReadCell-methode levert een opgeslagen-cel-snapshot via de alleen-lezen weergave; de rendermethoden voegen losgemaakt uiterlijk en geometrie toe voor draagbare capture
| Lid of helper | Doel |
|---|---|
ValidateRenderRange | Controleert 1-based rechthoekgrenzen en voetprinten van niet-ondersteund uiterlijk vóór capture |
ReadRenderStyle | Geeft losgemaakte TXLSSemanticCellStyle-metadata en een rich-text-aanwezigheidsvlag terug voor een 1-based cel |
IXLSRenderRichTextCaptureSource, ReadRenderRichText | Optionele weergave-uitbreiding die begrensde losgemaakte TXLSRenderTextRuns teruggeeft; elke TXLSRenderTextRun bevat Text en een effectieve semantische Style, met gebruik van de meegegeven basisstijl en positieve run-/bytequota zonder cellen te materialiseren of stijlpools te wijzigen |
RenderRowHeightPoints, RenderColumnWidthPoints | Geven fysieke geometrie terug en vouwen verborgen afmetingen samen tot nul |
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometry | Optionele weergave-uitbreiding die een expliciete provider pas vasthoudt na generatie- en calibratievalidatie; ongeldige providers laten de vastgehouden weergaveprovider onveranderd |
ReadRenderMerge | Rapporteert de volledige inclusieve 1-based samengevoegde rechthoek die een cel bevat |
ResolveRenderColor | Lost semantisch thema-/geïndexeerde/RGB-uiterlijk op naar een draagbare RGB-kleur, met gebruik van de meegegeven standaardwaarde waar ondersteund |
RenderDate1904, RenderRightToLeft | Stellen werkmap-datasysteem- en bladleesvolgorde-context bloot |
XLSRenderCaptureLiteral | Herkent de ondersteunde subset van letterlijke Booleans, eindige getallen of eenvoudig gequote tekst voor capture zonder evaluatie |
XLSRenderCaptureIntersects | Toetst door witruimte gescheiden lokale A1-bereiken aan een 1-based rechthoek en weigert onopgeloste bereiksyntaxis |
XLSRenderCaptureCondition | Evalueert de ondersteunde conditiesubset tegen een bestaande scalair; vergelijkingsoperatorcodes 1 tot en met 8 betekenen tussen, niet-tussen, gelijk, niet-gelijk, groter, kleiner, groter-of-gelijk en kleiner-of-gelijk |
XLSRenderCaptureApplyDxf | Past ondersteund losgemaakt differentieel uiterlijk toe met een AppliedSlots-masker om hogere-prioriteit-opmaak te behouden |
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearance | Importcoördinatie-methoden met intern prefix die uiterlijk registreren en inspecteren dat het getypeerde differentiële model niet veilig kan renderen; Assign behoudt de marker, en capture weigert een gemarkeerde matchende stijl |
Deze brughelpers kunnen EXLSSemanticSnapshot geven; de publieke capture-adapter vertaalt die exception naar EXLSPortableRender