Portabel headless-utmatning
Finns sedan version 2.384.100 som en avgränsad utdatapipeline med uttryckliga inspelnings- och renderings-API:er
Spela in ett stödt område från en Classic XLS- eller XLSX-arbetsbok i Windows, överför dess oföränderliga ögonblicksbild och rendera PDF, SVG eller PNG på Linux eller macOS med Free Pascal och inbyggd Cairo
Inspelningsadaptern använder arbetsboksmotorn; Windows-inspelning använder sin standardgeometritjänst, medan inbyggd Linux- och macOS-inspelning kan tillhandahålla en uttrycklig FreeType/HarfBuzz-geometritjänst som backas upp av programvalda typsnittsfiler
Den separata inbyggda konsumenten accepterar lxPortableRender-scener via lxPortableCairo, utan Excel eller en skrivbordssession; dess geometri-API använder också de befintliga portabla enheterna för arbetsboksvyer och renderingsgeometri
Konsumenten accepterar en oföränderlig scen eller överföringsström; plattformskraven för att läsa in och beräkna arbetsböcker beskrivs separat i Free Pascal-stöd
Spela in en rektangel ur en befintlig arbetsbok
CaptureXLSPortableRenderSnapshot i lxPortableWorkbookCapture accepterar en IXLSWorkbook eller IXLSXWorkbookOwner, med uttryckliga eller standard TXLSPortableRenderLimits; två ytterligare överladdningar accepterar uttryckliga gränser följt av en IXLSRenderGeometry-leverantör avgränsad till inspelningsvyn
SheetIndex och inklusiva Row1, Col1, Row2, Col2 är ettbaserade; den resulterande ögonblicksbilden lagrar nollbaserade positioner relativt den inspelade rektangeln
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.
Håll ägarinterfacet vid liv medan arbetsboksobjektet används; släpp interfacet i stället för att manuellt frigöra en gränssnittsägd arbetsbok
För Classic XLS, använd TXLSWorkbook och IXLSWorkbook från lxHandle med samma inspelningsanrop
Inspelningen läser befintliga formelcacher och avslår varje formel i rektangeln utan cache; den omberäknar aldrig implicit, hämtar aldrig externa data och registrerar aldrig nya format i källarbetsboken
Omberäkna uttryckligen före inspelningen när programmet behöver färska formelresultat; en befintlig cache renderas som lagrad, så inspelningen intygar inte dess färskhet
Åtgärden håller en läsvy och kontrollerar arbetsbokens generation innan den returnerar; dess returnerade ögonblicksbild är fristående från arbetsboksägarskapet och förblir användbar efter att arbetsboken släppts
Utseende och inspelningsgränser
Ögonblicksbilden innehåller formaterad visningstext, fysiska mått i punkter, uppslagna RGB-färger, stödda celltypsnitt och justeringar, fyllningar, ramar och kompletta sammanslagna rektanglar; dolda rader och kolumner har storlek noll
Stödt typsnittsutseende omfattar fet, kursiv, enkel understrykning och genomstrykning; stött cellutseende omfattar helfärgade fyllningar, vänster/centrerad/höger horisontell justering, överst/centrerad/nederst vertikal justering, radbrytning, krympning och höger-till-vänster-läsordning
Tunna, medeltjocka, tjocka, hårbredds-, dubbla, prickade, streckade och medelstreckade arbetsboksramar mappas till de portabla ramstilarna och punktbredderna; andra ramstilar avslås
Stödd rich text bär effektiva run-typsnitt, punktstorlekar, RGB-färger, fet, kursiv, enkel understrykning, genomstrykning samt run-nivå upphöjt eller nedsänkt; vanliga cellkontur-/skugg-/vertikala typsnittseffekter, understrykningsstilar som inte stöds, gradient- eller mönsterfyllningar, diagonala ramar, indrag, textrotation och justeringar som inte stöds avslås
En inspelningsrektangel måste innehålla varje sammanslagen cell helt; klippta, överlappande eller inkonsekventa sammanslagningar samt inkompatibla format längs en sammanslagen ytterkant avslås
Bladbakgrunder och bladtyper som inte stöds avslår inspelningen; PNG/JPEG-bilder som stöds och vanliga rektangel-/ellipstextformer i båda arbetsboksfasaderna spelas in som ordnade scenobjekt, tillsammans med XLSX-cellbilder, Boolean-kryssrutor och den stödda delmängden cachade XLSX-diagram som beskrivs nedan; diagram, formförinställningar, WordArt, grupperade transformationer, svävande kontroller, Slicers, Timelines och sparklines som inte stöds avslås när deras uppslagna fotavtryck skär rektangeln
Innehåll som inte stöds men har ett pålitligt uppslaget fotavtryck utanför rektangeln kan samexistera med inspelningen; ett olösbart ritningsfotavtryck avslås i stället för att tyst utelämna potentiellt överlappande innehåll
Classic-tabellformatering som skär rektangeln avslås; inbyggda XLSX-tabeller och stödda anpassade Table-sektioner slås upp i fristående formatkontext, med sektionsstora ränder och direkta cellformatsöverskrivningar
För stödda importerade Table-helfärgade eller implicita differentiella fyllningar ger RGB bgColor den synliga bakgrunden; enbart RGB fgColor lämnar den ärvda bakgrunden oförändrad, och en sektion med båda färgerna använder sin bakgrundsfärg
Importerade Table-sektioner som innehåller utseende som den typade sammanfattningen inte kan representera avslås när den sektionen gäller, inklusive understrykning, talformat, uttryckligen rensad fet/kursiv, typsnittsscheman, ett uttryckligt utan-fyllnad-mönster och färgformer som inte stöds; en orelaterad sektion utanför den inspelade rektangeln blockerar inte inspelningen
Stödd villkorsformatering tillämpas utan formelutvärdering: cachade numeriska eller datumsjämförelser mot literal numeriska gränser, literal Boolean- eller numeriska uttryck, regler för textinnehåll/prefix/suffix, tomma värden och fel; utseende med högre prioritet vinner per stödd egenskap, och XLSX StopIfTrue stoppar matchande regler med lägre prioritet
Classic-textregler kräver en literal söksträng och matchar cachade strängceller; XLSX-textregler använder sina lagrade textkriterier
Stödt differentiellt utseende omfattar uppslagna temafärger med tint och vanliga indexfärger; importerade automatiska färger, icke-tema-tint, en differentiell fyllning med både förgrunds- och bakgrundsfärger samt ramar, justeringar, genomstrykning eller annat differentiellt utseende som inte stöds eller inte kan representeras avslås när den matchande regeln gäller
Villkorsformler som kräver utvärdering, aggregerings- eller datumberoende regler, färgskalor, datastaplar och ikonuppsättningar avslås där de påträffas; antalet överlappande regler för villkorsformatering är avgränsat
Date1904-konverteringen väljer den tillämpliga råa talformatsektionen innan kalenderoffseten tillämpas; inaktiva kalendersektioner ändrar inte vanlig numerisk visning, och Boolean-värden förblir Boolean
En vald Date1904-kalendersektion i kombination med formatvillkor eller konstruktioner för förfluten tid avslås; citerade eller eskapade sektionsseparatorer avslås också, och den här gränsen blockerar inte en vald vanlig numerisk sektion bara för att en annan sektion är ett kalenderformat
Rich text och ordnade ritningsscener
TXLSPortableCell.RichText är en matris av TXLSPortableTextRun-poster som innehåller Text, FontFamily, FontSizePoints, FontStyles, ColorRGB och BaselineShiftPoints; sammanfogad run-text måste exakt motsvara cellens visningstext
XLSX-runs ärver utelämnade egenskaper från det effektiva inspelade celltypsnittet, inklusive stödd tabell- och villkorsformatering; uttryckligen tilldelade falska flaggor och uttryckliga none-/baseline-/automatiska färgvärden åsidosätter arvet
Inbyggda delade strängar och inline-strängar bevarar run-gränser och blanksteg; inbyggda typsnittsbarn, attribut, namnområden, tema-/indexerade rich-färger och fonetiska anteckningar som inte stöds avslås i stället för att tyst tappa synligt utseende
Classic-runs slår upp sina lagrade BIFF-typsnittsindex till fullständiga effektiva run-typsnitt; fonetisk metadata och run-typsnitt som inte stöds avslås, och inspelningen behåller arbetsboksgeneration och formatpooler
Classic-textformer läser befintliga OfficeArt-egenskaper och TXO-typsnittsruns utan att skapa ritningsomslag eller ändra arbetsboken; ankare använder verkliga rad-/kolumnmått och offset, stödda helfärgade fyllningar och konturer behåller sina färger och bredder, och inbäddade PNG/JPEG-byte friställs före överföringen
Rektangeltext använder de inbyggda marginalerna 7,2 pt horisontellt och 3,6 pt vertikalt; ellipstext använder dessutom sin inskrivna textruta och håller vanlig text inom formkonturen i båda arbetsboksfasaderna
Importerade Classic-rektangel- och ellipscontainrar behåller sin typade text och formatering; överhoppad inbyggd form- eller grupmetadata utan uppslaget fotavtryck avslår inspelningen uttryckligen, medan okända objektslutsposter, ritningstillägg, rotation, icke-helfärgade fyllningar och linjestilar som inte stöds avslår ett skärande objekt
Importerade XLSX-tvåcellsankare för rektangel och ellips stöder uttryckliga RGB-helfärgade fyllningar med alfa, helfärgade eller streckade/prickade konturer, fysiska ankars-offset samt ett enda vanligt rich text-stycke; varje run behåller sin effektiva typsnittsfamilj, punktstorlek, färg, fet, kursiv, enkel understrykning och genomstrykning, inklusive uttryckliga fet- eller kursivåterställningar
Den importerade formläsaren reserverar rå XML-arbetslagring före tolkningen och kontrollerar objekt-, byte- och textbudgeter samarbetsvilligt; den behåller arbetsbokens ritordning och läsleases utan att skapa formmodeller eller frånvarande celler
Okända inbyggda formegenskaper, effekter, teman, rotationer, grupperade transformationer, flera stycken och ankartyper som inte stöds avslås uttryckligen; ett uppslaget ostödt fotavtryck utanför inspelningsrektangeln blockerar inte det begärda området
Run-nivå upphöjt och nedsänkt använder två tredjedelar av run-typsnittets storlek och en baslinjeförskjutning på en tredjedel av dess ursprungliga punktstorlek; en formatgräns som delar ett Unicode-formningskluster, eller en CRLF-sekvens som korsar inkompatibla run-gränser, avslås under inbyggd layout
TXLSPortableSceneObject bär en Kind, punktbaserad X, Y, Width, Height, klippningsrektangel, fyllnings-/konturfärger och opacitet, valfria banpunkter, textcell eller kodade rasterbyte och dimensioner
TXLSPortableSceneKind innehåller xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG och xpskJPEG; matrisordningen är ritordningen, där senare objekt täcker tidigare objekt
Den ytterligare överladdningen CreateXLSPortableRenderSnapshot accepterar en TXLSPortableSceneObjects-matris; fråga IXLSPortableRenderSceneSnapshot efter nollbaserade Objects och ObjectCount, vars getters returnerar friställda kopior inklusive run-, punkt- och rastermatriser
Cellbilder och kryssrutebanor föregår svävande ritningar; svävande ritningar behåller arbetsboksordning, fysiska ankare och visningsportklippning, och textformer använder det mindre temats typsnitt vid 11 punkter med 7,2 punkters horisontella och 3,6 punkters vertikala textmarginaler
PNG- och JPEG-bilder avkodas inbyggt efter preflight av huvud, bildpunktsstorlek och byte; stödda svävande bilder behåller transparens och sträckgeometri, medan cellbilder passas in i cellen eller den kompletta sammanslagna rektangeln med sina bildförhållanden bevarade
Beskärning, rotation, skuggor, luminans/gamma-justering, kakelplacering, SVG-följeslagare och live-kamerabindningar förblir ostödda; bevarad bild-XML valideras mot det stödda utseendet, så dolda bilder, okänd nästlad metadata, främmande namnområdesegenskaper, icke-rektangulär bildgeometri och omodellerade transformationer avslås bara när deras fotavtryck överlappar inspelningen
Booleska cellkryssrutor använder en temaneutral vektorruta och en valfri bockmarkering, inklusive effektiva kontroller som ärvs från rad- och kolumnformat; den begärda cellgenomgången avgränsas före traverseringen, andra kontrolletyper samt tomma eller icke-Booleska kryssrutevärden avslås, och stödda cellscener undertrycker skalär Boolean- eller bildfel-fallbacktext
En kryssrutestandard är inmatningsmetadata och framställer ingen Boolean för en frånvarande cell; uttrycklig rensning av en direktcellkontroll maskerar en ärvd kontroll, medan inspelningsläsningar bevarar gles frånvaro och arbetsboksgenerationen
XLSReadPortableImageDimensions validerar en avgränsad PNG IHDR eller en stödd åttabitars sekventiell/progressiv JPEG-ram och returnerar dess deklarerade bredd och höjd; avkodningen förblir renderarens ansvar
IXLSPortableSceneCaptureSource.ReadPortableSceneObjects använder ettbaserade arbetsbokskoordinater och punktbaserade scenkoordinater relativt området, validerar området och de samarbetsvilliga gränserna och returnerar förbrukade byte-, text- och objekträkningar; HasPortableCellScene identifierar celler vars skalära visning ersatts av deras inspelade scen
I den inbyggda layouten räknar CellCount rutnätsceller och LineCount inkluderar också textscenobjekt; en textobjektlinjes CellIndex är CellCount plus dess nollbaserade sekvens bland textscenobjekt, medan GetCellGeometry fortfarande är begränsad till rutnätsceller
Skalära ögonblicksbilder serialiseras fortfarande som HXRSNP01; ögonblicksbilder med runs eller scenobjekt serialiseras som HXRSNP02, och inläsaren accepterar båda versionerna med samma kontrakt för oföränderligt ägarskap och indatapositionsrullback
Den kombinerade objektbudgeten räknar lagrade celler, rich-runs, scenobjekt och banpunkter; bytegränserna tar hänsyn till mellanlagrade och friställda matriser, text, kodade raster-nyttolaster och avgränsad granskning av inbyggd metadata före allokeringen
Portabelt ögonblicksbilds-API
| Symbol | Kontrakt |
|---|---|
EXLSPortableRender | Undantag som utlöses för ogiltiga ögonblicksbildsdata, inspelningsutseende som inte stöds, otillgänglig inbyggd backend, resursgränser eller renderingsfel |
TXLSPortableFontStyle, TXLSPortableFontStyles | xpfsBold, xpfsItalic, xpfsUnderline och xpfsStrikeout, kombinerade som en mängd |
TXLSPortableHorizontal, TXLSPortableVertical | xphLeft, xphCenter, xphRight och xpvTop, xpvCenter, xpvBottom |
TXLSPortableBorderStyle, TXLSPortableBorder | xpbsNone, xpbsSolid, xpbsDashed, xpbsDotted och xpbsDouble; varje ram bär Style, WidthPoints och ColorRGB |
TXLSPortableCell | Nollbaserad Row/Column, positiv RowSpan/ColumnSpan, visning Text, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical samt fyra poster LeftBorder/TopBorder/RightBorder/BottomBorder |
TXLSPortableCells, TXLSPortableSizes | Dynamiska matriser med lagrade celler och fysiska rad-/kolumnstorlekar i punkter |
TXLSPortableRenderLimits | MaxGridCells, MaxStoredCells, MaxBytes och MaxTextCharacters avgränsar konstruktion, inspelning och serialisering |
XLSDefaultPortableRenderLimits | Returnerar 2000000 rutnätsceller, 2000000 lagrade celler, 67108864 byte och 16777216 UTF-16-texttecken |
XLSDefaultPortableCell | Initierar ett encells spann med Calibri vid 11 punkter och standardutseende med nollvärden; sätt dess position och önskade utseende före konstruktionen |
CreateXLSPortableRenderSnapshot | Validerar och kopierar generation, radhöjder, kolumnbredder och lagrade celler till ett fristående oföränderligt gränssnitt; celler måste vara unika, i radordning (row-major), inom gränserna och ha överlappningsfria spann |
IXLSPortableRenderSnapshot | Skrivskyddad Generation, RowCount, ColumnCount, CellCount, nollbaserade RowHeightPoints, ColumnWidthPoints och kopierade Cells-poster |
| Ögonblicksbildens getter-metoder | GetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth och GetCell exponerar samma värden; ogiltig indexerad åtkomst utlöser ett undantag |
SaveXLSPortableRenderSnapshot | Validerar och serialiserar en ögonblicksbild till en avgränsad privat buffert och kopierar sedan den kompletta HXRSNP01- eller HXRSNP02-nyttolasten till den angivna strömmen vid dess aktuella position |
LoadXLSPortableRenderSnapshot | Läser den versionsmärkta little-endian-ögonblicksbilden med strikt UTF-8-text, validerar räkningar, geometri, format och spann och avslår efterföljande data; fel återställer indataströmmens position |
Alla gränser måste vara positiva; det validerade maxvärdet är 2000000 rutnäts-/lagrade celler, 1073741824 byte och 268435456 texttecken, med mått på högst 1048576 rader gånger 16384 kolumner
MaxGridCells räknar hela rektangeln, inklusive icke lagrade tomma celler; CellCount räknar lagrade synliga celler och sammanslagna ankare och kan vara mindre
Generation registrerar källgenerationen eller ett programtillhandahållet värde; den är metadata i stället för en aktiv länk till en arbetsbok eller en automatisk färskhetskontroll
Inbyggd rendering och uttryckliga typsnitt
XLSPortableCairoBackendAvailable rapporterar tillgängligheten för den kompilerade inbyggda backenden; inbyggd utmatning kräver Free Pascal på Linux eller macOS, med biblioteken Cairo, FreeType, HarfBuzz och FriBidi tillgängliga för processen
macOS-byggen länkar de fyra inbyggda biblioteken uttryckligen; ett privat beroendeprefix och en uttrycklig sökväg för underprocessens inläsare kan tillhandahålla dem utan att delade kompilatorinställningar eller shellprofiler ändras
Windows Delphi XE5, Win32 och Win64 kan kompilera de portabla gränssnitten och använda ögonblicksbildsserialisering, men förberedelse av inbyggd Cairo-layout rapporterar backend-otillgänglighet där
Skicka en uttrycklig typsnittskedja till PrepareXLSPortableCairoLayout; renderaren provar först matchande familj och fet/kursiv stil, sedan fallbacks med samma stil i angiven ordning, och kräver glycktäckning för varje stödd textkluster
Tillhandahåll de faktiska regular-, bold-, italic- och bolditalic-filer som det inspelade innehållet kräver; ingen systemtypsnittsidentifiering eller syntetisk fet/kursiv-ersättning sker, och saknade filer, stilmappningar eller glycktäckning avslås
Typsnittsbyte spelas in före formningen, så en filändring påverkar senare layouter medan en befintlig layout behåller sina inspelade byte; FaceIndex väljer det icke-negativa snittet i en typsnittsfil eller samling
Inbyggda åtgärder serialiseras för FreeType-snättsäkerhet; oföränderliga ögonblicksbilder och granskning av förberedd layout kräver ingen aktiv arbetsbok
Fonts[0].FamilyName := 'Calibri'; Fonts[0].FileName := '/srv/fonts/Regular.ttf'; Fonts[0].FaceIndex := 0; Fonts[0].Bold := False; Fonts[0].Italic := False;
Här är Calibri ett uttryckligt familjealias för den valda filen, vilket möjliggör en programstyrd typsnittsmappning; granska utdatamått vid mappning till ett annat typsnitt
Renderaren stöder hårda radbrytningar, tabbexpansion med fyra blanksteg, styckesvis bidirektionell ordning, formade ligaturer och kombineringstecken, girig radbrytning och krymp-för-att-passa; radbrytning har företräde framför krympning
Radbrytningen bevarar de implementerade klustergränserna för kombineringstecken, variationsväljare, ZWJ och virama samt föredrar blanksteg och ideografiska blanksteg; den är inte en komplett implementering av UAX #29-grafemer eller Unicode-radbrytningsalgoritm, och radbrytningsgränser för regionala indikatorer och Hangul-Jamo garanteras inte
Typsnittsstorlekar löses upp till 1/64 punkt och text klipps till cellgränserna; PDF bäddar in uttryckliga typsnitt med logiska textmappningar, SVG använder vektorglyfbanor, och PNG ritar samma positionerade glyfer vid begärd DPI
Förbered och granska en layout
| Symbol | Kontrakt |
|---|---|
TXLSPortableFontFile, TXLSPortableFontFiles | En uttrycklig mappning innehåller FamilyName, FileName, FaceIndex, Bold och Italic; den dynamiska matrisen är ordnad och innehåller mellan 1 och 64 mappningar |
TXLSPortableCairoFormat, TXLSPortableOutputFiles | xpcfPDF, xpcfSVG eller xpcfPNG, samt en matris med utdatafilnamn som returneras av filsparandet |
TXLSPortableCairoOptions | Sidbredd/höjd, fyra marginaler, cellutfyllnad och raster-DPI, plus gränser för sidor, glyfer, rader, layout, utdata, typsnitt, formning och ritning |
XLSDefaultPortableCairoOptions | Initierar varje alternativ med avgränsade standardvärden; använd den före överskrivning av enskilda fält |
PrepareXLSPortableCairoLayout | Validerar och kopierar en ögonblicksbild, spelar in uttryckliga typsnittsbyte och returnerar en ägd förberedd TXLSPortableCairoLayout; frigör den med Free |
TXLSPortableCairoLayout | Exponerar PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save och Destroy |
TXLSPortableTextLineInfo | En kopierad radpost har CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints och logisk Text |
TXLSPortableCellGeometry | En kopierad rektangel har XPoints, YPoints, WidthPoints och HeightPoints i den fullständiga layouten |
GetTextLine(Index), GetCellGeometry(Index) | Nollbaserad indexerad granskning av förberedda rader och lagrade celler; ogiltiga index avslås |
Sidnumreringen klipper fasta utskriftsområdesplattor i över-först-sedan-ned-ordning; en cell eller ett textfragment som korsar sidgränser visas på varje skärande sida, utan automatisk helcellsanpassning, upprepning av kalkylbladets utskriftsrubriker eller tolkning av arbetsbokens sidinställningar
Renderaralternativ och gränser
| Fält | Standardvärden och betydelse |
|---|---|
PageWidthPoints, PageHeightPoints | 595 gånger 842 punkter |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | 36 punkter var; marginalerna måste lämna en positiv utskriftsbar rektangel |
CellPaddingPoints, RasterDPI | 2 punkter och 96 DPI; DPI påverkar PNG-måtten |
MaxPages, MaxGlyphs, MaxLines | 256 sidor, 2000000 formade glyfer och 200000 textrader |
MaxLayoutBytes | 268435456 byte för avgränsat layoutarbete och kontroller av rasterytor |
MaxOutputBytes | 268435456 byte per renderad utdatabuffert, som täcker hela PDF:en eller en SVG/PNG-sida i stället för summan av separata sidfiler |
MaxFontBytes | 134217728 byte över uttryckliga typsnittsindatafiler för en layout |
MaxShapedCharacters, MaxDrawOperations | 16000000 vardera, som avgränsar formningsarbete och ritningsarbete per sida och cell |
Ogiltig eller icke-ändlig geometri samt icke-positiva arbetsbudgeter avslås; sidmåtten är taklagda vid 100000 punkter och raster-DPI vid 1200, med ytterligare kontroller av byte, antal och rasterområde före renderingen
Den inbyggda processomfattande typsnittsbyte-poolen tillåter dessutom högst 256 olika buffertar och 256 MiB; exakt identiska byte får dela lagring, och kapaciteten frigörs först när det faktiska Cairoägda typsnittssnittet släpper sin buffert
Frigör varje layout när den är klar; biblioteket återställer inte delade Cairo-cacher, och en logiskt färdig layout kan lämna typsnittsbyte kvar i minnet medan inbyggd Cairo fortfarande äger ett snitt
Skriv utdata och hantera fel
SaveToStream(Stream, Format, PageIndex = 0) skriver alla sidor för PDF och kräver PageIndex = 0; SVG och PNG skriver den valda nollbaserade sidan
Ögonblicksbildsserialisering och inbyggd rendering fullbordas i privata avgränsade buffertar innan kopiering till målströmmen; validerings- eller renderingsfel bevarar den, men ett skrivfel i uppringarens ström kan lämna partiella byte och följer den strömmens eget felbeteende
Save(FileName, Format) skriver en PDF-fil eller en SVG/PNG-fil per sida och returnerar deras sökvägar; flersidiga filnamn infogar -0001, -0002 och efterföljande suffix före filändelsen
Befintliga fil- eller katalogmål avslås; varje sparande mellanlagrar alla sidor, publicerar exklusiva nya mål och tar bort sina egna mellanlagrade/publicerade utdata vid fel
Filsystemet måste stödja de inbyggda operationerna för exklusiv mellanlagring och länkpublicering; separata PDF-, SVG- och PNG-sparningar är separata åtgärder och bildar ingen kombinerad transaktion
Fristående Linux-konsument
Tests/Portable/RenderPortableSnapshot.pas är en komplett konsument som läser in en ögonblicksbild, förbereder en layout och sparar alla tre formaten; bygg den på Linux med de portabla enheterna och inbyggda biblioteken installerade
fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas ./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96
fonts.tsv är UTF-8-text med fyra tabbseparerade fält per mappning: familjealias, absolut Linux-typsnittssökväg, snittindex och en av regular, bold, italic eller 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
Använd faktiska installerade eller programtillhandahållna typsnittsfiler, och välj en ny utdatabas eftersom befintliga målfiler avslås; inkludera ytterligare fallbacks med samma stil för skrifter som den första mappningen inte täcker
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;
Cachad diagraminspelning
XLSRecordCachedChartScene i lxPagination spelar in den befintliga diagramlayoutrenderarens punktbaserade primitiver till en oföränderlig portabel scerepresentation; dess källa måste vara en fristående TXLSXChart utan ägande kalkylblad och utan bevarad inbyggd XML, så att inspelningen inte kan slå upp kalkylbladsreferenser eller uppdatera arbetsbokscacher
Den aktuella delmängden stöder kolumn-, stapel-, linje-, punkt-, cirkel- och ringdiagram samt vanliga områdesdiagram med en enda serie, med en primär plottgrupp, ändliga numeriska värdecacher och strängt stigande avgränsade cacheindex; punktdiagrammens kategoricacher innehåller numeriska X-koordinater, medan de andra familjerna använder lagrade kategorieetiketter
Värdecacher för kolumn, stapel, linje och område måste ha sammanhängande nollbaserade index; glesa kategorivärdsgap avslås, och inspelningen expanderar aldrig saknade index till en stor matris
Stapelplottar behåller horisontell geometri och kategorieetiketter; cirkel- och ringplottar använder kategorilegendrar, respekterar FirstSliceAng och HoleSize samt utelämnar numeriska axlar, medan vanliga områdesplottar med en enda serie behåller en fylld polygon runt nollbaslinjen
Linje- och punktserier stöder oberoende linjesynlighet, uttrycklig RGB-färg och punktbredd via LineVisible, LineColorRGB och LineWidthPoints; LineStyleSet, LineColorSet och LineWidthSet skiljer uttryckliga inställningar från ärvda standardvärden, och EffectiveLineVisible löser upp den befintliga konventionen med endast-fyllnad-serier
Markörer stöder den automatiska cirkeln, en uttrycklig cirkel eller ingen markör; en uttrycklig MarkerSize från 2 till 72 sätter dess punktdiameter, och MarkerFillSet och MarkerBorderSet skiljer ett uttryckligt svart RGB-värde på noll från automatiskt färgval; förbindande segment målas före ogenomskinliga datamarkörer
Uttryckliga markörramar utan lagrad bredd använder den vanliga linjen på 0,75 punkt, medan legendrexempel begränsar cirkeldiametern till 6 punkter; begärda titeltypsnitt skrivs på det faktiska rich text-runet såväl som dess standardegenskaper för text, vilket behåller synlig storlek, färg och betoning när Excel exporterar diagrammet
Diagramfamiljer som inte stöds, staplade områdesplottar eller med flera serier, cirkelplottar med flera serier, gallerstilar, rundade hörn, sekundära eller kombinerade plottgrupper, datumaxlar, anpassade talformat, logaritmiska axlar, anpassat korsningsbeteende, roterad text, trendlinjer, felfält, hierarkiska kategorier, dataetiketter, andra markörformer och saknade värdecacher utlöser EXLSPortableRender före renderingen
Anpassade typsnitt för värdeaxeltick, underordnade rutnät, uttryckliga huvud-/underenheter, ogiltiga uttryckliga seriefärger och axelpositioner som inte stöds avslås; stapellegendrar kräver för närvarande den vanliga högerplaceringen, och cirkelplottar kräver en ändlig icke-noll cachad total och avgränsad geometri med en tidig konservativ reservation för arbetslagring av bågar
Den returnerade matrisen behåller primitiv ritordning, uttryckliga färger, typsnitt, textjustering, opacitet och diagramklippningsgränser; objekt-, byte- och texträkning inkluderar konservativa reservaton för renderarens arbetsutrymme, och samarbetsvilliga cachekontroller föregår allokering av arbetsmatriser
XLSValidateCachedChartSceneModel utför samma avgränsade cache- och utseendepreflight på en modell utan att slå upp kalkylbladsceller; XLSX-inspelningsbryggan använder den kontrollen före kloning och spelar in stödda författade diagrammodeller med lokala endimensionella A1-referenser, fysiska inbyggda ankars-offset, områdesklippning och ritordning
Den plattformsneutrala inspelaren finns i lxPortableChart; de befintliga ingångspunkterna i lxPagination delar samma layout- och primitivinspelningskroppar, behåller Windows-renderarens beteende och matchar oföränderliga scenbyte och budgeträkning för varje stödd familj
Inbyggd Linux- och macOS-arbetsboksinspelning använder den uttryckliga geometriöverladdning som beskrivs nedan; importerad seriefyllnad i RGB, plottytebakgrund, diagrambakgrund och diagramram återställs ur sina egna namnområdesuppslagna formegenskaper så att en nästlad seriefärg inte kan skriva över plottytebakgrunden
Importerad bevarad ChartML accepteras bara när dess namnområdesexpanderade ström av element, attribut och väsentlig text matchar den stödda typade rekonstruktionen; namnområdesalias och attributordning normaliseras, medan omodellerade inbyggda tillägg, främmande attribut och utseende som inte stöds avslås konservativt
Arbetsbudgeter för rå XML och rekonstruktion kontrolleras före klonings- och projekteringsarbetet; bara den fristående kopian rensar sin validerade bevarade XML, och källan behåller inbyggd metadata, celllagring, cacheinnehåll och generation
Inspelningen går igenom underliggande OfficeArt-ritordning, inklusive diagramramar som saknas i det publika Shapes-omslaget, och avslår en skärande ram som inte stöds i stället för att tyst utelämna den
Classic-cachade diagram med deklarerat utseende
Classic BIFF8-inspelning stöder de sju vanliga diagramfamiljerna ovan när deras kärnposter, lokala lagrade värden, uttryckliga linjära skalor och utseende kan representeras; den läser behållna poster och tillgängliga formelcacher utan att utvärdera formler, expandera gles lagring eller klona kompilerade formelträd
Använd TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) för att skapa en separat skrivskyddad vy med en fryst uppsättning TXLSClassicChartAppearanceDeclaration-värden som tillhandahålls av IXLSClassicChartAppearanceSource; Geometry är valfritt i Windows och tillhandahåller uttryckliga inbyggda typsnittsmått på Linux eller macOS
TXLSClassicChartAppearanceDeclarations är den dynamiska matrisen av primitiva deklarationer som ett program kan använda för att implementera den källan
Skicka den konfigurerade vyn till CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); koordinater är ettbaserade och adaptern återställer uppringarens aktiva kalkylblad när inspelningen avslutas eller avslås
De vanliga inspelningsingångarna fortsätter att avslå olösta effektiva typsnitt för Classic-layout eller legender; den distinkta vyingångspunkten använder de redan frysta deklarationerna och geometrileverantören
| Deklarationsmedlem | Kontrakt |
|---|---|
Generation, SheetIndex, ObjectId | Den låsta arbetsboksgenerationen, ettbaserat kalkylbladsindex och faktisk lagrad diagramobjektidentitet; inaktuella generationer, saknade eller upprepade identiteter samt identiteter som tillhör ett annat objekt avslås |
HasChartSize, ChartWidthPoints, ChartHeightPoints | En uttrycklig ändlig positiv diagramramstorlek i punkter; den behåller det lagrade ankarorigot och ritordningen, medan en falsk flagga behåller de från ankaret härledda måtten |
HasPlotInnerRectangle, PlotInnerRectangle | En uttrycklig inre plottruta exklusive etiketter och axeltitlar; den krävs för den här vägen med deklarerat utseende |
HasTitleRectangle, TitleRectangle | En uttrycklig titelruta när diagrammet har en titel; källtext, typsnittsfamilj, betoning och färg kommer fortfarande från validerade kärnposter |
HasLegendRectangle, LegendRectangle | De deklarerade legendgränserna när en legend finns |
HasLegendFontSize, LegendFontSizePoints | Upringarens uttryckliga effektiva punktstorlek för en befintlig legend; kärnans typsnittsfamilj, betoning och färg behålls |
TXLSPortableChartRectangle | Left, Top, Width och Height är ändliga punkter relativt den inspelade diagramramen; aktiva rutor kräver positiva mått inom den ramen |
Count, GetCount, ReadDeclaration | Källan rapporterar ett avgränsat antal och returnerar en primitiv post för varje nollbaserat index medan vyn är konfigurerad; deklarationer kopieras före senare inspelning |
De här värdena är uppringardeklarerat utseende, inte automatisk Excel-layout eller härledd typsnittsskalning; hämta dem från en oberoende kontrollerad källa eller en programdefinierad layout och granska utdata med den uttryckliga inbyggda typsnittsmappning som används för rendering
Uttryckliga rammått och inre plottgränser måste lämna tillräckligt utrymme för de validerade axeletiketttypsnitten; otillräckligt etikettutrymme avslås i stället för att klippa text eller tillämpa en anpassad skalfaktor
Program håller arbetsboksägaren vid liv tills vyn släppts; den lånade vyn håller ett läslease och behåller deklarationskällan, medan den resulterande oföränderliga ögonblicksbilden varken behåller arbetsboken eller leverantören
Stödd kärnprojektering omfattar literal helfärgade fyllningar, synliga heldräkta linjer, cirkelmarkörer, titel- och legendtext, kategoriplacering och avgränsade uttryckliga numeriska tick; automatiska skalor, olöst automatiskt markörutseende, utjämning, okända rich-tillägg, främmande eller icke-linjära seriereferenser och punktstilar som inte kan representeras avslås före utdata
Att deklarera geometri eller en legendstorlek ger inte tillstånd att ignorera okända diagramtillägg eller ovaliderade stilar; byte-, text-, lagrad-cell- och scengränser förblir effektiva för behållna källdata, deklarationer, fristående cacher och inspelningsarbetsutrymme
De ytterligare överladdningarna XLSValidateCachedChartSceneModel och XLSRecordCachedChartScene accepterar TXLSCachedChartSceneAppearance för en fristående modell; initiera den med XLSDefaultCachedChartSceneAppearance före uttryckliga kontroller
XLSReadClassicChartScene på lägre nivå i lxClassicChartScene returnerar en uppringarägd fristående TXLSXChart samt primitivt utseende och budgeträknare från en behållen TXLSCustomChart, dess exakta källkalkylator och en leasad TXLSClassicChartSceneSource; frigör den returnerade modellen efter inspelningen
TXLSClassicChartSceneSource.ReadAppearance tillhandahåller en primitiv deklaration, ReadCell läser avgränsade låsta lokala lagrade värden, ReadFont fyller den angivna textstilen med avgränsade effektiva kärntypsnittsdata, och PaletteColor slår upp uttryckliga lagrade palettposter; programimplementeringar måste bevara den låsta källan och respektera varje tilldelad byte- och teckenkvot
| Medlem för scenutseende | Betydelse |
|---|---|
SeriesMarkerSizePoints | Avgränsade punktdiametrar per serie, inklusive decimalvärden; noll behåller modellens markörstorlek och en icke-noll överskrivning måste vara från 2 till 72 punkter |
OverrideBorder, BorderColorRGB, BorderWidthPoints | Uttryckligt konturutseende för diagramramen |
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPoints | Uttryckliga färger och punktbredder för axel, tick och huvudrutnät |
AreaFillOpacity, SeriesFillAlpha | Områdesopacitet och seriefyllnads-alfa |
UseAxisTickControls, CategoryBetween | Validerade uttryckliga axelkontroller och kategoriplacering |
TitleOffsetXPoints, TitleOffsetYPoints | Ändliga offset som tillämpas på inspelarens vanliga titelposition |
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangle | Literala punktrektanglar relativt diagramramen |
PieRadiusRatio | Cirkelplottens radie som en avgränsad andel av det mindre plottmåttet |
Diagramprimitiver följer HotXLS:s befintliga layoutpolicy; diagramgallerutseende som kräver Excel:s omodellerade standardvärden förblir en uttryckligt ostödd gräns
Direkt inbyggd arbetsboksinspelning
CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) returnerar en IXLSRenderGeometry som backas upp av samma uttryckliga typsnittsfiler, FreeType, HarfBuzz och textformning som används för inbyggd utmatning; kolumnbredder använder faktiskt uppmätt maximal sifferbredd med arbetsbokens kalibrering
Leverantören äger friställda typsnittsbyte och en avgränsad måttcache, kontrollerar typsnitts- och layoutbudgeter före allokering och validerar mätningsbegäranden innan det cachade tillståndet ändras; en full cache kan returnera ocachade mätningar utan att expandera bortom sin kapacitet
Inspelningen verifierar att leverantörsgenerationen och alla kalibreringsfält matchar den aktuella skrivskyddade arbetsboksvyn, behåller leverantören för den vyn och lämnar arbetsbokens standardgeometrifabrik oförändrad; vanlig standard inbyggd geometri förblir en uttrycklig GDI-gräns
Spela in generationen via en uttryckligen släppt vy innan leverantören skapas; att behålla ett tillfälligt gränssnittsresultat kan behålla dess läslease tills det omgivande blocket avslutas
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);
Inbyggda konsumenter kompileras med LX_PORTABLE_CORE och motsvarande inbyggda beroenden; Windows-anrop till den inbyggda Cairo-geometrifabriken avslås uttryckligen, medan Windows-inspelning kan använda sin befintliga geometrifabrik via samma scoped-överladdningar
Verklig inbyggd inspelning stöder den modellerade skalären, rich text, stödd raster, vanliga former och de sju cachade diagramfamiljerna som beskrivs ovan; diagraminspelningen bevarar ursprunglig importerad ChartML, cachade punkter, gles celllagring, packad lagring och Workbook-generering
För oföränderliga utskriftsområden, marginaler, anpassning eller procentskalning, upprepade rubriker, manuella brytningar samt helcells- eller sammanslagen-cells-sidindelning, se portabla utskriftsplaner
Avancerad inspelningsbrygga
IXLSRenderCaptureSource i lxSemanticSnapshot är det interna samordningsgränssnittet som implementeras av stödda skrivskyddade arbetsboksvyer; vanliga program bör anropa de ägarbaserade inspelningsöverladdningarna
TXLSClassicReadOnlyWorkbookView och TXLSXReadOnlyWorkbookView implementerar IXLSRenderCaptureSource, inklusive de åtta renderingsmetoderna nedan; de här klasserna samordnar inspelning genom skrivskyddade vyer, och adaptern hanterar deras livstid medan program behåller sitt ägargränssnitt för arbetsboken och anropar CaptureXLSPortableRenderSnapshot
Deras befintliga metod TryReadCell tillhandahåller en ögonblicksbild av lagrade celler via den skrivskyddade vyn; renderingsmetoderna lägger till fristående utseende och geometri för portabel inspelning
| Medlem eller hjälpare | Syfte |
|---|---|
ValidateRenderRange | Kontrollerar ettbaserade rektangelgränser och fotavtryck för utseende som inte stöds före inspelningen |
ReadRenderStyle | Returnerar fristående TXLSSemanticCellStyle-metadata och en rich text-närvaroflagga för en ettbaserad cell |
IXLSRenderRichTextCaptureSource, ReadRenderRichText | Valfritt vytilägg som returnerar avgränsade fristående TXLSRenderTextRuns; varje TXLSRenderTextRun innehåller Text och en effektiv semantisk Style och använder den angivna bastilen samt positiva run-/bytekvoter utan att materialisera celler eller ändra formatpooler |
RenderRowHeightPoints, RenderColumnWidthPoints | Returnerar fysisk geometri och komprimerar dolda mått till noll |
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometry | Valfritt vytilägg som behåller en uttrycklig leverantör först efter generations- och kalibreringsvalidering; ogiltiga leverantörer lämnar vyns behållna leverantör oförändrad |
ReadRenderMerge | Rapporterar den kompletta inklusiva ettbaserade sammanslagningsrektangeln som innehåller en cell |
ResolveRenderColor | Slår upp semantiskt tema-/index-/RGB-utseende till en portabel RGB-färg och använder angiven standard där det stöds |
RenderDate1904, RenderRightToLeft | Exponerar arbetsbokens datasystem- och bladläsordningskontext |
XLSRenderCaptureLiteral | Känner igen den stödda delmängden av literal Boolean, ändligt tal eller enkel citerad text för inspelning utan utvärdering |
XLSRenderCaptureIntersects | Testar blankstegsseparerade lokala A1-områden mot en ettbaserad rektangel och avslår olöst områdessyntax |
XLSRenderCaptureCondition | Utvärderar den stödda villkorsdelmängden mot en befintlig skalär; jämförelseoperatorkoderna 1 till 8 betyder mellan, inte-mellan, lika med, inte lika med, större än, mindre än, större-än-eller-lika-med och mindre-än-eller-lika-med |
XLSRenderCaptureApplyDxf | Tillämpar stödt fristående differentiellt utseende med en AppliedSlots-mask för att behålla formatering med högre prioritet |
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearance | Importkoordineringsmetoder med internt prefix registrerar och inspekterar utseende som den typade differentiella modellen inte kan rendera säkert; Assign behåller markören, och inspelningen avslår en markerad matchande stil |
De här brygghjälparna kan utlösa EXLSSemanticSnapshot; den publika inspelningsadaptern översätter det undantaget till EXLSPortableRender