Documentazione HotXLS / Riferimento API

Output headless portabile

Disponibile dalla versione 2.384.100 come pipeline di output limitata con API esplicite di acquisizione e rendering

Acquisisci un rettangolo supportato da un workbook Classic XLS o XLSX su Windows, trasferisci il suo snapshot immutabile e renderizza PDF, SVG o PNG su Linux o macOS con Free Pascal e Cairo nativo

L'adattatore di acquisizione usa il motore del workbook; l'acquisizione su Windows usa il suo servizio di geometria predefinito, mentre l'acquisizione nativa su Linux e macOS può fornire un servizio di geometria FreeType/HarfBuzz esplicito basato su file di font scelti dall'applicazione

Il consumatore nativo separato accetta scene lxPortableRender tramite lxPortableCairo, senza Excel né una sessione desktop; la sua API di geometria usa a sua volta le unità portabili esistenti di vista del workbook e geometria di rendering

Il consumatore accetta una scena immutabile o uno stream di trasferimento; i requisiti di piattaforma per caricare e calcolare i workbook sono descritti separatamente in il supporto Free Pascal

Acquisire il rettangolo di un workbook esistente

CaptureXLSPortableRenderSnapshot in lxPortableWorkbookCapture accetta un IXLSWorkbook o un IXLSXWorkbookOwner, con TXLSPortableRenderLimits espliciti o predefiniti; due overload aggiuntivi accettano limiti espliciti seguiti da un provider IXLSRenderGeometry con ambito limitato alla vista di acquisizione

SheetIndex e i confini inclusivi Row1, Col1, Row2, Col2 sono a base uno; lo snapshot risultante memorizza posizioni a base zero relative al rettangolo acquisito

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.

Tieni in vita l'interfaccia proprietaria mentre usi l'oggetto workbook; rilascia l'interfaccia invece di liberare manualmente un workbook posseduto da un'interfaccia

Per Classic XLS, usa TXLSWorkbook e IXLSWorkbook da lxHandle con la stessa chiamata di acquisizione

L'acquisizione legge le cache delle formule esistenti e rifiuta qualunque formula nel rettangolo priva di cache; non ricalcola mai implicitamente, non scarica dati esterni né registra nuovi stili nel workbook sorgente

Ricalcola esplicitamente prima dell'acquisizione quando la tua applicazione ha bisogno di risultati delle formule aggiornati; una cache esistente viene renderizzata così com'è memorizzata, quindi l'acquisizione non certifica la sua freschezza

L'operazione tiene una vista di lettura e verifica la generazione del workbook prima di restituire; lo snapshot restituito è scollegato dalla proprietà del workbook e resta utilizzabile dopo il rilascio del workbook

Aspetto e confini dell'acquisizione

Lo snapshot contiene testo mostrato formattato, dimensioni fisiche in punti, colori RGB risolti, font e allineamenti supportati delle celle, riempimenti, bordi e rettangoli uniti completi; righe e colonne nascoste hanno dimensione zero

L'aspetto dei font supportato comprende grassetto, corsivo, sottolineato singolo e barrato; l'aspetto delle celle supportato comprende riempimenti solidi, allineamento orizzontale sinistra/centro/destra, allineamento verticale alto/centro/basso, testo a capo, riduzione per adattare e ordine di lettura da destra a sinistra

I bordi del workbook thin, medium, thick, hair, double, dotted, dashed e medium-dashed vengono mappati agli stili di bordo portabili e alle larghezze in punti; gli altri stili di bordo vengono rifiutati

Il rich text supportato conserva i font effettivi dei run, le dimensioni in punti, i colori RGB, grassetto, corsivo, sottolineato singolo, barrato e apice o pedice a livello di run; gli effetti font outline/ombra/verticale ordinari delle celle, gli stili di sottolineatura non supportati, i riempimenti sfumati o a motivo, i bordi diagonali, il rientro, la rotazione del testo e gli allineamenti non supportati vengono rifiutati

Un rettangolo di acquisizione deve contenere completamente ogni cella unita; unioni tagliate, sovrapposte o incoerenti e stili incompatibili lungo un bordo esterno unito vengono rifiutati

Sfondi del foglio e tipi di foglio non supportati rifiutano l'acquisizione; le immagini PNG/JPEG supportate e le forme testuali ordinarie rettangolo/ellisse in entrambe le facciate del workbook vengono acquisite come oggetti di scena ordinati, insieme alle immagini di cella XLSX, alle caselle di controllo Boolean e al sottoinsieme supportato di grafici XLSX in cache descritto sotto; grafici non supportati, preset di forme, WordArt, trasformazioni raggruppate, controlli mobili, Slicer, Timeline e sparkline vengono rifiutati quando le loro impronte risolte intersecano il rettangolo

Contenuti non supportati con un'impronta risolta in modo affidabile fuori dal rettangolo possono coesistere con l'acquisizione; un'impronta di disegno non risolvibile viene rifiutata invece di omettere silenziosamente contenuti potenzialmente sovrapposti

Lo stile delle tabelle Classic che interseca il rettangolo viene rifiutato; le sezioni Table incorporate e personalizzate supportate di XLSX vengono risolte in un contesto di stile scollegato, con strisce delle dimensioni della sezione e override diretti del formato di cella

Per i riempimenti solidi o differenziali impliciti importati supportati delle Table, il bgColor RGB fornisce lo sfondo visibile; un solo fgColor RGB lascia invariato lo sfondo ereditato, e una sezione che porta entrambi i colori usa il suo colore di sfondo

