Salida headless portable
Disponible desde la versión 2.384.100 como una tubería de salida acotada con APIs explícitas de captura y renderizado
Capture un rectángulo admitido de un libro Classic XLS o XLSX en Windows, transfiera su instantánea inmutable, y renderice PDF, SVG o PNG en Linux o macOS con Free Pascal y Cairo nativo
El adaptador de captura usa el motor del libro; la captura en Windows usa su servicio de geometría predeterminado, mientras que la captura nativa en Linux y macOS puede aportar un servicio de geometría explícito FreeType/HarfBuzz respaldado por archivos de fuentes seleccionados por la aplicación
El consumidor nativo separado acepta escenas lxPortableRender a través de lxPortableCairo, sin Excel ni una sesión de escritorio; su API de geometría también usa las unidades portátiles existentes de vistas del libro y geometría de renderizado
El consumidor acepta una escena inmutable o un stream de transferencia; los requisitos de plataforma para cargar y calcular libros se describen por separado en el soporte de Free Pascal
Capturar el rectángulo de un libro existente
CaptureXLSPortableRenderSnapshot en lxPortableWorkbookCapture acepta un IXLSWorkbook o un IXLSXWorkbookOwner, con TXLSPortableRenderLimits explícitos o predeterminados; dos sobrecargas adicionales aceptan límites explícitos seguidos de un proveedor IXLSRenderGeometry con el alcance de la vista de captura
SheetIndex y los Row1, Col1, Row2, Col2 inclusivos están basados en uno; la instantánea resultante almacena posiciones basadas en cero relativas al rectángulo capturado
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.
Mantenga viva la interfaz de propietario mientras use el objeto del libro; libere la interfaz en lugar de liberar manualmente un libro de propiedad de una interfaz
Para Classic XLS, use TXLSWorkbook y IXLSWorkbook de lxHandle con la misma llamada de captura
La captura lee las cachés de fórmulas existentes y rechaza cualquier fórmula del rectángulo sin caché; nunca recalcula implícitamente, ni obtiene datos externos ni interna estilos nuevos en el libro de la fuente
Recalcule explícitamente antes de capturar cuando su aplicación necesite resultados de fórmulas frescos; una caché existente se renderiza tal como está almacenada, de modo que la captura no certifica su frescura
La operación mantiene una vista de lectura y comprueba la generación del libro antes de devolver; su instantánea devuelta está desacoplada de la propiedad del libro y sigue siendo utilizable después de que el libro se libere
Apariencia y límites de la captura
La instantánea contiene texto de visualización formateado, dimensiones físicas en puntos, colores RGB resueltos, fuentes y alineaciones de celdas admitidas, rellenos, bordes y rectángulos combinados completos; las filas y columnas ocultas tienen tamaño cero
La apariencia de fuentes admitida incluye negrita, cursiva, subrayado simple y tachado; la apariencia de celdas admitida incluye rellenos sólidos, alineación horizontal izquierda/centro/derecha, alineación vertical superior/centro/inferior, ajuste de texto, contracción y orden de lectura de derecha a izquierda
Los bordes del libro fino, mediano, grueso, hair, doble, punteado, discontinuo y mediano-discontinuo se mapean a los estilos de bordes portátiles y a los anchos en puntos; los demás estilos de bordes provocan rechazo
El texto enriquecido admitido lleva fuentes efectivas de las ejecuciones, tamaños en puntos, colores RGB, negrita, cursiva, subrayado simple, tachado y superíndice o subíndice a nivel de ejecución; los efectos de fuente de contorno/sombra/vertical de celdas simples, los estilos de subrayado no admitidos, los rellenos degradados o con patrones, los bordes diagonales, la sangría, la rotación de texto y las alineaciones no admitidas provocan rechazo
Un rectángulo de captura debe contener cada celda combinada por completo; las combinaciones recortadas, superpuestas o inconsistentes y los estilos incompatibles a lo largo de un borde exterior combinado provocan rechazo
Los fondos de hoja y los tipos de hojas no admitidos provocan el rechazo de la captura; las imágenes PNG/JPEG admitidas y las formas ordinarias de texto rectángulo/elipse en ambas fachadas de libros se capturan como objetos de escena ordenados, junto con las imágenes de celdas XLSX, las casillas de verificación Boolean y el subconjunto admitido de gráficos XLSX en caché descrito abajo; los gráficos no admitidos, los presets de formas, WordArt, las transformaciones agrupadas, los controles flotantes, los Slicers, los Timelines y los sparklines provocan rechazo cuando sus huellas resueltas intersectan el rectángulo
El contenido no admitido con una huella resuelta confiable fuera del rectángulo puede coexistir con la captura; una huella de dibujo irresoluble provoca rechazo en lugar de omitir silenciosamente contenido potencialmente superpuesto
El estilo de tablas Classic que intersecte el rectángulo provoca rechazo; las secciones Table integradas y personalizadas admitidas de XLSX se resuelven en un contexto de estilos desacoplado, con franjas del tamaño de la sección y sobrescrituras directas de formato de celda
Para los rellenos sólidos o diferenciales implícitos admitidos de Table importado, el bgColor RGB aporta el fondo visible; el fgColor RGB solo deja el fondo heredado sin cambios, y una sección que lleve ambos colores usa su color de fondo
Las secciones Table importadas que contengan apariencia que el resumen con tipo no pueda representar provocan rechazo cuando esa sección aplica, incluidos el subrayado, los formatos numéricos, la negrita/cursiva limpiadas explícitamente, los esquemas de fuentes, un patrón explícito sin relleno y las formas de color no admitidas; una sección no relacionada fuera del rectángulo capturado no bloquea la captura
El formato condicional admitido se aplica sin evaluación de fórmulas: comparaciones numéricas o de fechas en caché contra límites numéricos literales, expresiones Boolean o numéricas literales, reglas de contención/prefijo/sufijo de texto, blancos y errores; la apariencia de mayor prioridad gana por propiedad admitida, y el StopIfTrue de XLSX detiene las reglas de coincidencia de menor prioridad
Las reglas de texto Classic exigen una aguja de cadena literal y coinciden con celdas de cadenas en caché; las reglas de texto XLSX usan sus criterios de texto almacenados
La apariencia diferencial admitida incluye colores de tema resueltos con tint y colores indexados simples; los colores automáticos importados, el tint no temático, un relleno diferencial que lleve tanto color de frente como de fondo, y los bordes, alineaciones, tachados u otra apariencia diferencial no admitida o no representada provocan rechazo cuando la regla coincidente aplica
Las fórmulas condicionales que exigen evaluación, las reglas agregadas o dependientes de fechas, las escalas de color, las barras de datos y los conjuntos de iconos provocan rechazo donde se encuentren; los conteos de reglas de formato condicional superpuestas están acotados
La conversión Date1904 elige la sección aplicable del formato numérico crudo antes de aplicar el desplazamiento de calendario; las secciones de calendario inactivas no cambian la visualización numérica ordinaria, y los valores Boolean siguen siendo Boolean
Una sección de calendario Date1904 seleccionada combinada con condiciones de formato o construcciones de tiempo transcurrido provoca rechazo; los separadores de sección entre comillas o escapados también provocan rechazo, y este límite no bloquea una sección numérica ordinaria seleccionada solo porque otra sección sea un formato de calendario
Texto enriquecido y escenas ordenadas de dibujos
TXLSPortableCell.RichText es un arreglo de registros TXLSPortableTextRun que contienen Text, FontFamily, FontSizePoints, FontStyles, ColorRGB y BaselineShiftPoints; el texto de las ejecuciones concatenado debe ser exactamente igual al texto de visualización de la celda
Las ejecuciones XLSX heredan las propiedades omitidas de la fuente efectiva de la celda capturada, incluidos el formato de tablas y el formato condicional admitidos; los indicadores false asignados explícitamente y los valores explícitos none/baseline/automatic de color sobrescriben la herencia
Las cadenas compartidas nativas y las cadenas en línea preservan los límites de las ejecuciones y el espacio en blanco; los hijos de fuentes nativas no admitidos, los atributos, los espacios de nombres, los colores enriquecidos de tema/índice y las anotaciones fonéticas provocan rechazo en lugar de perder silenciosamente la apariencia visible
Las ejecuciones Classic resuelven sus índices de fuentes BIFF almacenados a fuentes efectivas completas de las ejecuciones; los metadatos fonéticos y las fuentes de ejecuciones no admitidas provocan rechazo, y la captura retiene la generación del libro y los pools de estilos
Las formas de texto Classic leen las propiedades OfficeArt existentes y las ejecuciones de fuentes TXO sin crear envoltorios de dibujo ni cambiar el libro; los anclas usan dimensiones reales de filas/columnas y desplazamientos, los rellenos sólidos y contornos admitidos conservan sus colores y anchos, y los bytes PNG/JPEG incrustados se desacoplan antes de la transferencia
El texto de rectángulos usa los márgenes nativos de 7.2 pt horizontal y 3.6 pt vertical; el texto de elipses usa adicionalmente su rectángulo de texto inscrito, manteniendo el texto ordinario dentro del contorno de la forma en ambas fachadas de libros
Los contenedores Classic importados de rectángulos y elipses conservan su texto y formato con tipo; los metadatos nativos de formas o grupos omitidos sin huella resuelta provocan el rechazo explícito de la captura, mientras que los registros desconocidos de cola de objetos, las extensiones de dibujo, la rotación, los rellenos no sólidos y los estilos de línea no admitidos provocan el rechazo de un objeto que intersecte
Los anclas importados de XLSX de dos celdas para rectángulos y elipses admiten rellenos sólidos RGB explícitos con alfa, contornos sólidos o discontinuos/punteados, desplazamientos físicos de anclas y un único párrafo ordinario de texto enriquecido; cada ejecución conserva su tipografía efectiva, tamaño en puntos, color, negrita, cursiva, subrayado simple y tachado, incluidos los reinicios explícitos de negrita o cursiva
El lector de formas importadas reserva almacenamiento temporal de XML crudo antes del análisis y comprueba cooperativamente los presupuestos de elementos, bytes y texto; retiene el orden de dibujo del libro y las concesiones de lectura sin crear modelos de formas ni celdas ausentes
Las propiedades nativas desconocidas de formas, los efectos, los temas, las rotaciones, las transformaciones agrupadas, los párrafos múltiples y los tipos de anclas no admitidos provocan rechazo explícito; una huella no admitida resuelta fuera del rectángulo de captura no bloquea la región solicitada
El superíndice y el subíndice a nivel de ejecución usan dos tercios del tamaño de fuente de la ejecución y un desplazamiento de línea base de un tercio de su tamaño original en puntos; un límite de estilo que divida un clúster de conformación Unicode, o una secuencia CRLF que cruce límites de ejecuciones incompatibles, provoca rechazo durante el diseño nativo
TXLSPortableSceneObject lleva un Kind, X, Y, Width, Height en puntos, rectángulo de recorte, colores de relleno/contorno y opacidad, puntos de ruta opcionales, celda de texto, o bytes y dimensiones de raster codificados
TXLSPortableSceneKind contiene xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG y xpskJPEG; el orden del arreglo es el orden de dibujo, con los objetos posteriores cubriendo a los anteriores
La sobrecarga adicional de CreateXLSPortableRenderSnapshot acepta un arreglo TXLSPortableSceneObjects; consulte IXLSPortableRenderSceneSnapshot para los Objects y ObjectCount basados en cero, cuyos getters devuelven copias desacopladas incluidos los arreglos de ejecuciones, puntos y raster
Las imágenes de celdas y las rutas de casillas de verificación preceden a los dibujos flotantes; los dibujos flotantes conservan el orden del libro, los anclas físicos y el recorte del viewport, y las formas de texto usan la fuente menor del tema a 11 puntos con márgenes de texto de 7.2 puntos horizontales y 3.6 puntos verticales
Las imágenes PNG y JPEG se decodifican de forma nativa después de la verificación previa de encabezado, tamaño de píxel y bytes; las imágenes flotantes admitidas conservan la transparencia y la geometría de estiramiento, mientras que las imágenes de celdas caben dentro de la celda o del rectángulo combinado completo con su relación de aspecto preservada
El recorte, la rotación, las sombras, el ajuste de luminancia/gamma, el mosaico, los acompañantes SVG y los enlaces de cámara en vivo permanecen sin admitir; el XML de imágenes preservado se valida contra la apariencia admitida, de modo que las imágenes ocultas, los metadatos anidados desconocidos, las propiedades con espacios de nombres ajenos, la geometría de imágenes no rectangular y las transformaciones no modeladas provocan rechazo únicamente cuando su huella se superpone a la captura
Las casillas de verificación Boolean de celdas usan un cuadro vectorial neutral al tema y una marca de verificación opcional, incluidos los controles efectivos heredados de los formatos de filas y columnas; el recorrido solicitado de celdas está acotado antes del traversal, los demás tipos de controles y los valores de casillas en blanco o no Boolean provocan rechazo, y las escenas de celdas admitidas suprimen el texto de fallback de Boolean escalar o de errores de imágenes
Un valor predeterminado de casilla de verificación es un metadato de inserción y no fabrica un Boolean para una celda ausente; la limpieza explícita del control de celda directa enmascara un control heredado, mientras que las lecturas de captura preservan la ausencia dispersa y la generación del libro
XLSReadPortableImageDimensions valida un IHDR PNG acotado o un frame JPEG secuencial/progresivo de ocho bits admitido y devuelve su ancho y alto declarados; la decodificación sigue siendo responsabilidad del renderizador
IXLSPortableSceneCaptureSource.ReadPortableSceneObjects usa coordenadas del libro basadas en uno y coordenadas de escena en puntos relativas al rango, valida el rango y los límites cooperativos, y devuelve los conteos consumidos de bytes, texto y elementos; HasPortableCellScene identifica las celdas cuyo escalar mostrado es reemplazado por su escena capturada
El CellCount del diseño nativo cuenta las celdas de la cuadrícula y el LineCount también incluye los objetos de escena de texto; el CellIndex de la línea de un objeto de texto es CellCount más su secuencia basada en cero entre los objetos de escena de texto, mientras que GetCellGeometry permanece restringido a las celdas de la cuadrícula
Las instantáneas escalares siguen serializándose como HXRSNP01; las instantáneas que contienen ejecuciones u objetos de escena se serializan como HXRSNP02, y el cargador acepta ambas versiones con el mismo contrato inmutable de propiedad y de reversión de posición de entrada
El presupuesto combinado de elementos cuenta las celdas almacenadas, las ejecuciones enriquecidas, los objetos de escena y los puntos de ruta; los límites de bytes cubren los arreglos preparados y desacoplados, el texto, las cargas de raster codificadas y la inspección acotada de metadatos nativos antes de la asignación
API de instantáneas portátiles
| Símbolo | Contrato |
|---|---|
EXLSPortableRender | Excepción lanzada ante datos de instantánea inválidos, apariencia de captura no admitida, backend nativo no disponible, límites de recursos o fallas de renderizado |
TXLSPortableFontStyle, TXLSPortableFontStyles | xpfsBold, xpfsItalic, xpfsUnderline y xpfsStrikeout, combinados como un conjunto |
TXLSPortableHorizontal, TXLSPortableVertical | xphLeft, xphCenter, xphRight y xpvTop, xpvCenter, xpvBottom |
TXLSPortableBorderStyle, TXLSPortableBorder | xpbsNone, xpbsSolid, xpbsDashed, xpbsDotted y xpbsDouble; cada borde lleva Style, WidthPoints y ColorRGB |
TXLSPortableCell | Row/Column basados en cero, RowSpan/ColumnSpan positivos, Text de visualización, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical y cuatro registros LeftBorder/TopBorder/RightBorder/BottomBorder |
TXLSPortableCells, TXLSPortableSizes | Arreglos dinámicos de celdas almacenadas y tamaños físicos de filas/columnas en puntos |
TXLSPortableRenderLimits | MaxGridCells, MaxStoredCells, MaxBytes y MaxTextCharacters acotan la construcción, la captura y la serialización |
XLSDefaultPortableRenderLimits | Devuelve 2000000 celdas de cuadrícula, 2000000 celdas almacenadas, 67108864 bytes y 16777216 caracteres de texto UTF-16 |
XLSDefaultPortableCell | Inicializa un span de una celda con Calibri a 11 puntos y apariencia predeterminada en cero; defina su posición y la apariencia deseada antes de la construcción |
CreateXLSPortableRenderSnapshot | Valida y copia la generación, las alturas de filas, los anchos de columnas y las celdas almacenadas a una interfaz inmutable desacoplada; las celdas deben ser únicas, estar en orden por filas, dentro de los límites y tener spans sin superposición |
IXLSPortableRenderSnapshot | Generation, RowCount, ColumnCount, CellCount de solo lectura, RowHeightPoints, ColumnWidthPoints basados en cero y registros Cells copiados |
| Métodos getter de la instantánea | GetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth y GetCell exponen los mismos valores; el acceso indexado inválido lanza una excepción |
SaveXLSPortableRenderSnapshot | Valida y serializa una instantánea a un búfer privado acotado, y luego copia la carga completa HXRSNP01 o HXRSNP02 al stream aportado en su posición actual |
LoadXLSPortableRenderSnapshot | Lee la instantánea versionada little-endian con texto UTF-8 estricto, valida conteos, geometría, estilos y spans, y rechaza los datos finales; una falla restaura la posición del stream de entrada |
Todos los límites deben ser positivos; el máximo validado es 2000000 celdas de cuadrícula/almacenadas, 1073741824 bytes y 268435456 caracteres de texto, con dimensiones no mayores a 1048576 filas por 16384 columnas
MaxGridCells cuenta el rectángulo completo, incluidas las celdas en blanco sin almacenar; CellCount cuenta las celdas visibles almacenadas y los anclas combinados, y puede ser menor
Generation registra la generación de la fuente o un valor aportado por la aplicación; es un metadato, no un vínculo vivo a un libro ni una comprobación automática de frescura
Renderizado nativo y fuentes explícitas
XLSPortableCairoBackendAvailable reporta la disponibilidad del backend nativo compilado; la salida nativa exige Free Pascal en Linux o macOS, con las bibliotecas Cairo, FreeType, HarfBuzz y FriBidi disponibles para el proceso
Las compilaciones de macOS enlazan explícitamente las cuatro bibliotecas nativas; un prefijo privado de dependencias y una ruta explícita de cargador de procesos hijos pueden aportarlas sin cambiar la configuración compartida del compilador ni los perfiles de shell
Delphi XE5 de Windows, Win32 y Win64 pueden compilar las interfaces portátiles y usar la serialización de instantáneas, pero la preparación del diseño Cairo nativo reporta allí la indisponibilidad del backend
Pase una cadena explícita de fuentes a PrepareXLSPortableCairoLayout; el renderizador prueba primero la familia y el estilo negrita/cursiva coincidentes, luego los fallbacks del mismo estilo en el orden aportado, exigiendo cobertura de glifos para cada clúster de texto admitido
Aporte los archivos reales regular, negrita, cursiva y negrita-cursiva que su contenido capturado requiera; no hay descubrimiento de fuentes del sistema ni sustitución sintética de negrita/cursiva, y los archivos, mapeos de estilo o coberturas de glifos faltantes provocan rechazo
Los bytes de las fuentes se capturan antes de la conformación, de modo que cambiar un archivo afecta a los diseños posteriores mientras que un diseño existente retiene sus bytes capturados; FaceIndex selecciona la cara no negativa en un archivo o colección de fuentes
Las operaciones nativas se serializan por la seguridad de las caras de FreeType; las instantáneas inmutables y la inspección de diseños preparados no exigen un libro vivo
Fonts[0].FamilyName := 'Calibri'; Fonts[0].FileName := '/srv/fonts/Regular.ttf'; Fonts[0].FaceIndex := 0; Fonts[0].Bold := False; Fonts[0].Italic := False;
Aquí Calibri es un alias de familia explícito para el archivo elegido, lo que permite un mapeo de fuentes controlado por la aplicación; inspeccione las métricas de la salida al mapear a una fuente diferente
El renderizador admite saltos de línea duros, expansión de tabuladores de cuatro espacios, ordenamiento bidireccional de párrafos, ligaduras y marcas combinables conformadas, ajuste de línea voraz y contracción para ajustar; el ajuste de línea tiene precedencia sobre la contracción
El ajuste de línea preserva los límites de clúster implementados de marcas combinables, selectores de variación, ZWJ y virama, y favorece los espacios y los espacios ideográficos; no es una implementación completa de grafemas UAX #29 ni del algoritmo de salto de línea de Unicode, y los límites de ajuste de indicadores regionales y Hangul-Jamo no están garantizados
Los tamaños de fuente se resuelven a 1/64 de punto y el texto se recorta a los límites de la celda; el PDF incrusta fuentes explícitas con mapeos lógicos de texto, el SVG usa rutas vectoriales de glifos, y el PNG dibuja los mismos glifos posicionados al DPI solicitado
Preparar e inspeccionar un diseño
| Símbolo | Contrato |
|---|---|
TXLSPortableFontFile, TXLSPortableFontFiles | Un mapeo explícito contiene FamilyName, FileName, FaceIndex, Bold y Italic; el arreglo dinámico está ordenado y contiene entre 1 y 64 mapeos |
TXLSPortableCairoFormat, TXLSPortableOutputFiles | xpcfPDF, xpcfSVG o xpcfPNG, y un arreglo de nombres de archivos de salida devuelto por el guardado a archivos |
TXLSPortableCairoOptions | Ancho/alto de página, cuatro márgenes, relleno de celdas y DPI de raster, más límites de página, glifos, líneas, diseño, salida, fuentes, conformación y dibujo |
XLSDefaultPortableCairoOptions | Inicializa cada opción con valores predeterminados acotados; úselo antes de sobrescribir campos individuales |
PrepareXLSPortableCairoLayout | Valida y copia una instantánea, captura los bytes explícitos de fuentes, y devuelve un TXLSPortableCairoLayout preparado de su propiedad; libérelo con Free |
TXLSPortableCairoLayout | Expone PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save y Destroy |
TXLSPortableTextLineInfo | Un registro de línea copiado tiene CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints y el Text lógico |
TXLSPortableCellGeometry | Un rectángulo copiado tiene XPoints, YPoints, WidthPoints y HeightPoints en el diseño completo |
GetTextLine(Index), GetCellGeometry(Index) | Inspección indexada basada en cero de las líneas preparadas y las celdas almacenadas; los índices inválidos provocan rechazo |
La paginación recorta mosaicos fijos del área imprimible en orden primero a lo ancho y luego hacia abajo; una celda o fragmento de texto que cruce límites de página aparece en cada página que intersecta, sin ajuste automático de celdas completas, repetición de títulos de impresión de la hoja ni interpretación de la configuración de página del libro
Opciones y límites del renderizador
| Campos | Valores predeterminados y significado |
|---|---|
PageWidthPoints, PageHeightPoints | 595 por 842 puntos |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | 36 puntos cada uno; los márgenes deben dejar un rectángulo imprimible positivo |
CellPaddingPoints, RasterDPI | 2 puntos y 96 DPI; el DPI afecta las dimensiones del PNG |
MaxPages, MaxGlyphs, MaxLines | 256 páginas, 2000000 glifos conformados y 200000 líneas de texto |
MaxLayoutBytes | 268435456 bytes para el trabajo de diseño acotado y las comprobaciones de superficie de raster |
MaxOutputBytes | 268435456 bytes por búfer de salida renderizada, cubriendo el PDF completo o una página SVG/PNG en lugar de la suma de archivos de páginas separados |
MaxFontBytes | 134217728 bytes a través de los archivos de entrada de fuentes explícitas para un diseño |
MaxShapedCharacters, MaxDrawOperations | 16000000 cada uno, acotando el trabajo de conformación y el trabajo de dibujo página por celda |
La geometría inválida o no finita y los presupuestos de trabajo no positivos provocan rechazo; las dimensiones de página están limitadas a 100000 puntos y el DPI de raster a 1200, con comprobaciones adicionales de bytes, conteos y área de raster antes del renderizado
El pool nativo de bytes de fuentes de todo el proceso permite además como máximo 256 búferes distintos y 256 MiB; los bytes exactamente idénticos pueden compartir almacenamiento, y la capacidad se libera únicamente cuando la cara de fuente de propiedad de Cairo libera su búfer
Libere cada diseño al terminar; la biblioteca no restablece las cachés compartidas de Cairo, y un diseño lógicamente completado puede dejar bytes de fuentes residentes mientras el Cairo nativo aún posee una cara
Escribir la salida y manejar fallas
SaveToStream(Stream, Format, PageIndex = 0) escribe todas las páginas para PDF, exigiendo PageIndex = 0; SVG y PNG escriben la página seleccionada basada en cero
La serialización de instantáneas y el renderizado nativo se completan en búferes privados acotados antes de copiar al stream de destino; las fallas de validación o de renderizado lo preservan, pero una falla de escritura del stream del llamador puede dejar bytes parciales y sigue el comportamiento de falla de ese stream
Save(FileName, Format) escribe un archivo PDF o un archivo SVG/PNG por página y devuelve sus rutas; los nombres de archivo multipágina insertan los sufijos -0001, -0002 y siguientes antes de la extensión
Los destinos existentes de archivo o directorio provocan rechazo; cada guardado prepara todas las páginas, publica destinos nuevos exclusivos y elimina sus propias salidas preparadas/publicadas en caso de falla
El sistema de archivos debe soportar las operaciones nativas de preparación exclusiva y publicación de enlaces; los guardados separados de PDF, SVG y PNG son operaciones separadas, y no forman una transacción combinada
Consumidor independiente de Linux
Tests/Portable/RenderPortableSnapshot.pas es un consumidor completo que carga una instantánea, prepara un diseño y guarda los tres formatos; compílelo en Linux con las unidades portátiles y las bibliotecas nativas instaladas
fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas ./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96
fonts.tsv es texto UTF-8 con cuatro campos separados por tabuladores por mapeo: alias de familia, ruta absoluta de la fuente en Linux, índice de cara y uno de 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
Use archivos de fuentes reales instalados o aportados por la aplicación, y elija una base de salida nueva porque los archivos de destino existentes se rechazan; incluya fallbacks adicionales del mismo estilo para los scripts no cubiertos por el primer mapeo
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;
Grabación de gráficos en caché
XLSRecordCachedChartScene en lxPagination graba las primitivas basadas en puntos del renderizador de diseño de gráficos existente en una representación de escena portable inmutable; su fuente debe ser un TXLSXChart desacoplado sin hoja propietaria y sin XML nativo preservado, de modo que la grabación no puede resolver referencias de hojas ni actualizar cachés del libro
El subconjunto actual admite gráficos de columnas, barras, líneas, dispersión, circular, anillo y de área ordinarios de una sola serie con un grupo de trazado primario, cachés de valores numéricos finitos e índices de caché acotados estrictamente crecientes; los cachés de categorías de dispersión contienen coordenadas X numéricas, mientras que las demás familias usan etiquetas de categorías almacenadas
Los cachés de valores de columnas, barras, líneas y áreas deben tener índices contiguos basados en cero; los huecos de valores de categorías dispersos provocan rechazo, y la grabación nunca expande índices faltantes a un arreglo grande
Los trazados de barras conservan la geometría horizontal y las etiquetas categóricas; los trazados circulares y de anillo usan leyendas de categorías, respetan FirstSliceAng y HoleSize, y omiten los ejes numéricos, mientras que los trazados de área ordinarios de una sola serie conservan un polígono relleno alrededor de la línea base cero
Las series de líneas y de dispersión admiten visibilidad de línea independiente, color RGB explícito y ancho de punto mediante LineVisible, LineColorRGB y LineWidthPoints; LineStyleSet, LineColorSet y LineWidthSet distinguen la configuración explícita de los valores predeterminados heredados, y EffectiveLineVisible resuelve la convención existente de series de solo relleno
Los marcadores admiten el círculo automático, un círculo explícito o ningún marcador; un MarkerSize explícito de 2 a 72 define su diámetro en puntos, y MarkerFillSet y MarkerBorderSet distinguen un valor RGB negro explícito de cero de la selección automática de color; los segmentos de conexión se pintan antes que los marcadores de datos opacos
Los bordes de marcadores explícitos sin ancho almacenado usan la línea ordinaria de 0.75 puntos, mientras que las muestras de leyendas limitan el diámetro de círculos a 6 puntos; las fuentes de títulos solicitadas se escriben en la ejecución real de texto enriquecido además de en sus propiedades de texto predeterminadas, conservando su tamaño, color y énfasis visibles cuando Excel exporta el gráfico
Las familias de gráficos no admitidas, los trazados de área apilados o de varias series, los trazados circulares de varias series, los estilos de galería, las esquinas redondeadas, los grupos de trazado secundarios o combinados, los ejes de fechas, los formatos numéricos personalizados, los ejes logarítmicos, el comportamiento de cruce personalizado, el texto rotado, las líneas de tendencia, las barras de error, las categorías jerárquicas, las etiquetas de datos, otras formas de marcadores y las cachés de valores faltantes lanzan EXLSPortableRender antes del renderizado
Las fuentes de marcas de ejes de valores personalizadas, las cuadrículas menores, las unidades mayores/menores explícitas, los colores explícitos de series inválidos y las posiciones de ejes no admitidas provocan rechazo; las leyendas de barras actualmente exigen la ubicación ordinaria a la derecha, y los trazados circulares exigen un total en caché finito distinto de cero y una geometría acotada con una reserva conservadora temprana del almacenamiento temporal de arcos
El arreglo devuelto conserva el orden primitivo de dibujo, los colores explícitos, las fuentes, la alineación de texto, la opacidad y los límites de recorte del gráfico; la contabilidad de elementos, bytes y texto incluye las reservas conservadoras de almacenamiento temporal del renderizador, y las comprobaciones cooperativas de caché preceden a la asignación de arreglos temporales
XLSValidateCachedChartSceneModel realiza la misma verificación previa acotada de caché y apariencia sobre un modelo sin resolver celdas de la hoja; el puente de captura XLSX usa esta comprobación antes de clonar y graba los modelos de gráficos escritos por el autor admitidos con referencias A1 locales unidimensionales, desplazamientos físicos de anclas nativos, recorte de rangos y orden de dibujo
El grabador neutral a plataforma vive en lxPortableChart; los puntos de entrada existentes de lxPagination comparten los mismos cuerpos de diseño y grabación de primitivas, conservando el comportamiento del renderizador de Windows y coincidiendo los bytes inmutables de escena y la contabilidad de presupuestos para cada familia admitida
La captura nativa de libros en Linux y macOS usa la sobrecarga de geometría explícita descrita abajo; el relleno RGB de series importadas, el fondo del área de trazado, el fondo del gráfico y el borde del gráfico se recuperan de sus propias propiedades de formas resueltas por espacio de nombres, de modo que un color de serie anidado no puede sobreescribir el fondo del trazado
El ChartML preservado importado se acepta únicamente cuando su stream de elementos, atributos y texto significativo expandido por espacios de nombres coincide con la reconstrucción con tipo admitida; los alias de espacios de nombres y el orden de atributos se normalizan, mientras que las extensiones nativas no modeladas, los atributos ajenos y la apariencia no admitida provocan rechazo conservador
Los presupuestos temporales de XML crudo y de reconstrucción se comprueban antes del trabajo de clonación y proyección; únicamente la copia desacoplada limpia su XML preservado validado, y la fuente conserva los metadatos nativos, el almacenamiento de celdas, el contenido del caché y la generación
La captura recorre el orden de dibujo OfficeArt subyacente, incluidos los marcos de gráficos ausentes del envoltorio público Shapes, y rechaza un marco no admitido que intersecte en lugar de omitirlo silenciosamente
Gráficos Classic en caché con apariencia declarada
La captura Classic BIFF8 admite las siete familias ordinarias de gráficos anteriores cuando sus registros núcleo, valores locales almacenados, escalas lineales explícitas y apariencia son representables; lee los registros retenidos y las cachés de fórmulas disponibles sin evaluar fórmulas, expandir almacenamiento disperso ni clonar árboles de fórmulas compiladas
Use TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) para crear una vista de solo lectura separada con un conjunto congelado de valores TXLSClassicChartAppearanceDeclaration aportados por IXLSClassicChartAppearanceSource; Geometry es opcional en Windows y aporta mediciones nativas explícitas de fuentes en Linux o macOS
TXLSClassicChartAppearanceDeclarations es el arreglo dinámico de declaraciones primitivas que una aplicación puede usar para implementar esa fuente
Pase esa vista configurada a CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); las coordenadas están basadas en uno y el adaptador restaura la hoja activa del llamador cuando la captura termina o rechaza
Los puntos de entrada ordinarios de captura siguen rechazando las fuentes efectivas de diseño o leyendas Classic sin resolver; el punto de entrada de vista distinto usa las declaraciones y el proveedor de geometría ya congelados
| Miembro de declaración | Contrato |
|---|---|
Generation, SheetIndex, ObjectId | La generación fijada del libro, el índice de hoja basado en uno y la identidad real del objeto de gráfico almacenado; las generaciones obsoletas, las identidades faltantes o repetidas y las identidades pertenecientes a otro objeto provocan rechazo |
HasChartSize, ChartWidthPoints, ChartHeightPoints | Un tamaño explícito finito positivo del marco del gráfico en puntos; retiene el origen del ancla almacenado y el orden de dibujo, mientras que un indicador false conserva las dimensiones derivadas del ancla |
HasPlotInnerRectangle, PlotInnerRectangle | Un rectángulo interior de trazado explícito que excluye etiquetas y títulos de ejes; es obligatorio para esta ruta de apariencia declarada |
HasTitleRectangle, TitleRectangle | Un rectángulo de título explícito cuando el gráfico tiene título; el texto de la fuente, la familia de fuentes, el énfasis y el color aún provienen de los registros núcleo validados |
HasLegendRectangle, LegendRectangle | Los límites declarados de la leyenda cuando hay una leyenda presente |
HasLegendFontSize, LegendFontSizePoints | El tamaño efectivo en puntos explícito del llamador para una leyenda presente; la familia de fuentes del núcleo, el énfasis y el color se conservan |
TXLSPortableChartRectangle | Left, Top, Width y Height son puntos finitos relativos al marco del gráfico capturado; los rectángulos activos exigen dimensiones positivas dentro de ese marco |
Count, GetCount, ReadDeclaration | La fuente reporta un conteo acotado y devuelve un registro primitivo por cada índice basado en cero mientras la vista está configurada; las declaraciones se copian antes de la captura posterior |
Estos valores son apariencia declarada por el llamador, no un diseño automático de Excel ni un escalado de fuentes inferido; obténgalos de una fuente verificada independientemente o de un diseño definido por la aplicación y revise la salida con el mapeo explícito de fuentes nativas usado para el renderizado
Las dimensiones explícitas del marco y los límites interiores de trazado deben dejar espacio suficiente para las fuentes validadas de etiquetas de ejes; el espacio insuficiente para etiquetas provoca rechazo en lugar de recortar texto o aplicar un factor de escala ajustado
Las aplicaciones mantienen vivo al propietario del libro hasta que la vista se libere; la vista prestada mantiene una concesión de lectura y retiene la fuente de declaraciones, mientras que la instantánea inmutable resultante no retiene ni el libro ni el proveedor
La proyección del núcleo admitida incluye rellenos sólidos literales, líneas sólidas visibles, marcadores circulares, texto de títulos y leyendas, colocación de categorías y marcas numéricas explícitas acotadas; las escalas automáticas, la apariencia automática de marcadores sin resolver, el suavizado, las extensiones enriquecidas desconocidas, las referencias de series ajenas o no lineales y los estilos de puntos no representados provocan rechazo antes de la salida
Declarar geometría o un tamaño de leyenda no autoriza a ignorar las extensiones desconocidas del gráfico ni los estilos no validados; los límites de bytes, texto, celdas almacenadas y escena siguen siendo efectivos para los datos de fuente retenidos, las declaraciones, los cachés desacoplados y el espacio temporal de grabación
Las sobrecargas adicionales de XLSValidateCachedChartSceneModel y XLSRecordCachedChartScene aceptan un TXLSCachedChartSceneAppearance para un modelo desacoplado; inicialícelo con XLSDefaultCachedChartSceneAppearance antes de definir los controles explícitos
El XLSReadClassicChartScene de nivel más bajo en lxClassicChartScene devuelve un TXLSXChart desacoplado de propiedad del llamador y contadores primitivos de apariencia y presupuesto a partir de un TXLSCustomChart retenido, su calculadora de fuente exacta y un TXLSClassicChartSceneSource bajo concesión; libere el modelo devuelto después de grabar
TXLSClassicChartSceneSource.ReadAppearance aporta una declaración primitiva, ReadCell lee valores locales almacenados fijados acotados, ReadFont llena el estilo de texto aportado con datos efectivos acotados de la fuente del núcleo, y PaletteColor resuelve las entradas explícitas almacenadas de la paleta; las implementaciones de la aplicación deben preservar la fuente fijada y respetar cada cuota de bytes y caracteres aportada
| Miembro de apariencia de escena | Significado |
|---|---|
SeriesMarkerSizePoints | Diámetros en puntos acotados por serie, incluidos los valores fraccionarios; cero conserva el tamaño de marcador del modelo y una sobrescritura distinta de cero debe estar entre 2 y 72 puntos |
OverrideBorder, BorderColorRGB, BorderWidthPoints | Apariencia explícita del contorno del marco del gráfico |
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPoints | Pinturas y anchos en puntos explícitos de ejes, marcas y cuadrículas mayores |
AreaFillOpacity, SeriesFillAlpha | Opacidad del área y alfa del relleno de series |
UseAxisTickControls, CategoryBetween | Controles explícitos de ejes validados y colocación categórica |
TitleOffsetXPoints, TitleOffsetYPoints | Desplazamientos finitos aplicados a la posición ordinaria del título del grabador |
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangle | Rectángulos literales en puntos relativos al marco del gráfico |
PieRadiusRatio | Radio del trazado circular como fracción acotada de la dimensión menor del trazado |
Las primitivas de gráficos siguen la política de diseño existente de HotXLS; la apariencia de galería de gráficos que exige los valores predeterminados no modelados de Excel sigue siendo un límite explícito no admitido
Captura nativa directa de libros
CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) devuelve un IXLSRenderGeometry respaldado por los mismos archivos explícitos de fuentes, FreeType, HarfBuzz y conformación de texto usados para la salida nativa; los anchos de columnas usan el ancho máximo medido real de dígitos con la calibración del libro
El proveedor es dueño de los bytes desacoplados de fuentes y de una caché de métricas acotada, comprueba los presupuestos de fuentes y de diseño antes de la asignación, y valida las solicitudes de medición antes de cambiar el estado en caché; una caché llena puede devolver mediciones sin caché sin expandirse más allá de su capacidad
La captura verifica que la generación del proveedor y todos los campos de calibración coincidan con la vista actual de solo lectura del libro, retiene al proveedor para esa vista, y deja sin cambios la fábrica de geometría predeterminada del libro; la geometría nativa predeterminada ordinaria sigue siendo un límite explícito de GDI
Capture la generación a través de una vista liberada explícitamente antes de crear el proveedor; retener un resultado temporal de interfaz puede retener su concesión de lectura hasta que el ámbito circundante termine
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);
Los consumidores nativos compilan con LX_PORTABLE_CORE y las dependencias nativas correspondientes; las llamadas de Windows a la fábrica nativa de geometría Cairo provocan rechazo explícito, mientras que la captura de Windows puede usar su fábrica de geometría existente a través de las mismas sobrecargas con alcance
La captura nativa real admite el escalar modelado, el texto enriquecido, el raster admitido, las formas ordinarias y las siete familias de gráficos en caché descritas arriba; la captura de gráficos preserva el ChartML original importado, los puntos en caché, el almacenamiento disperso de celdas, el almacenamiento empaquetado y la generación del libro
Para áreas de impresión inmutables, márgenes, ajuste o escala porcentual, títulos repetidos, saltos manuales y paginación de celdas completas o combinadas, consulte los planes de impresión portátiles
Puente avanzado de captura
IXLSRenderCaptureSource en lxSemanticSnapshot es la interfaz interna de coordinación implementada por las vistas de solo lectura admitidas del libro; las aplicaciones ordinarias deberían llamar a las sobrecargas de captura basadas en propietario
TXLSClassicReadOnlyWorkbookView y TXLSXReadOnlyWorkbookView implementan IXLSRenderCaptureSource, incluidos los ocho métodos de renderizado siguientes; estas clases coordinan la captura a través de vistas de solo lectura, y el adaptador administra su ciclo de vida mientras las aplicaciones retienen su interfaz de propietario del libro y llaman a CaptureXLSPortableRenderSnapshot
Su método existente TryReadCell aporta una instantánea de celda almacenada a través de la vista de solo lectura; los métodos de renderizado agregan apariencia y geometría desacopladas para la captura portátil
| Miembro o ayuda | Propósito |
|---|---|
ValidateRenderRange | Comprueba los límites del rectángulo basado en uno y las huellas de apariencia no admitida antes de la captura |
ReadRenderStyle | Devuelve metadatos TXLSSemanticCellStyle desacoplados y un indicador de presencia de texto enriquecido para una celda basada en uno |
IXLSRenderRichTextCaptureSource, ReadRenderRichText | Extensión opcional de la vista que devuelve TXLSRenderTextRuns desacoplados acotados; cada TXLSRenderTextRun contiene Text y un Style semántico efectivo, usando el estilo base aportado y cuotas positivas de ejecuciones/bytes sin materializar celdas ni modificar pools de estilos |
RenderRowHeightPoints, RenderColumnWidthPoints | Devuelven la geometría física, contrayendo a cero las dimensiones ocultas |
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometry | Extensión opcional de la vista que retiene un proveedor explícito únicamente después de validar la generación y la calibración; los proveedores inválidos dejan sin cambios el proveedor retenido de la vista |
ReadRenderMerge | Reporta el rectángulo completo de combinación inclusivo basado en uno que contiene una celda |
ResolveRenderColor | Resuelve la apariencia semántica tema/indexado/RGB a un color RGB portátil, usando el predeterminado aportado donde esté admitido |
RenderDate1904, RenderRightToLeft | Exponen el contexto del sistema de fechas del libro y el orden de lectura de la hoja |
XLSRenderCaptureLiteral | Reconoce el subconjunto admitido de literales Boolean, números finitos o texto simple entre comillas para la captura sin evaluación |
XLSRenderCaptureIntersects | Prueba rangos A1 locales separados por espacios contra un rectángulo basado en uno, rechazando la sintaxis de rangos sin resolver |
XLSRenderCaptureCondition | Evalúa el subconjunto admitido de condiciones contra un escalar existente; los códigos de operadores de comparación 1 a 8 significan entre, no entre, igual, distinto, mayor, menor, mayor-o-igual y menor-o-igual |
XLSRenderCaptureApplyDxf | Aplica la apariencia diferencial desacoplada admitida usando una máscara AppliedSlots para retener el formato de mayor prioridad |
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearance | Los métodos de coordinación de importación con prefijo interno registran e inspeccionan la apariencia que el modelo diferencial con tipo no puede renderizar de forma segura; Assign retiene el marcador, y la captura rechaza un estilo marcado que coincida |
Estos ayudantes del puente pueden lanzar EXLSSemanticSnapshot; el adaptador público de captura traduce esa excepción a EXLSPortableRender