Le sezioni Table importate contenenti un aspetto che il riepilogo tipizzato non può rappresentare vengono rifiutate quando quella sezione si applica, inclusi sottolineato, formati numerici, grassetto/corsivo esplicitamente azzerati, schemi di font, un motivo no-fill esplicito e forme di colore non supportate; una sezione non correlata fuori dal rettangolo acquisito non blocca l'acquisizione

La formattazione condizionale supportata viene applicata senza valutazione delle formule: confronti numerici o di data in cache contro limiti numerici letterali, espressioni Boolean o numeriche letterali, regole di contenimento/prefisso/suffisso testuali, vuoti ed errori; l'aspetto a priorità più alta vince per ogni proprietà supportata, e StopIfTrue di XLSX ferma le regole corrispondenti a priorità più bassa

Le regole testuali Classic richiedono un ago letterale stringa e corrispondono alle celle stringa in cache; le regole testuali XLSX usano i loro criteri testuali memorizzati

L'aspetto differenziale supportato comprende colori tema risolti con tinta e colori indicizzati semplici; colori automatici importati, tinta non di tema, un riempimento differenziale che porta sia colore di primo piano sia di sfondo, e bordi, allineamenti, barrato o altro aspetto differenziale non supportato o non rappresentato vengono rifiutati quando la regola corrispondente si applica

Formule condizionali che richiedono valutazione, regole aggregate o dipendenti dalla data, scale di colori, barre dati e set di icone vengono rifiutati dove incontrati; il conteggio delle regole di formattazione condizionale sovrapposte è limitato

La conversione Date1904 sceglie la sezione applicabile del formato numerico grezzo prima di applicare l'offset del calendario; le sezioni di calendario inattive non cambiano la visualizzazione numerica ordinaria, e i valori Boolean restano Boolean

Una sezione di calendario Date1904 selezionata combinata con condizioni di formato o costrutti di tempo trascorso viene rifiutata; vengono rifiutati anche i separatori di sezione tra virgolette o con escape, e questo confine non blocca una sezione numerica ordinaria selezionata solo perché un'altra sezione è un formato calendario

Rich text e scene di disegno ordinate

TXLSPortableCell.RichText è un array di record TXLSPortableTextRun contenenti Text, FontFamily, FontSizePoints, FontStyles, ColorRGB e BaselineShiftPoints; il testo concatenato dei run deve coincidere esattamente con il testo mostrato della cella

I run XLSX ereditano le proprietà omesse dal font effettivo della cella acquisita, formattazione di tabella e condizionale supportata compresa; i flag false assegnati esplicitamente e i valori espliciti none/baseline/automatic dei colori prevalgono sull'ereditarietà

Le shared strings native e le inline strings preservano i confini dei run e gli spazi; i figli, attributi, namespace di font nativi non supportati, i colori rich di tema/indicizzati e le annotazioni fonetiche vengono rifiutati invece di perdere silenziosamente l'aspetto visibile

I run Classic risolvono i loro indici di font BIFF memorizzati in font effettivi completi dei run; i metadati fonetici e i font di run non supportati vengono rifiutati, e l'acquisizione conserva generazione del workbook e pool di stili

Le forme testuali Classic leggono le proprietà OfficeArt esistenti e i run di font TXO senza creare wrapper di disegno né cambiare il workbook; gli ancoraggi usano dimensioni e offset reali di riga/colonna, i riempimenti solidi e i contorni supportati conservano i loro colori e larghezze, e i byte PNG/JPEG incorporati vengono scollegati prima del trasferimento

Il testo nei rettangoli usa i margini nativi orizzontali di 7,2 punti e verticali di 3,6 punti; il testo nelle ellissi usa in più il suo rettangolo di testo inscritto, mantenendo il testo ordinario dentro il contorno della forma in entrambe le facciate del workbook

I contenitori rettangolo ed ellisse Classic importati conservano il loro testo tipizzato e la formattazione; i metadati di forma o gruppo nativi saltati senza impronta risolta rifiutano esplicitamente l'acquisizione, mentre record sconosciuti di coda oggetto, estensioni di disegno, rotazione, riempimenti non solidi e stili di linea non supportati rifiutano un oggetto che interseca

Gli ancoraggi a due celle importati di XLSX per rettangoli ed ellissi supportano riempimenti solidi RGB espliciti con alpha, contorni solidi o tratteggiati/puntinati, offset fisici degli ancoraggi e un singolo paragrafo ordinario di rich text; ogni run conserva il suo typeface effettivo, la dimensione in punti, il colore, grassetto, corsivo, sottolineato singolo e barrato, inclusi reset espliciti di grassetto o corsivo

Il reader delle forme importate riserva storage grezzo di lavoro prima dell'analisi e verifica in modo cooperativo i budget di elementi, byte e testo; conserva l'ordine di disegno del workbook e i lease di lettura senza creare modelli di forme né celle assenti

Proprietà di forme native sconosciute, effetti, temi, rotazioni, trasformazioni raggruppate, paragrafi multipli e tipi di ancoraggio non supportati vengono rifiutati esplicitamente; un'impronta non supportata risolta fuori dal rettangolo di acquisizione non blocca la regione richiesta

Apice e pedice a livello di run usano due terzi della dimensione del font del run e uno spostamento di baseline di un terzo della dimensione in punti originale; un confine di stile che spezza un cluster di composizione Unicode, o una sequenza CRLF che attraversa confini di run incompatibili, viene rifiutato durante il layout nativo

TXLSPortableSceneObject porta un Kind, X, Y, Width, Height in punti, rettangolo di clipping, colori e opacità di riempimento/contorno, punti di percorso opzionali, cella di testo, o byte raster codificati e dimensioni

TXLSPortableSceneKind contiene xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG e xpskJPEG; l'ordine dell'array è l'ordine di disegno, con gli oggetti successivi che coprono i precedenti

L'overload aggiuntivo di CreateXLSPortableRenderSnapshot accetta un array TXLSPortableSceneObjects; interroga IXLSPortableRenderSceneSnapshot per Objects e ObjectCount a base zero, i cui getter restituiscono copie scollegate comprensive di array di run, punti e raster

Le immagini di cella e i percorsi delle caselle di controllo precedono i disegni mobili; i disegni mobili conservano l'ordine del workbook, gli ancoraggi fisici e il clipping della viewport, e le forme testuali usano il font del tema minore a 11 punti con margini di testo orizzontali di 7,2 punti e verticali di 3,6 punti

Le immagini PNG e JPEG vengono decodificate nativamente dopo il preflight su header, dimensioni in pixel e byte; le immagini mobili supportate conservano trasparenza e geometria di allungamento, mentre le immagini di cella entrano dentro la cella o il rettangolo unito completo preservando il rapporto d'aspetto

Ritaglio, rotazione, ombre, regolazione di luminosità/gamma, tiling, companion SVG e binding da camera live restano non supportati; l'XML delle immagini preservate viene validato rispetto all'aspetto supportato, quindi immagini nascoste, metadati annidati sconosciuti, proprietà con namespace estraneo, geometrie di immagine non rettangolari e trasformazioni non modellate vengono rifiutate solo quando la loro impronta interseca l'acquisizione

Le caselle di controllo Boolean delle celle usano un box vettoriale neutro rispetto al tema e un segno di spunta opzionale, controlli effettivi ereditati dai formati di riga e colonna inclusi; l'attraversamento richiesto delle celle è limitato prima di iniziare, gli altri tipi di controllo e i valori di casella di controllo vuoti o non Boolean vengono rifiutati, e le scene di cella supportate sopprimono il testo di fallback Boolean scalare o di errore immagine

Il valore predefinito di una casella di controllo è un metadato di inserimento e non fabbrica un Boolean per una cella assente; l'azzeramento esplicito del controllo su cella diretta maschera un controllo ereditato, mentre la lettura dell'acquisizione preserva l'assenza sparsa e la generazione del workbook

XLSReadPortableImageDimensions valida un IHDR PNG limitato o un frame JPEG sequenziale/progressivo a otto bit supportato e restituisce larghezza e altezza dichiarate; la decodifica resta responsabilità del renderer

IXLSPortableSceneCaptureSource.ReadPortableSceneObjects usa coordinate del workbook a base uno e coordinate di scena in punti relative all'intervallo, valida intervallo e limiti cooperativi e restituisce i conteggi consumati di byte, testo ed elementi; HasPortableCellScene identifica le celle la cui visualizzazione scalare viene sostituita dalla loro scena acquisita

Il layout nativo conta le celle della griglia con CellCount e LineCount comprende anche gli oggetti di scena testuali; il CellIndex di riga di un oggetto testuale è CellCount più la sua sequenza a base zero tra gli oggetti di scena testuali, mentre GetCellGeometry resta limitato alle celle della griglia

Gli snapshot scalari continuano a serializzarsi come HXRSNP01; gli snapshot contenenti run o oggetti di scena si serializzano come HXRSNP02, e il loader accetta entrambe le versioni con lo stesso contratto immutabile di proprietà e rollback della posizione di input

Il budget combinato di elementi conta le celle memorizzate, i run formattati, gli oggetti di scena e i punti dei percorsi; i limiti di byte tengono conto di array in staging e scollegati, testo, payload raster codificati e ispezione limitata dei metadati nativi prima dell'allocazione

API portabile degli snapshot

SimboloContratto
EXLSPortableRenderEccezione sollevata per dati di snapshot non validi, aspetto di acquisizione non supportato, backend nativo non disponibile, limiti di risorse o fallimenti di rendering
TXLSPortableFontStyle, TXLSPortableFontStylesxpfsBold, xpfsItalic, xpfsUnderline e xpfsStrikeout, combinati come insieme
TXLSPortableHorizontal, TXLSPortableVerticalxphLeft, xphCenter, xphRight e xpvTop, xpvCenter, xpvBottom
TXLSPortableBorderStyle, TXLSPortableBorderxpbsNone, xpbsSolid, xpbsDashed, xpbsDotted e xpbsDouble; ogni bordo porta Style, WidthPoints e ColorRGB
TXLSPortableCellRow/Column a base zero, RowSpan/ColumnSpan positivi, Text mostrato, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical e quattro record LeftBorder/TopBorder/RightBorder/BottomBorder
TXLSPortableCells, TXLSPortableSizesArray dinamici delle celle memorizzate e delle dimensioni fisiche di righe/colonne in punti
TXLSPortableRenderLimitsMaxGridCells, MaxStoredCells, MaxBytes e MaxTextCharacters limitano costruzione, acquisizione e serializzazione
XLSDefaultPortableRenderLimitsRestituisce 2000000 celle di griglia, 2000000 celle memorizzate, 67108864 byte e 16777216 caratteri di testo UTF-16
XLSDefaultPortableCellInizializza un'estensione a cella singola con Calibri a 11 punti e aspetto predefinito a zero; imposta posizione e aspetto desiderato prima della costruzione
CreateXLSPortableRenderSnapshotValida e copia generazione, altezze di riga, larghezze di colonna e celle memorizzate in un'interfaccia immutabile scollegata; le celle devono essere univoche, in ordine row-major, entro i confini e con estensioni non sovrapposte
IXLSPortableRenderSnapshotGeneration, RowCount, ColumnCount, CellCount in sola lettura, RowHeightPoints, ColumnWidthPoints a base zero e record Cells copiati
Metodi getter dello snapshotGetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth e GetCell espongono gli stessi valori; un accesso indicizzato non valido solleva un'eccezione
SaveXLSPortableRenderSnapshotValida e serializza uno snapshot in un buffer privato limitato, poi copia il payload completo HXRSNP01 o HXRSNP02 nello stream fornito alla sua posizione corrente
LoadXLSPortableRenderSnapshotLegge lo snapshot versionato little-endian con testo UTF-8 rigoroso, valida conteggi, geometria, stili ed estensioni, e rifiuta dati in coda; un fallimento ripristina la posizione dello stream di input

Tutti i limiti devono essere positivi; il massimo validato è 2000000 celle di griglia/memorizzate, 1073741824 byte e 268435456 caratteri di testo, con dimensioni al massimo di 1048576 righe per 16384 colonne

MaxGridCells conta l'intero rettangolo, celle vuote non memorizzate comprese; CellCount conta le celle visibili memorizzate e gli ancoraggi uniti, e può essere minore

Generation registra la generazione della sorgente o un valore fornito dall'applicazione; è un metadato, non un collegamento attivo a un workbook né un controllo automatico di freschezza

Rendering nativo e font espliciti

XLSPortableCairoBackendAvailable riporta la disponibilità del backend nativo compilato; l'output nativo richiede Free Pascal su Linux o macOS, con le librerie Cairo, FreeType, HarfBuzz e FriBidi disponibili al processo

Le build macOS collegano esplicitamente le quattro librerie native; un prefisso privato di dipendenze e un percorso esplicito del loader dei processi figlio possono fornirle senza cambiare le impostazioni condivise del compilatore o i profili della shell

Delphi XE5 Windows, Win32 e Win64 può compilare le interfacce portabili e usare la serializzazione degli snapshot, ma la preparazione del layout Cairo nativo riporta lì la non disponibilità del backend

Passa una catena di font esplicita a PrepareXLSPortableCairoLayout; il renderer prova prima la corrispondenza di famiglia e stile grassetto/corsivo, poi i fallback dello stesso stile nell'ordine fornito, richiedendo la copertura dei glifi per ogni cluster di testo supportato

Fornisci i file effettivi regular, bold, italic e bold-italic richiesti dal contenuto acquisito; non avviene alcuna scoperta di font di sistema né sostituzione sintetica di grassetto/corsivo, e file mancanti, mappature di stile o copertura di glifi insufficiente vengono rifiutati

I byte dei font vengono catturati prima dello shaping, quindi cambiare un file influenza i layout successivi mentre un layout esistente conserva i byte catturati; FaceIndex seleziona la faccia non negativa in un file o raccolta di font

Le operazioni native sono serializzate per la sicurezza delle facce FreeType; gli snapshot immutabili e l'ispezione del layout preparato non richiedono un workbook attivo

Fonts[0].FamilyName := 'Calibri';
Fonts[0].FileName := '/srv/fonts/Regular.ttf';
Fonts[0].FaceIndex := 0;
Fonts[0].Bold := False;
Fonts[0].Italic := False;

Qui Calibri è un alias esplicito di famiglia per il file scelto, consentendo una mappatura dei font controllata dall'applicazione; ispeziona le metriche dell'output quando mappi su un font diverso

Il renderer supporta interruzioni di riga esplicite, espansione dei tab a quattro spazi, ordinamento bidirezionale dei paragrafi, legature e segni combinanti con shaping, wrapping greedy e riduzione per adattare; il testo a capo ha precedenza sulla riduzione

Il wrapping preserva i confini implementati di segni combinanti, selettori di variazione, ZWJ e virama e privilegia spazi e spazi ideografici; non è un'implementazione completa dei grapheme UAX #29 né dell'algoritmo di interruzione di riga Unicode, e i confini di wrapping di indicatori regionali e Hangul Jamo non sono garantiti

Le dimensioni dei font si risolvono a 1/64 di punto e il testo viene tagliato ai confini della cella; il PDF incorpora i font espliciti con mappature testuali logiche, l'SVG usa percorsi vettoriali dei glifi, e il PNG disegna gli stessi glifi posizionati al DPI richiesto

Preparare e ispezionare un layout

SimboloContratto
TXLSPortableFontFile, TXLSPortableFontFilesOgni mappatura esplicita contiene FamilyName, FileName, FaceIndex, Bold e Italic; l'array dinamico è ordinato e contiene da 1 a 64 mappature
TXLSPortableCairoFormat, TXLSPortableOutputFilesxpcfPDF, xpcfSVG o xpcfPNG, e un array di nomi di file di output restituito dal salvataggio su file
TXLSPortableCairoOptionsLarghezza/altezza pagina, quattro margini, padding delle celle e DPI raster, più limiti su pagina, glifi, righe, layout, output, font, shaping e disegno
XLSDefaultPortableCairoOptionsInizializza ogni opzione con predefiniti limitati; usalo prima di sovrascrivere i singoli campi
PrepareXLSPortableCairoLayoutValida e copia uno snapshot, cattura i byte espliciti dei font e restituisce un TXLSPortableCairoLayout preparato di proprietà; rilascialo con Free
TXLSPortableCairoLayoutEspone PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save e Destroy
TXLSPortableTextLineInfoUn record di riga copiato ha CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints e Text logico
TXLSPortableCellGeometryUn rettangolo copiato ha XPoints, YPoints, WidthPoints e HeightPoints nel layout completo
GetTextLine(Index), GetCellGeometry(Index)Ispezione indicizzata a base zero delle righe preparate e delle celle memorizzate; indici non validi vengono rifiutati

La paginazione taglia i tile fissi dell'area stampabile in ordine prima-in-largo-poi-in-alto; una cella o un frammento di testo che attraversa i confini di pagina compare su ogni pagina intersecante, senza adattamento automatico dell'intera cella, ripetizione dei titoli di stampa del foglio o interpretazione dell'impostazione pagina del workbook

Opzioni e limiti del renderer

CampiPredefiniti e significato
PageWidthPoints, PageHeightPoints595 per 842 punti
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints36 punti ciascuno; i margini devono lasciare un rettangolo stampabile positivo
CellPaddingPoints, RasterDPI2 punti e 96 DPI; il DPI influenza le dimensioni del PNG
MaxPages, MaxGlyphs, MaxLines256 pagine, 2000000 glifi con shaping e 200000 righe di testo
MaxLayoutBytes268435456 byte per il lavoro di layout limitato e i controlli della superficie raster
MaxOutputBytes268435456 byte per ogni buffer di output renderizzato, che copre il PDF completo o una pagina SVG/PNG, non la somma dei file di pagina separati
MaxFontBytes134217728 byte sui file di input espliciti dei font per un layout
MaxShapedCharacters, MaxDrawOperations16000000 ciascuno, limitando il lavoro di shaping e il disegno pagina-per-cella

Geometrie non valide o non finite e budget di lavoro non positivi vengono rifiutati; le dimensioni della pagina sono limitate a 100000 punti e il DPI raster a 1200, con ulteriori controlli su byte, conteggi e area raster prima del rendering

Il pool nativo dei byte di font a livello di processo consente inoltre al massimo 256 buffer distinti e 256 MiB; byte esattamente identici possono condividere lo storage, e la capacità viene rilasciata solo quando la faccia di font effettivamente posseduta da Cairo rilascia il suo buffer

Libera ogni layout quando hai finito; la libreria non azzera le cache condivise di Cairo, e un layout logicamente completato può lasciare byte di font residenti mentre Cairo nativo possiede ancora una faccia

Scrivere l'output e gestire i fallimenti

SaveToStream(Stream, Format, PageIndex = 0) scrive tutte le pagine per il PDF, richiedendo PageIndex = 0; SVG e PNG scrivono la pagina selezionata a base zero

La serializzazione dello snapshot e il rendering nativo si completano in buffer privati limitati prima di copiare sullo stream di destinazione; un fallimento di validazione o di rendering lo preserva, ma un fallimento di scrittura dello stream del chiamante può lasciare byte parziali e segue il comportamento di fallimento proprio di quello stream

Save(FileName, Format) scrive un file PDF o un file SVG/PNG per pagina e restituisce i loro percorsi; i nomi multipagina inseriscono -0001, -0002 e suffissi successivi prima dell'estensione

Destinazioni su file o directory esistenti vengono rifiutate; ogni salvataggio prepara in staging tutte le pagine, pubblica destinazioni nuove in modo esclusivo e rimuove i propri output in staging/pubblicati in caso di fallimento

Il filesystem deve supportare le operazioni native di staging esclusivo e pubblicazione tramite link; i salvataggi separati PDF, SVG e PNG sono operazioni separate e non formano una transazione combinata

Consumatore Linux standalone

Tests/Portable/RenderPortableSnapshot.pas è un consumatore completo che carica uno snapshot, prepara un layout e salva tutti e tre i formati; compilalo su Linux con le unità portabili e le librerie native installate

fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas
./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96

fonts.tsv è un testo UTF-8 con quattro campi separati da tab per mappatura: alias di famiglia, percorso Linux assoluto del font, indice della faccia e uno tra regular, bold, italic o 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

Usa file di font realmente installati o forniti dall'applicazione, e scegli una nuova base di output perché i file di destinazione esistenti vengono rifiutati; includi fallback aggiuntivi dello stesso stile per gli alfabeti non coperti dalla prima mappatura

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;

Registrazione dei grafici in cache

XLSRecordCachedChartScene in lxPagination registra le primitive basate su punti del renderer di layout dei grafici esistente in una rappresentazione di scena portabile immutabile; la sua sorgente deve essere un TXLSXChart scollegato senza foglio proprietario e senza XML nativo preservato, quindi la registrazione non può risolvere riferimenti al foglio né aggiornare le cache del workbook

Il sottoinsieme corrente supporta grafici a colonne, barre, linee, dispersione, torta, ciambella e aree ordinarie a serie singola con un gruppo di tracciato primario, cache di valori numerici finite e indici di cache limitati e strettamente crescenti; le cache di categorie della dispersione contengono coordinate X numeriche, mentre le altre famiglie usano etichette di categoria memorizzate

Le cache di valori di colonne, barre, linee e aree devono avere indici contigui a base zero; i vuoti sparsi nei valori di categoria vengono rifiutati, e la registrazione non espande mai gli indici mancanti in un grande array

I tracciati a barre conservano la geometria orizzontale e le etichette categoriali; i tracciati a torta e ciambella usano legende di categoria, rispettano FirstSliceAng e HoleSize e omettono gli assi numerici, mentre i tracciati ad area ordinarie a serie singola conservano un poligono pieno attorno alla baseline zero

Le serie a linea e dispersione supportano visibilità di linea indipendente, colore RGB esplicito e larghezza del punto tramite LineVisible, LineColorRGB e LineWidthPoints; LineStyleSet, LineColorSet e LineWidthSet distinguono le impostazioni esplicite dai predefiniti ereditati, e EffectiveLineVisible risolve la convenzione esistente delle serie solo-riempimento

I marcatori supportano il cerchio automatico, un cerchio esplicito o nessun marcatore; un MarkerSize esplicito da 2 a 72 imposta il diametro in punti, e MarkerFillSet e MarkerBorderSet distinguono un valore RGB nero esplicito di zero da una selezione automatica del colore; i segmenti di collegamento vengono dipinti prima dei marcatori dati opachi

I bordi espliciti dei marcatori senza larghezza memorizzata usano la linea ordinaria di 0,75 punti, mentre i campioni della legenda limitano il diametro del cerchio a 6 punti; i font dei titoli richiesti vengono scritti sia sul run di rich text effettivo sia sulle sue proprietà testuali predefinite, conservando dimensione, colore ed enfasi visibili quando Excel esporta il grafico

Famiglie di grafici non supportate, tracciati ad area impilati o multi-serie, tracciati circolari multi-serie, stili di galleria, angoli arrotondati, gruppi di tracciato secondari o combinati, assi di data, formati numerici personalizzati, assi logaritmici, comportamenti di incrocio personalizzati, testo ruotato, linee di tendenza, barre di errore, categorie gerarchiche, etichette dati, altre forme di marcatori e cache di valori mancanti sollevano EXLSPortableRender prima del rendering

Font dei tick dell'asse dei valori personalizzati, griglie minori, unità maggiori/minori esplicite, colori espliciti delle serie non validi e posizioni degli assi non supportate vengono rifiutati; le legende a barre attualmente richiedono il collocamento ordinario a destra, e i tracciati circolari richiedono un totale in cache finito e non nullo e una geometria limitata con una prenotazione conservativa anticipata dello storage di lavoro per gli archi

L'array restituito conserva l'ordine primitivo di disegno, i colori espliciti, i font, l'allineamento del testo, l'opacità e i confini di clipping del grafico; la contabilità di elementi, byte e testo comprende prenotazioni conservative dello storage di lavoro del renderer, e i controlli cooperativi della cache precedono l'allocazione degli array di lavoro

XLSValidateCachedChartSceneModel esegue lo stesso preflight limitato su cache e aspetto su un modello senza risolvere le celle del foglio; il bridge di acquisizione XLSX usa questo controllo prima della clonazione e registra i modelli di grafici creati dall'autore supportati con riferimenti A1 locali monodimensionali, offset fisici degli ancoraggi nativi, clipping dell'intervallo e ordine di disegno

Il registratore indipendente dalla piattaforma vive in lxPortableChart; i punti di ingresso esistenti di lxPagination condividono gli stessi corpi di layout e registrazione delle primitive, conservando il comportamento del renderer Windows e corrispondendo byte di scena immutabili e contabilità dei budget per ogni famiglia supportata

L'acquisizione nativa del workbook su Linux e macOS usa l'overload di geometria esplicito descritto sotto; riempimento RGB delle serie importate, sfondo dell'area del tracciato, sfondo del grafico e bordo del grafico vengono recuperati dalle loro proprietà di forma con namespace risolto, così un colore di serie annidato non può sovrascrivere lo sfondo del tracciato

Il ChartML preservato importato viene accettato solo quando il suo stream di elementi, attributi e testo significativo espansi per namespace coincide con la ricostruzione tipizzata supportata; gli alias di namespace e l'ordine degli attributi si normalizzano, mentre estensioni native non modellate, attributi estranei e aspetto non supportato vengono rifiutati in modo conservativo

I budget di lavoro per XML grezzo e scratch di ricostruzione vengono verificati prima della clonazione e della proiezione; solo la copia scollegata cancella il proprio XML preservato validato, e la sorgente conserva metadati nativi, storage delle celle, contenuti della cache e generazione

L'acquisizione attraversa l'ordine di disegno OfficeArt sottostante, compresi i frame di grafici assenti dal wrapper pubblico Shapes, e rifiuta un frame non supportato che interseca invece di ometterlo silenziosamente

Grafici Classic in cache con aspetto dichiarato

L'acquisizione Classic BIFF8 supporta le sette famiglie di grafici ordinarie mostrate sopra quando i loro record principali, i valori locali memorizzati, le scale lineari esplicite e l'aspetto sono rappresentabili; legge i record trattenuti e le cache delle formule disponibili senza valutare formule, espandere storage sparso né clonare alberi di formule compilati

Usa TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) per creare una vista in sola lettura separata con un insieme bloccato di valori TXLSClassicChartAppearanceDeclaration forniti da IXLSClassicChartAppearanceSource; Geometry è opzionale su Windows e fornisce misurazioni native esplicite dei font su Linux o macOS

TXLSClassicChartAppearanceDeclarations è l'array dinamico di dichiarazioni primitive che un'applicazione può usare per implementare quella sorgente

Passa quella vista configurata a CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); le coordinate sono a base uno e l'adattatore ripristina il foglio attivo del chiamante quando l'acquisizione si conclude o viene rifiutata

I punti di ingresso ordinari di acquisizione continuano a rifiutare layout Classic effettivi o font di legenda non risolti; il punto di ingresso con vista distinta usa le dichiarazioni già bloccate e il provider di geometria

Membro della dichiarazioneContratto
Generation, SheetIndex, ObjectIdLa generazione bloccata del workbook, l'indice del foglio a base uno e l'identità reale dell'oggetto grafico memorizzato; generazioni obsolete, identità mancanti o ripetute e identità appartenenti a un altro oggetto vengono rifiutate
HasChartSize, ChartWidthPoints, ChartHeightPointsUna dimensione esplicita, finita e positiva del frame del grafico in punti; conserva l'origine dell'ancoraggio memorizzata e l'ordine di disegno, mentre un flag false mantiene le dimensioni derivate dall'ancoraggio
HasPlotInnerRectangle, PlotInnerRectangleUn rettangolo interno di tracciato esplicito, etichette e titoli degli assi esclusi; è richiesto per questo percorso di aspetto dichiarato
HasTitleRectangle, TitleRectangleUn rettangolo del titolo esplicito quando il grafico ha un titolo; testo, famiglia di font, enfasi e colore della sorgente vengono comunque presi dai record principali validati
HasLegendRectangle, LegendRectangleI confini dichiarati della legenda quando una legenda è presente
HasLegendFontSize, LegendFontSizePointsLa dimensione effettiva in punti esplicita del chiamante per una legenda presente; famiglia, enfasi e colore del font principale vengono conservati
TXLSPortableChartRectangleLeft, Top, Width e Height sono punti finiti relativi al frame del grafico acquisito; i rettangoli attivi richiedono dimensioni positive dentro quel frame
Count, GetCount, ReadDeclarationLa sorgente riporta un conteggio limitato e restituisce un record primitivo per ogni indice a base zero mentre la vista è configurata; le dichiarazioni vengono copiate prima dell'acquisizione successiva

Questi valori sono aspetto dichiarato dal chiamante, non layout Excel automatico né scalatura di font inferita; ottienili da una sorgente verificata indipendentemente o da un layout definito dall'applicazione e controlla l'output con la mappatura nativa esplicita dei font usata per il rendering

Le dimensioni esplicite del frame e i confini interni di tracciato devono lasciare spazio sufficiente ai font validati delle etichette degli assi; spazio insufficiente per le etichette viene rifiutato invece di tagliare il testo o applicare un fattore di scala adattato

Le applicazioni tengono in vita il proprietario del workbook finché la vista non viene rilasciata; la vista presa in prestito tiene un lease di lettura e conserva la sorgente delle dichiarazioni, mentre lo snapshot immutabile risultante non conserva né il workbook né il provider

La proiezione principale supportata comprende riempimenti solidi letterali, linee solide visibili, marcatori circolari, testo di titolo e legenda, collocamento delle categorie e tick numerici espliciti limitati; scale automatiche, aspetto automatico dei marcatori non risolto, smussi, estensioni rich sconosciute, riferimenti di serie estranei o non lineari e stili di punto non rappresentati vengono rifiutati prima dell'output

Dichiarare geometria o dimensione della legenda non autorizza a ignorare estensioni dei grafici sconosciute o stili non validati; i limiti di byte, testo, celle memorizzate e scena restano efficaci per i dati della sorgente trattenuti, le dichiarazioni, le cache scollegate e lo storage di lavoro di registrazione

Gli overload aggiuntivi di XLSValidateCachedChartSceneModel e XLSRecordCachedChartScene accettano TXLSCachedChartSceneAppearance per un modello scollegato; inizializzalo con XLSDefaultCachedChartSceneAppearance prima di impostare i controlli espliciti

Il XLSReadClassicChartScene di livello più basso in lxClassicChartScene restituisce un TXLSXChart scollegato di proprietà del chiamante, contatori primitivi di aspetto e budget a partire da un TXLSCustomChart trattenuto, il suo calcolatore sorgente esatto e un TXLSClassicChartSceneSource in lease; libera il modello restituito dopo la registrazione

TXLSClassicChartSceneSource.ReadAppearance fornisce una dichiarazione primitiva, ReadCell legge valori locali memorizzati bloccati e limitati, ReadFont riempie lo stile testuale fornito con dati limitati del font principale effettivo, e PaletteColor risolve le voci esplicite memorizzate della palette; le implementazioni delle applicazioni devono preservare la sorgente bloccata e rispettare ogni quota di byte e caratteri fornita

Membro dell'aspetto della scenaSignificato
SeriesMarkerSizePointsDiametri in punti per serie, limitati, valori frazionari inclusi; zero mantiene la dimensione del marcatore del modello e un override non nullo deve essere da 2 a 72 punti
OverrideBorder, BorderColorRGB, BorderWidthPointsAspetto esplicito del contorno del frame del grafico
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPointsColori e larghezze in punti espliciti di assi, tick e griglia maggiore
AreaFillOpacity, SeriesFillAlphaOpacità dell'area e alpha del riempimento delle serie
UseAxisTickControls, CategoryBetweenControlli espliciti degli assi validati e collocamento categoriale
TitleOffsetXPoints, TitleOffsetYPointsOffset finiti applicati alla posizione ordinaria del titolo del registratore
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangleRettangoli letterali in punti relativi al frame del grafico
PieRadiusRatioRaggio del tracciato circolare come frazione limitata della dimensione minore del tracciato

Le primitive dei grafici seguono la politica di layout esistente di HotXLS; l'aspetto di galleria dei grafici che richiede i predefiniti non modellati di Excel resta un confine esplicito non supportato

Acquisizione nativa diretta del workbook

CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) restituisce un IXLSRenderGeometry basato sugli stessi file di font espliciti, FreeType, HarfBuzz e text shaping usati per l'output nativo; le larghezze delle colonne usano l'effettiva larghezza misurata massima delle cifre con la calibrazione del workbook

Il provider possiede i byte dei font scollegati e una cache di metriche limitata, verifica i budget di font e layout prima dell'allocazione e valida le richieste di misurazione prima di cambiare lo stato in cache; una cache piena può restituire misurazioni non in cache senza espandersi oltre la propria capacità

L'acquisizione verifica che la generazione del provider e tutti i campi di calibrazione corrispondano alla vista corrente del workbook in sola lettura, trattiene il provider per quella vista e lascia invariata la factory di geometria predefinita del workbook; la geometria nativa predefinita ordinaria resta un confine GDI esplicito

Acquisisci la generazione tramite una vista rilasciata esplicitamente prima di creare il provider; trattenere il risultato temporaneo di un'interfaccia può trattenere il suo lease di lettura fino alla fine dello scope circostante

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);

I consumatori nativi compilano con LX_PORTABLE_CORE e le corrispondenti dipendenze native; le chiamate Windows alla factory nativa di geometria Cairo vengono rifiutate esplicitamente, mentre l'acquisizione su Windows può usare la sua factory di geometria esistente attraverso gli stessi overload con scope

L'acquisizione nativa effettiva supporta gli scalari modellati, il rich text, i raster supportati, le forme ordinarie e le sette famiglie di grafici in cache descritte sopra; l'acquisizione dei grafici preserva il ChartML importato originale, i punti in cache, lo storage sparso delle celle, lo storage compattato e la generazione del Workbook

Per aree di stampa immutabili, margini, adattamento o scala percentuale, titoli ripetuti, interruzioni manuali e paginazione di celle intere o unite, vedi i piani di stampa portabili

Bridge avanzato di acquisizione

IXLSRenderCaptureSource in lxSemanticSnapshot è l'interfaccia di coordinazione interna implementata dalle viste del workbook in sola lettura supportate; le applicazioni ordinarie dovrebbero chiamare gli overload di acquisizione basati sul proprietario

TXLSClassicReadOnlyWorkbookView e TXLSXReadOnlyWorkbookView implementano IXLSRenderCaptureSource, compresi gli otto metodi di rendering mostrati sotto; queste classi coordinano l'acquisizione tramite viste in sola lettura, l'adattatore gestisce la loro durata di vita mentre le applicazioni conservano l'interfaccia proprietaria del workbook e chiamano CaptureXLSPortableRenderSnapshot

Il loro metodo TryReadCell esistente fornisce uno snapshot delle celle memorizzate attraverso la vista in sola lettura; i metodi di rendering aggiungono aspetto e geometria scollegati per l'acquisizione portabile

Membro o helperScopo
ValidateRenderRangeControlla i confini del rettangolo a base uno e le impronte di aspetto non supportate prima dell'acquisizione
ReadRenderStyleRestituisce metadati TXLSSemanticCellStyle scollegati e un flag di presenza di rich text per una cella a base uno
IXLSRenderRichTextCaptureSource, ReadRenderRichTextEstensione opzionale della vista che restituisce TXLSRenderTextRuns scollegati e limitati; ogni TXLSRenderTextRun contiene Text e uno Style semantico effettivo, usando lo stile base fornito e quote positive di run/byte senza materializzare celle né modificare i pool di stili
RenderRowHeightPoints, RenderColumnWidthPointsRestituiscono geometria fisica, collassando le dimensioni nascoste a zero
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometryEstensione opzionale della vista che trattiene un provider esplicito solo dopo validazione di generazione e calibrazione; provider non validi lasciano invariato il provider trattenuto della vista
ReadRenderMergeRiporta il rettangolo di unione completo e inclusivo a base uno che contiene una cella
ResolveRenderColorRisolve l'aspetto semantico tema/indicizzato/RGB in un colore RGB portabile, usando il predefinito fornito dove supportato
RenderDate1904, RenderRightToLeftEspongono il contesto del sistema di data del workbook e l'ordine di lettura del foglio
XLSRenderCaptureLiteralRiconosce il sottoinsieme supportato di Boolean letterali, numeri finiti o testo semplice tra virgolette per l'acquisizione senza valutazione
XLSRenderCaptureIntersectsVerifica intervalli A1 locali separati da spazi contro un rettangolo a base uno, rifiutando sintassi di intervallo non risolvibile
XLSRenderCaptureConditionValuta il sottoinsieme supportato di condizioni contro uno scalare esistente; i codici degli operatori di confronto da 1 a 8 significano between, not-between, equal, not-equal, greater, less, greater-or-equal e less-or-equal
XLSRenderCaptureApplyDxfApplica l'aspetto differenziale scollegato supportato usando una maschera AppliedSlots per conservare la formattazione a priorità più alta
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearanceMetodi di coordinazione dell'importazione con prefisso interno che registrano e ispezionano l'aspetto che il modello differenziale tipizzato non può renderizzare in sicurezza; Assign conserva il marcatore, e l'acquisizione rifiuta uno stile contrassegnato corrispondente

Questi helper del bridge possono sollevare EXLSSemanticSnapshot; l'adattatore pubblico di acquisizione traduce quell'eccezione in EXLSPortableRender