Notas de la versión de PDFiumVCL
Historial de versiones de las funciones visibles para el usuario, correcciones, mejoras del visor, generación de documentos, salida PDF/A, renderizado y actualizaciones de documentación de PDFiumVCL.
Version 1.39.52
Cambiado (Changed)
- Se mejoró
Demo\Lazarus\CreatePDFpara que el ejemplo introductorio genere ahora un PDF de dos páginas con vector paths, table content, embedded image, text annotation, rotated text y un document-building walkthrough más claro. - Se añadieron páginas
README.htmlmás pulidas para todas las carpetas de demos de Delphi, C++Builder y Lazarus, reemplazando el último README de demo solo en texto por una guía legible en el navegador. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.52.
Version 1.39.51
- Se mejoraron los resúmenes por lotes de
Demo\Delphi\PreflightReportClicon totales de estado estándar para resultados Pass, Action required y Review en los estándares seleccionados. - Las filas por fichero ahora incluyen recuentos de action-required y review en los resúmenes TXT / HTML / JSON / CSV, lo que facilita revisar artefactos de CI sin abrir cada informe generado.
- Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.51.
Version 1.39.50
- Se mejoró el modo de lote por directorio de
Demo\Delphi\PreflightReportCli:batchdir=folderahora recopila las rutas PDF descubiertas, las ordena y luego genera informes en un orden estable. - Los escaneos recursivos de directorios ahora producen un orden de informes y filas de resumen reproducible, mientras que el procesamiento explícito de
batch=list.txtsigue conservando el orden del fichero de lista. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.50.
Version 1.39.49
- Se mejoraron los resúmenes por lotes de
Demo\Delphi\PreflightReportClipara registrar run settings: tipo de origen, ruta de origen, estado recursivo, directorio de salida, formato del informe, estándares seleccionados y modofailon=. - Los resúmenes JSON ahora incluyen un objeto
run, los resúmenes TXT y HTML muestran una sección de run settings, y las filas CSV repiten las mismas columnas de auditoría para hojas de cálculo y CI pipelines. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador a 1.39.49.
Version 1.39.48
- Se mejoró batch output naming de
Demo\Delphi\PreflightReportClipara que duplicate input file names que comparten unoutdir=no sobrescriban sus generated reports entre sí. - Batch runs ahora agregan sufijos
-2,-3y posteriores cuando un generated report path ya fue asignado en la misma ejecución, y summaries registran el collision-safe report path final. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.48.
Version 1.39.47
- Se mejoraron los batch summaries de
Demo\Delphi\PreflightReportClipara que las salidas TXT y JSON incluyan ahora aggregate totals de total files, processed files, failed files, issues y coincidenciasfailon=. - CSV summaries permanecen como una row table pura para consumers existentes, mientras HTML summaries siguen mostrando las mismas aggregate metrics en el dashboard header.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.47.
Version 1.39.46
- Se mejoró
Demo\Delphi\PreflightReportCliconsummary=batch.html/.htmpara que batch runs puedan emitir un browser-readable dashboard junto a los TXT / CSV / JSON manifests. - HTML summaries muestran metricas de total, processed, failed, issue y coincidencia
failon=, y luego listan cada input con report links, status, counts y error text. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.46.
Version 1.39.45
- Se mejoró
Demo\Delphi\PreflightReportCliconbatchdir=folderyrecursivepara que los scripts puedan escanear PDF folders directamente sin escribir primero un list file. - Directory batch mode reutiliza el comportamiento de
outdir=,summary=,standards=yfailon=de list-based batch mode; non-recursive escanea solo la folder seleccionada yrecursiveincluye subfolders. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.45.
Version 1.39.44
- Se mejoró
Demo\Delphi\PreflightReportCliconsummary=batch.csv|json|txtpara que batch runs puedan emitir un machine-readable manifest junto a los per-file reports. - Batch summaries incluyen cada input path, report path, status, standard count, passed count, issue count, estado de coincidencia
failon=y error text para CI jobs y scripts externos. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.44.
Version 1.39.43
- Se mejoró
Demo\Delphi\PreflightReportCliconbatch=list.txtyoutdir=reportspara que los scripts generen preflight reports para una lista de ficheros PDF en una sola ejecución. - Batch mode omite líneas vacías y líneas de comentario
#, deriva cada report name.preflight.<ext>desde el PDF de entrada, continúa tras errores por fichero y resume processed y failed files antes de volver. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.43.
Version 1.39.42
- Se mejoró
Demo\Delphi\PreflightReportCliconfailon=none|issues|action|reviewpara que CI jobs puedan convertir preflight results generados en exit codes deterministas. - La CLI ahora devuelve exit code 2 cuando una regla
failon=seleccionada coincide después de generar el report file y el optional attached-report PDF, mientras que runtime errors siguen devolviendo exit code 1. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.42.
Version 1.39.41
- Se mejoró
Demo\Delphi\PreflightReportCliconattach=output.pdfpara que un preflight report generado pueda incrustarse como document-level attachment en una nueva PDF copy. - La CLI conserva en disco el TXT / HTML / Markdown / JSON / CSV report file generado y rechaza adjuntarlo de vuelta al input PDF path original, reduciendo el riesgo de sobrescritura accidental.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.41.
Version 1.39.40
- Se agregó
Demo\Delphi\PreflightReportCli, un Delphi console companion para generarFPdfPreflightReportde forma scriptable sin abrir un viewer. - La CLI admite creación de sample sin argumentos, además de input / output arguments, optional password, formatos de salida
text/html/md/json/csv, ystandards=filtering para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.40.
Version 1.39.39
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.ToMarkdownySaveMarkdownToFilepara exportar preflight reports como Markdown adecuado para issue tracker. - Se actualizaron los ejemplos
PreflightReportde Delphi, C++Builder y Lazarus con Markdown preview switching y acciones Save MD junto al workflow TXT / HTML / JSON / CSV existente. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.39.
Version 1.39.38
- Se mejoraron los ejemplos
SecurityAuditde Delphi, C++Builder y Lazarus con exportación de informes de auditoría JSON junto al flujo existente TXT save / copy. - El informe JSON contiene
format,generatedAt,summary,findingCounty filas estructuradasfindingscon campos severity, area y detail. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.38.
Version 1.39.37
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.ToCsvySaveCsvToFilepara que preflight reports puedan exportarse como spreadsheet-friendly CSV. - Se actualizaron los samples Delphi, C++Builder y Lazarus
PreflightReportcon CSV preview switching y Save CSV actions junto al workflow existente TXT / HTML / JSON. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.37.
Version 1.39.36
- Se mejoró
FPdfPreflightReportconTPdfPreflightReport.IssueCategoryCountsy los tipos reutilizablesTPdfPreflightIssueCategoryCountyTPdfPreflightIssueCategoryCountspara agrupar marker-level issues por category. - Se actualizaron
TPdfPreflightReport.ToText,ToHtmlyToJsonpara que la salida generada de PreflightReport incluya issue-category count summaries junto con per-standard rows y detailed issue recommendations. - Se actualizó
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.36.
Version 1.39.35
- Se renombró el sample ampliado
PrintDialogaPrintPreferencesen Delphi, C++Builder y Lazarus, de modo que el demo name ahora coincide con su workflow de PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border y duplex mapping. - Se actualizó
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.35.
Version 1.39.34
- Se mejoró
Demo\Delphi\PrintPDFcon carga de PDF mediante arrastrar y soltar, y se documentó el workflow existente deDemo\CBuilder\PrintPDFjunto con los ejemplos PrintPDF de Delphi y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.34.
Version 1.39.33
- Se agregó
Demo\CBuilder\SplitView, completando SplitView sample matrix en Delphi, C++Builder y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.33.
Version 1.39.32
- Se agregó
Demo\Lazarus\SplitView, llevando side-by-side PDF comparison a Lazarus con two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets y rotation. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.32.
Version 1.39.31
- Se agregó
Demo\Lazarus\PrintPDF, llevando el standard PDF print workflow a Lazarus con preview navigation, page ranges, copies, collate mode, progress y cancellation. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.31.
Version 1.39.30
- Se agregó
Demo\Lazarus\FontProperties, completando la matriz del ejemplo FontProperties en Delphi, C++Builder y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.30.
Version 1.39.29
- Se agregó
Demo\CBuilder\FontProperties, llevando la inspección de metadatos indexados de caracteres y fuentes a C++Builder junto al ejemplo de Delphi. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.29.
Version 1.39.28
- Se agregó
Demo\Delphi\ExtractTextPages, completando la matriz del ejemplo de extracción de texto por página en Delphi, C++Builder y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.28.
Version 1.39.27
- Se agregó
Demo\Lazarus\PrintDialog, completando el PrintDialog sample matrix en Delphi, C++Builder y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.27.
Version 1.39.26
- Se agregó
Demo\CBuilder\PrintDialog, llevando el N-up printing y PDF author print preferences workflow a C++Builder junto con el sample Delphi. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.26.
Version 1.39.25
- Se agregó
Demo\CBuilder\ViewerInteractionLab, completando el ViewerInteractionLab sample matrix en Delphi, C++Builder y Lazarus. - Se actualizaron library build workflow y Win64 C++Builder package outputs para que los
TPdfViewviewer interaction methods enlacen correctamente en Win64 demos. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.25.
Version 1.39.24
- Se agregó
Demo\Lazarus\ViewerInteractionLab, llevando el focused viewer interaction workflow a Lazarus junto con el sample Delphi. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.24.
Version 1.39.23
- Se agregó
Demo\Lazarus\SearchAndSelect, completando el SearchAndSelect sample matrix en Delphi, C++Builder y Lazarus. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.23.
Version 1.39.22
- Se agregaron
Demo\CBuilder\ContentExtractionLabyDemo\Lazarus\ContentExtractionLab, llevando el multi-category content extraction workflow a todos los demo IDE compatibles. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.22.
Version 1.39.21
- Se mejoraron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportcon un preview format selector para revisar text o JSON output antes de guardar informes. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.21.
Version 1.39.20
- Se agregó exportación JSON a
FPdfPreflightReportmedianteTPdfPreflightReport.ToJsonySaveJsonToFile, con summary legible por máquina, per-standard status / priority, next action y issue detail. - Se actualizaron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportcon acciones Save JSON junto a la exportación TXT / HTML. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.20.
Version 1.39.19
- Se mejoró
FPdfPreflightReportconTPdfPreflightStatus, issue categories, per-standard priority y next-action guidance en los informes TXT / HTML. - Se actualizaron
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportyDemo\CBuilder\PreflightReportpara mostrar status, priority, issue count y next action en la summary grid. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.19.
Version 1.39.18
- Se añadió
Demo\Lazarus\SecurityAudit, completando la matriz de ejemplos Delphi, C++Builder y Lazarus para el workflow de auditoría PDF risk-surface de solo lectura. - El ejemplo de Lazarus enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability y unsupported-feature callbacks, y luego guarda o copia la finding list como TXT report.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.18.
Version 1.39.17
- Se añadió
Demo\CBuilder\SecurityAudit, llevando el workflow de auditoría PDF risk-surface de solo lectura a C++Builder junto al ejemplo Delphi existente. - El ejemplo de C++Builder enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability y unsupported-feature callbacks, y luego guarda o copia la finding list como TXT report.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.17.
Version 1.39.16
- Se añadió
Demo\CBuilder\SearchAndSelect, llevando el workflow independiente SearchAndSelect viewer a C++Builder junto al ejemplo Delphi existente. - El ejemplo de C++Builder crea o abre PDFs, lista matches de todas las páginas con page / character-index previews, admite Previous / Next y double-click navigation, y resalta los matches de la página actual con
HighlightSearchText. - También expone
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangey opciones spreadDisplayMode; los metadatos de versión ahora informan 1.39.16.
Version 1.39.15
- Se agregó
Demo\CBuilder\WatermarkStamp, completando la demo matrix de Delphi, Lazarus y C++Builder para workflows reutilizables de Form XObject watermark y stamp. - El ejemplo de C++Builder crea PDF de target y stamp, reutiliza la stamp page mediante
CreateXObjectFromPage, aplica transforms conTPdfMatrix, y guarda centered watermarks, corner stamps y page number labels. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.15.
Version 1.39.14
- Se agregó
Demo\Lazarus\WatermarkStamp, llevando el workflow reutilizable de Form XObject watermark y stamp a Lazarus. - El ejemplo de Lazarus crea PDF de target y stamp, reutiliza la stamp page mediante
CreateXObjectFromPage, aplica transforms conTPdfMatrix, y guarda centered watermarks, corner stamps y page number labels. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.14.
Version 1.39.13
- Se agregó
Demo\CBuilder\PreflightReport, completando la matriz de demos Delphi, Lazarus y C++Builder para el workflow reutilizable deFPdfPreflightReport. - El ejemplo de C++Builder usa
FPdfPreflightReport.hpppara generar standard summaries, TXT report previews, TXT / HTML report files y el comportamiento Open Last Report. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.13.
Version 1.39.12
- Se agregó
Demo\Lazarus\PreflightReport, llevando a Lazarus el workflow de preflight report para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT. - El ejemplo de Lazarus puede abrir o crear un PDF, seleccionar target standards, previsualizar summary rows y TXT report output, guardar TXT / HTML reports y abrir el report guardado más recientemente.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.12.
Version 1.39.11
- Se mejoró
Demo\Delphi\SearchAndSelectcon una lista de resultados de búsqueda en todas las páginas que registra page number, character index y preview text. - Se agregó Previous / Next match navigation y double-click result jumping, conservando el comportamiento de
HighlightSearchTexten la página actual. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.11.
Version 1.39.10
- Se mejoró
Demo\Delphi\SecurityAuditcon acciones Save Report y Copy Report que exportan el summary actual y las finding rows como TXT audit report. - El demo ahora limpia el report export state cuando se reinicia el audit panel, manteniendo los reports copiados o guardados alineados con los findings visibles.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.10.
Version 1.39.9
- Se mejoró
Demo\Delphi\ContentExtractionLabcon source-PDF save, report copy-to-clipboard y acciones all / none category selection. - El demo ahora invalida el report actual cuando cambia category selection, para que las TXT / JSON exports reflejen el extraction scope visible.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.9.
Version 1.39.8
- Se agregó
Demo\Delphi\ContentExtractionLab, un workflow sample unificado de content extraction para document metadata, page text, page objects, images, attachments, links, annotations, bookmarks y font / character metrics. - El ejemplo puede abrir un PDF existente o crear un synthetic PDF con contenido de text, image, attachment y annotation, y luego generar summary rows y reportes TXT / JSON detallados.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.8.
Version 1.39.7
- Se añadió
Lib\FPdfPreflightReport.pas, un helper reutilizable de informes que envuelveValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRyValidatePdfVTen un objetoTPdfPreflightReport. - Se añadió
Demo\Delphi\PreflightReport, un ejemplo de workflow que abre o crea un PDF, selecciona standards de destino, previsualiza summary rows e issue recommendations, y guarda informes TXT o HTML. - Los informes generados describen explícitamente el límite de marker-level validation integrado para que las aplicaciones puedan combinarlo con content-level preflight tools dedicadas cuando sea necesario.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata, package project lists e installer version metadata para informar 1.39.7.
Version 1.39.6
- Se añadió
Demo\Delphi\SearchAndSelect, una muestra viewer workflow enfocada en search highlighting, text selection, selected-text preview, copy, clear y spread display modes. - La muestra demuestra
HighlightSearchText, opciones de búsqueda match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardyClearSelectionsin añadir nueva API de biblioteca. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.6.
Version 1.39.5
- Se amplió
Demo\Delphi\ViewerInteractionLabcomo una muestra de viewer UX de estilo SearchAndSelect conHighlightSearchText, opciones match-case / whole-word, vista previa del texto seleccionado y los controles existentes de selección / portapapeles. - Se amplió
Demo\Delphi\PrintDialogpara inspeccionar PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingy el duplex mapping visible deSetPdfPrintPaperHandlingDevMode. - Se añadió
Demo\Delphi\SecurityAudit, una muestra de risk-surface de solo lectura que enumera permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state y V8 / XFA helper availability. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.5.
Version 1.39.4
- Se agregaron
Demo\CBuilder\ImageToPDFyDemo\Lazarus\ImageToPDF, completando la matriz de ejemplos ImageToPDF en Delphi, C++Builder y Lazarus. - Los nuevos ejemplos demuestran selección de múltiples imágenes, vista previa de la imagen seleccionada, una página PDF por imagen, tamaño de página A4 portrait / landscape, escalado centrado de imagen, progreso por imagen y apertura del PDF generado tras guardar.
- Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.4.
Version 1.39.3
- Se agregó
Demo\CBuilder\BatchExport, llevando el flujo de exportación multifichero de PDF a JPG a C++Builder junto con las muestras Delphi y Lazarus existentes. - La muestra demuestra
LoadCustomDocument,IPdfCancellationTokenSource, entradaTFileStreamen streaming, progreso por fichero y por página, manejo de cancelación, entradas de DPI / quality / password y apertura de la carpeta de salida al finalizar. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.3.
Version 1.39.2
- Se agregó
Demo\Delphi\WatermarkStamp, un ejemplo ejecutable de flujo Form XObject que crea un PDF de destino y un stamp PDF reutilizable, y después aplica marcas de agua centradas, sellos en la esquina superior derecha y etiquetas de número de página en todas las páginas. - El ejemplo demuestra
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixyFPDFPageObj_SetMatrixsin agregar nueva API de biblioteca. - Se actualizó
Docs\en-us\Examples.htmlpara usar el patrón actualTPdfMatrix.Handleal pasar matrices aFPDFPageObj_SetMatrix. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.2.
Version 1.39.1
- Se corrigió la compatibilidad de build por lotes de demos C++Builder en
PDFVieweryMultiPageViewer, reemplazandonullptrporNULLpara el project mode actual. - Se agregó
Demo\Delphi\ViewerInteractionLab, un ejemplo enfocado deTPdfViewpara display modes, fit modes, page colors, rotation, user text selection, clipboard actions y retroalimentación de coordenadasDeviceToPage. - Se agregó
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabpara que los usuarios de Lazarus puedan ejecutar el flujo de validación y marker-output de PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R y PDF/VT. - Se listaron las unidades standards en
Lib\37.0\PDFiumVcl.dprojandLib\FPC\PDFiumLaz.lpky se corrigió la compilación del demo DelphiSplitViewquitando una importación duplicada deWinapi.ShellAPI. - Se corrigieron bloqueos de compilación por lotes de demos Delphi en
BatchExport,PDFViewer,MultiPageViewerySplitViewsin cambiar su comportamiento en tiempo de ejecución. - Se actualizaron
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.1.
Version 1.39.0
- Se agregó
Demo\Delphi\StandardsLab, un ejemplo ejecutable de flujo de trabajo de estándares que carga o crea un PDF, ejecutaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRyValidatePdfVT, y muestra conformance detectada, estado de aprobación y recuentos de issue en una sola cuadrícula. - Los botones de guardado de StandardsLab llaman a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRySaveAsPdfVT, haciendo visible la salida de marker de estándares PDF sin escribir un arnés personalizado. - Se actualizaron
TPdf.AboutInfo, los metadatos del paquete Lazarus y los metadatos de versión del instalador para informar 1.39.0.
Version 1.38.0
- Las superposiciones de búsqueda y selección de texto de
TPdfViewahora usan alpha blending real en lugar de pintura con mask lógica, preservando el contenido de la página bajo los resaltados. - Se añadió
SetPdfPrintPaperHandlingDevModepara mapearTPrintPaperHandlinga los valores WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALyDMDUP_VERTICAL. TPdfView.SmoothScrollahora anima los comandos line/page de la scrollbar en timer-driven segments; el thumb tracking sigue siendo inmediato.- Actualizados
TPdf.AboutInfoy los metadatos de versión del instalador a 1.38.0.
Version 1.37.0
TPdfahora tiene un bloqueo de render por instancia que serializaRenderPage,RenderTile,RenderPageProgressive, recarga de página y descarga de documento. El render desde worker con un componente compartido ya es viable; la aplicación sigue coordinando mutaciones y ciclo de vida.- Corregido el envoltorio zero-copy de bitmap para rechazar DIB
TBitmapbottom-up y usar un buffer propio de PDFium con copia final, eliminando fallos de stride / access violation en las pruebas VCL de render. - Ajustado el comportamiento de selección de
TPdfView:AllowUserTextSelectionsolo bloquea entrada de usuario, las APIs de selección por código siguen pintando, ySelectAllsigue el spread visible real para que la portada no seleccione la página 2. Pruebas Delphi, Lazarus y C++Builder ampliadas. - Actualizados
TPdf.AboutInfoy los metadatos de versión del instalador a 1.37.0.
Version 1.36.0
- Activada la selección de texto de usuario final en
TPdfView:AllowUserTextSelection, reservado en v1.17.0, ahora impulsa el flujo completo de drag-select, doble clic por palabra, triple clic por línea,Ctrl+A,Ctrl+CyShift+arrows. - Añadidos
SelectionColor,OnSelectionChangey APIs de selección por código:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. - Los modos spread seleccionan entre páginas visibles, el menú contextual Copy se adjunta automáticamente cuando el host no define
PopupMenu, y la selección se limpia al cambiar documento, página, Active o DisplayMode. - Pruebas Delphi, Lazarus y C++Builder ampliadas para propiedades de selección, ruta de ratón, atajos de teclado, popup por defecto, clipboard round-trip y selección spread.
Version 1.35.0
- Añadido soporte para inyección de marcadores PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT convierte el documento actual en un fichero conforme con PDF/VT-1 o PDF/VT-2 (el subconjunto de PDF para impresión de datos variables y transaccional). PDF/VT se construye sobre PDF/X-4 (§6.2.1), por lo que el inyector escribe el conjunto completo de marcadores PDF/X-4 (XMP pdfxid, Info GTS_PDFXVersion + Trapped, OutputIntent con ICC) junto con las propiedades específicas de PDF/VT.
- Las propiedades PDF/VT específicas incluyen XMP
pdfvtid:GTS_PDFVTVersionypdfvtid:GTS_PDFVTModDate(sincronizado conxmp:ModifyDatesegún §6.3 NOTA 1) y la descripción pdfaExtension:schemas para ambos namespaces NPES pdfxid y pdfvtid. - Añadido TPdf.SaveAsPdfVTToStream para salida PDF/VT en memoria y atajo
TPdf.SaveAsPdfVT(FileName)que produce PDF/VT-1 con OutputIntent sRGB incorporado por defecto. - Añadido TPdf.ValidatePdfVT: verifica los marcadores PDF/VT (incluyendo equivalencia
pdfvtid:GTS_PDFVTModDate/xmp:ModifyDatey presencia de/DPartRoot) y devuelve TPdfVTValidationResult. - Añadida propiedad TPdf.PdfVTConformance: devuelve el nivel sin llamar ValidatePdfVT explícitamente.
- Nuevos tipos exportados en la nueva unidad FPdfPdfvt: TPdfVTConformance, TPdfVTTrappedState, TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions.
- La jerarquía Document Part (DPartRoot / DPart, §6.5) es estructura de nivel aplicación y NO se sintetiza automáticamente. Los requisitos de nivel contenido PDF/X-4 (incrustación de fuentes, transparencia, gestión ICC, prohibiciones OPI / JavaScript / Reference XObject) siguen siendo responsabilidad del autor.
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.34.0
- Añadido soporte para inyección de marcadores PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR convierte el documento actual en un fichero conforme con PDF/R-1 (el subconjunto raster de PDF para documentos escaneados). La inyección cubre los requisitos de nivel formato — el comentario único
%PDF-raster-1.0entre el trailer dictionary y startxref (§5), catalog reducido al white list de §6.3 (solo Version/ViewerPreferences/PageLayout/PageMode/AcroForm/Metadata), Document Information Dictionary reducido al white list de §6.4.3 (solo Creator/Producer/CreationDate/ModDate), un flujo XMP con las cuatro entradas de §6.4.4 Table 1, y un arreglo/IDen el trailer. - Añadido TPdf.SaveAsPdfRToStream para salida PDF/R en memoria y atajo
TPdf.SaveAsPdfR(FileName). - Añadido TPdf.ValidatePdfR: verifica los marcadores de conformidad y devuelve TPdfRValidationResult.
- Añadida propiedad TPdf.PdfRConformance: devuelve el nivel sin llamar ValidatePdfR explícitamente.
- Nuevos tipos exportados en la nueva unidad FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions. El default hace strip de las entradas Title/Author/Subject/Keywords del Info y de las entradas no permitidas en el catalog.
- Los requisitos de nivel contenido (estructura Contents por página, MediaBox
[0 0 w h], filtros restringidos, sin object streams, diseño de strips) siguen siendo responsabilidad del PDF de origen. PDF/R es estructuralmente más estricto que los otros PDF/x; combinar con un validador del TWAIN Working Group para verificación completa. - Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.33.0
- Añadido soporte para inyección de marcadores PDF/X (familia ISO 15930): TPdf.SaveAsPdfX convierte el documento actual en un fichero conforme con PDF/X-1a:2001, PDF/X-3:2002 o PDF/X-4 mediante posprocesamiento del PDF base con una actualización incremental. La inyección cubre los requisitos de nivel formato de fichero — flujo XMP con
pdfxid:GTS_PDFXVersiony descripción pdfaExtension:schemas, Document Information Dictionary reescrito con/GTS_PDFXVersion//GTS_PDFXConformance//Trapped, catalog actualizado con/OutputIntentsapuntando a un OutputIntent/S /GTS_PDFXcon perfil ICC incrustado, y arreglo/IDdel trailer. - Añadido TPdf.SaveAsPdfXToStream para salida PDF/X en memoria, y atajo
TPdf.SaveAsPdfX(FileName)que produce PDF/X-4 con OutputIntent sRGB IEC61966-2.1 incorporado por defecto. - Añadido TPdf.ValidatePdfX: verifica los marcadores de conformidad y devuelve TPdfXValidationResult con el nivel detectado y los problemas encontrados.
- Añadida propiedad TPdf.PdfXConformance: devuelve el nivel sin llamar a ValidatePdfX explícitamente.
- Nuevos tipos exportados en la nueva unidad FPdfPdfx: TPdfXConformance, TPdfXTrappedState, TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions. El default apunta a PDF/X-4 con sRGB; usuarios pueden suministrar un perfil ICC CMYK (FOGRA39, GRACoL2006...) vía
IccProfileData. - Los requisitos de nivel contenido (todas las fuentes incrustadas, sin JavaScript, sin annotations visibles, prohibición OPI, reglas de transparencia para PDF/X-1a / PDF/X-3) siguen siendo responsabilidad del autor. Combinar con callas pdfaPilot o Ghent PDF Workgroup Output Suite para verificación completa.
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.32.0
- Añadido soporte para inyección de marcadores PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE convierte el documento actual en un fichero conforme con PDF/E-1 mediante posprocesamiento del PDF base con una actualización incremental. La inyección cubre los requisitos de nivel formato de fichero aplicables por posprocesamiento — flujo de metadatos XMP con
pdfe:ISO_PDFEVersion = "PDF/E-1"y descripción pdfaExtension:schemas, Document Information Dictionary reescrito con la entrada obligatoria/ISO_PDFEVersion (PDF/E-1)de §5, equivalencia Info-XMP heredada de ISO 19005-1 §6.7 vía §13.1, y arreglo/IDdel trailer requerido por §6.2. - Añadido TPdf.SaveAsPdfEToStream para salida PDF/E en memoria y atajo
TPdf.SaveAsPdfE(FileName)para el caso común. - Añadido TPdf.ValidatePdfE: verifica los marcadores de conformidad PDF/E-1 y devuelve TPdfEValidationResult con el nivel detectado y problemas encontrados.
- Añadida propiedad TPdf.PdfEConformance: devuelve el nivel de conformidad sin llamar ValidatePdfE explícitamente.
- Nuevos tipos exportados en la nueva unidad FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions.
- La reescritura del Info dictionary es la primera de su tipo en el camino de posprocesamiento PDF/x de PDFiumVCL — reescribe el objeto Info existente con el mismo número (manteniendo la referencia /Info del trailer) y sintetiza uno nuevo cuando el trailer fuente no tiene /Info.
- Los requisitos de nivel contenido (incrustación de fuentes, CMap ToUnicode, XObject / ExtGState / formularios XFA prohibidos) siguen siendo responsabilidad del autor.
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.31.0
- Añadido soporte para inyección de marcadores PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa convierte el documento actual en un fichero conforme con PDF/UA-1 mediante posprocesamiento del PDF base con una actualización incremental. La inyección cubre los requisitos de nivel formato de fichero aplicables por posprocesamiento — flujo de metadatos XMP con
pdfuaid:part = 1y la correspondiente descripción pdfaExtension:schemas,dc:titleobligatorio, catalog/MarkInfo << /Marked true /Suspects false >>y/ViewerPreferences << /DisplayDocTitle true >>(solo si la fuente no los tiene), catalog/Lang(cuando el llamador suministra una etiqueta BCP 47) y arreglo/IDen el trailer. - Añadido TPdf.SaveAsPdfUaToStream para salida PDF/UA en memoria, y un atajo de opciones por defecto
TPdf.SaveAsPdfUa(FileName)para el caso común. - Añadido TPdf.ValidatePdfUa: comprueba en un PDF abierto los marcadores de conformidad PDF/UA-1 (existencia de StructTreeRoot, /Lang, /MarkInfo /Marked true con /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identificador XMP pdfuaid:part, presencia de dc:title, /ID del trailer, estado de cifrado) y devuelve un resultado estructurado con el nivel de conformidad detectado y el conjunto de problemas encontrados.
- Añadida propiedad TPdf.PdfUaConformance: devuelve el nivel de conformidad del documento abierto (puc1, pucNone o pucUnknown) sin necesidad de llamar a ValidatePdfUa explícitamente.
- Nuevos tipos exportados en la nueva unidad FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions.
- Los campos vacíos de TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) se rellenan automáticamente desde FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage.
- Los requisitos de nivel contenido (completitud del etiquetado StructTreeRoot, texto Alt de Figure, CMaps ToUnicode, incrustación de fuentes, etc.) siguen siendo responsabilidad del autor del documento — SaveAsPdfUa solo agrega marcadores de formato. ValidatePdfUa reporta la ausencia de StructTreeRoot como
pvuaiMissingStructTreeRoot. - Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.30.0
- La salida PDF/A-1b ahora cumple los requisitos de equivalencia entre Document Information Dictionary y XMP de ISO 19005-1 (con Cor.1:2007): cada entrada del Info dictionary que PDFium escribe en el PDF base se refleja en el paquete XMP, incluyendo Title (dc:title), Author (dc:creator), Subject (dc:description según Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) y ModDate (xmp:ModifyDate). También se emite xmp:MetadataDate.
- El trailer de un documento PDF/A ahora siempre contiene el arreglo /ID (requisito obligatorio de ISO 19005-1 6.1.3). Cuando TPdf.SaveAsPdfA procesa un documento cuyo origen ya tiene file identifier, se reutilizan los IDs de 16 bytes permanent y changing; en caso contrario, se deriva un ID de 16 bytes determinista a partir de los bytes de origen.
- El XMP inyectado ahora incrusta la descripción de extension schema pdfaid exigida por ISO 19005-1 6.7.8 (reemplazado por Cor.1): pdfaid es una extension schema relativa a XMP Specification 2004, por lo que todos los ficheros conformes deben declarar sus property names, value types y categories en el contenedor pdfaExtension:schemas.
- TPdfASaveOptions añade cinco campos opcionales nuevos: Producer, CreationDate, ModDate (cadenas de fecha PDF en formato “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId e InstanceId (cadenas de 16 bytes para el arreglo /ID del trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream rellenan automáticamente los campos vacíos mediante FPDF_GetMetaText y FPDF_GetFileIdentifier, por lo que el código existente sigue funcionando sin cambios.
- TPdf.ValidatePdfA / TPdf.PdfAConformance ahora informan tres incidencias adicionales: pvaiMissingTrailerId (sin /ID en el trailer), pvaiMissingXmpDates (faltan xmp:CreateDate o xmp:ModifyDate) y pvaiMissingExtensionSchema (sin descripción de la extension schema pdfaid).
- Los caracteres no ASCII de Title, Author, Subject, Keywords, Creator y Producer se codifican ahora como UTF-8 en el paquete XMP (XMP Specification requiere UTF-8), preservando los metadatos multilingües al pasar por SaveAsPdfA.
- Cadena TPdf.AboutInfo actualizada para reportar la versión actual del producto.
Version 1.29.0
- Se actualizaron las DLLs de PDFium incluidas (Win32 y Win64, en compilaciones estándar y con V8) a la instantánea upstream del 2026-05-22, incorporando correcciones a las rutas de bloqueo de FPDFText_SetText / FPDFText_SetCharcodes y diversos endurecimientos internos del proyecto PDFium.
- Se expuso el nuevo indicador de guardado FPDF_SUBSET_NEW_FONTS de PDFium en FPdfPageOps.pas, permitiendo a quienes llaman a FPDF_SaveAsCopy solicitar la subdivisión automática de los ficheros de fuentes incrustadas para los nuevos objetos de texto. Las constantes existentes FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL y FPDF_REMOVE_SECURITY ahora se definen con la forma de desplazamiento de bits upstream (el valor numérico heredado 3 se conserva como FPDF_REMOVE_SECURITY_DEPRECATED para compatibilidad binaria).
- Se añadió la enumeración FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) y el campo correspondiente m_FontLibraryType en FPDF_LIBRARY_CONFIG dentro de FPdfView.pas, de modo que las aplicaciones que inicialicen PDFium con el renderizador Skia puedan elegir el backend de fuentes al inicio.
- Se actualizó la firma de TFPDFPage_InsertObject para igualar el upstream: la función C ahora devuelve FPDF_BOOL (TRUE en caso de éxito, FALSE si page_object es NULL o la transferencia de propiedad falla) en lugar de void. Las llamadas existentes de PDFiumVCL siguen compilando sin cambios, ya que Delphi / FPC permiten ignorar el valor de retorno de una función.
- Se corrigió la cadena TPdf.AboutInfo para que informe la versión actual del producto (permaneció obsoleta en v1.27.0 desde la versión 1.28.0, que solo incluía cambios de documentación).
Version 1.28.0
- Se amplió sustancialmente la documentación integrada en toda la referencia de la API: cada entrada de propiedad, método, evento y función global ahora incluye una Description de tres párrafos, una lista de Remarks, un Example multilínea en Delphi y un bloque See Also más completo — cubriendo 200+ páginas previamente escasas, incluyendo todos los contadores de TPdf, los accesores de metadatos, los accesores de fuente y carácter, las propiedades a nivel de página, los registros indexados, los métodos a nivel de documento y toda la superficie de estado / visualización / eventos de TPdfView.
- Se ajustó la maquetación de la ayuda para alinearse con la base visual losLab utilizada en la referencia de HotXLS: se unificaron los tamaños de h1/h2, se consolidaron los estilos de la cuadrícula de navegación de la API en el StyleSheet compartido y se eliminaron las sobreescrituras CSS en línea por página en Navigation.html.
- La documentación ahora se distribuye con un script auxiliar (Docs\Build-Expand-Entries.ps1) que regenera el enriquecimiento de las páginas de entrada desde una única tabla de datos, facilitando el mantenimiento repetible.
Version 1.27.0
- Se añadió soporte para creación de PDF/A-1b: TPdf.SaveAsPdfA guarda cualquier documento abierto como un fichero conforme a PDF/A-1b mediante un post-procesado del PDF base con una actualización incremental que inyecta un flujo de metadatos XMP, un OutputIntent ICC sRGB y un catálogo de documento actualizado — todo sin requerir APIs adicionales en la DLL. Funciona en cualquier plataforma soportada por PDFiumVCL.
- Se añadió TPdf.SaveAsPdfAToStream para salida PDF/A en memoria.
- Se añadió TPdf.ValidatePdfA: comprueba si un PDF abierto cumple PDF/A (marcadores XMP pdfaid, OutputIntent con perfil ICC embebido, cifrado) y devuelve un resultado estructurado con el nivel de conformidad detectado y un conjunto de issues específicos encontrados.
- Se añadió la propiedad TPdf.PdfAConformance: devuelve el nivel de conformidad del documento abierto actualmente (pac1b, pac1a, pac2b, pac3b, pacNone o pacUnknown) sin necesidad de llamar a ValidatePdfA explícitamente.
- Nuevos tipos exportados: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (en la nueva unidad FPdfPdfa.pas).
- SaveAsPdfA admite un perfil ICC personalizado a través de TPdfASaveOptions.IccProfileData; si se deja vacío, se utiliza automáticamente el perfil integrado sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes).
- Se sustituyó la referencia HTML monolítica por un sistema de ayuda web reestructurado: 302 páginas individuales de entrada de la API (una por cada propiedad, método, evento y función global) que cubren TPdf y TPdfView, cada una con una descripción completa, una tabla de parámetros, un ejemplo de código Delphi y enlaces See Also.
- Se añadió Navigation.html: un índice integral de navegación de la API en una sola página, organizado en seis secciones (propiedades/métodos/eventos de TPdf, propiedades/métodos/eventos de TPdfView, funciones globales) con una cuadrícula flexible de 5 columnas para una búsqueda rápida.
- Se reconstruyeron TPdf.html y TPdfView.html como páginas compactas de visión general de componentes que conservan las secciones de referencia de tipos (Types, Constants, Global Variables) y enlazan a las páginas individuales de cada miembro.
- Se añadió búsqueda de texto completo basada en Search.js con coincidencia incremental en el cliente sobre las 312 páginas indexadas.
- Se actualizaron todas las barras de navegación del sitio para apuntar a Navigation.html.
Version 1.26.0
- Se añadió Demo/Lazarus/BatchExport, la versión LCL de la demo Delphi BatchExport de v1.14.0. Mismo conjunto de funcionalidades: exportación PDF -> JPG de múltiples ficheros con progreso global por fichero, progreso actual por página, entradas de DPI / calidad / contraseña y un lote cancelable cooperativamente respaldado por IPdfCancellationToken. La carpeta de salida se abre en el explorador de ficheros de la plataforma cuando la extracción finaliza con éxito.
Version 1.25.0
- Se añadió la reutilización de páginas mediante Form XObject a TPdf, habilitando flujos de marca de agua, superposición de plantillas y “estampar una página sobre muchas”: CreateXObjectFromPage genera un handle reutilizable a partir de cualquier página de otro documento; InsertFormObjectFromXObject inserta UNA copia de la página envuelta en la página actual. Devuelve el FPDF_PAGEOBJECT insertado para que el llamador pueda posicionarlo / escalarlo / rotarlo con FPDFPageObj_SetMatrix y los helpers TPdfMatrix de v1.9.0.
- La nueva clase Pascal TPdfXObject envuelve el handle FPDF_XOBJECT de PDFium y lo cierra automáticamente en su destructor, eliminando la ceremonia manual de FPDF_CloseXObject.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 147 casos cada una, y la suite de C++Builder a 123 casos, cubriendo los contratos de creación de handles e inserción de objetos de página.
Version 1.24.0
- Se añadió TPdf.RenderPageProgressive — una variante cancelable de RenderPage que conduce el bucle de renderizado progresivo de PDFium y sondea un IPdfCancellationToken de v1.7.0 entre iteraciones, de modo que los renderizados largos en alta DPI pueden abortarse a mitad de página en lugar de bloquear al llamador hasta la finalización.
- Devuelve un valor TPdfProgressiveStatus: prsDone, prsCancelled o prsFailed. Pase AToken = nil para renderizar hasta el final sin pausarse nunca (sin posibilidad de prsCancelled).
- Utiliza la misma vía rápida zero-copy introducida en v1.21.0 — PDFium renderiza directamente en el DIB del TBitmap de destino. El mismo fallback heredado se aplica cuando el DIB no puede ser envuelto.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 145 casos cada una, y la suite de C++Builder a 121 casos, cubriendo nil-token (se completa), token pre-cancelado (prsCancelled) y equivalencia de píxeles con RenderPage síncrono sobre un token vivo.
Version 1.23.0
- Se añadieron seis nuevos métodos a TPdfView que exponen a las aplicaciones la selección de texto en widgets de formulario y Undo/Redo de PDFium: GetSelectedFormText devuelve el texto actualmente seleccionado dentro del widget de formulario enfocado; SelectAllFormText selecciona todos los caracteres; FormUndo / FormRedo / FormCanUndo / FormCanRedo controlan el historial de edición del widget enfocado. Las APIs subyacentes de PDFium ya estaban enlazadas, pero no tenían un punto de entrada de alto nivel. Los seis hacen un corto-circuito seguro cuando el visor está inactivo o el documento no tiene un widget AcroForm enfocado.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 142 casos cada una, y la suite de C++Builder a 119 casos, cubriendo el contrato “sin formulario, sin foco” para cada nuevo método.
Version 1.22.0
- Se añadieron wrappers de composición de páginas a TPdf: ImportPagesByIndex toma un array de índices base cero para copiar páginas específicas desde un documento de origen; ImportNPagesToOne devuelve un TPdf nuevo cuyas páginas son composiciones N-up de este documento; MovePages reordena páginas in situ. Las APIs subyacentes de PDFium ya estaban enlazadas, pero no tenían un punto de entrada amigable para Pascal.
- ImportPagesByIndex acepta un array vacío para importar todas las páginas de origen (equivalente a pasar nil a nivel de C ABI).
- Se ampliaron las suites de regresión de Delphi y Lazarus a 136 casos cada una, y la suite de C++Builder a 115 casos, cubriendo importación de subconjuntos, importación de documento completo, reordenamiento de páginas y composición N-up.
Version 1.21.0
- Se mejoró el rendimiento del renderizado cambiando TPdf.RenderPage / TPdf.RenderTile (y los helpers correspondientes de TPdfView) a una vía de salida zero-copy. PDFium ahora escribe directamente en el buffer DIB del TBitmap de destino en lugar de en un buffer interno que luego se copiaba fila por fila, ahorrando una copia de memoria de ancho x alto x 4 bytes por renderizado. La mejora es más notable a alta DPI (paneles de miniaturas, exportación con calidad de impresión, exportación por lotes).
- La vía heredada por línea de escaneo se conserva como fallback de seguridad para el caso improbable en el que el DIB de destino no pueda ser envuelto (dimensiones extremas, stride inusual, OOM). El comportamiento es idéntico byte a byte entre ambas vías; solo es más lento en el fallback.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 132 casos cada una, y la suite de C++Builder a 112 casos, cubriendo la promoción de pf32bit en el bitmap del llamador, round-trip de dimensiones y una prueba de cordura de stride en bitmap grande.
Version 1.20.0
- Se añadió resaltado de resultados de búsqueda a TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) escanea la página actual del visor y devuelve el número de coincidencias encontradas, pintando una máscara HighlightColor sobre cada coincidencia en cada redibujado. ClearHighlight elimina los resaltados; cambiar el visor a otra página los borra automáticamente, ya que las coincidencias son específicas de cada página.
- HighlightColor toma por defecto clYellow y está publicado para que las aplicaciones puedan tematizar el resaltado para que coincida con su paleta de UI.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 129 casos cada una, y la suite de C++Builder a 109 casos, cubriendo color por defecto, round-trip de color, “coincidencias reales de palabras del fixture” contra la cadena de sample.pdf y el contrato “palabra inexistente devuelve cero coincidencias”.
Version 1.19.0
- Se añadió la propiedad FitMode a TPdfView con cuatro valores: pfmNone (zoom manual), pfmActualSize (100%), pfmFitPage (la página entera cabe en el viewport) y pfmFitWidth (el ancho de la página coincide con el ancho del viewport). El modo de ajuste activo se re-aplica automáticamente al Resize y cuando cambia la página actual, de modo que los documentos largos con tamaños de página mixtos siguen perfectamente encuadrados.
- Establecer Zoom directamente cancela el modo de ajuste activo (FitMode vuelve a pfmNone), siguiendo la convención estándar de los visores PDF donde escribir un valor de zoom abandona Fit Page / Fit Width.
- El valor por defecto es pfmNone, de modo que las aplicaciones existentes conservan su comportamiento de zoom explícito.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 124 casos cada una, y la suite de C++Builder a 106 casos, cubriendo valor por defecto, round-trip de modo, fit-page produciendo un zoom real sobre un documento cargado y la cancelación del modo de ajuste por zoom manual.
Version 1.18.0
- Se añadió la propiedad PageColor a TPdfView, desacoplando el fondo de la página PDF renderizada del Color del control circundante. El valor por defecto es clWhite, de modo que las páginas PDF ahora se renderizan en blanco papel independientemente del tema de la aplicación anfitriona. Los visores en modo oscuro pueden mantener el área de desplazamiento oscura mientras dejan la página PDF real en blanco (o en el color que elija la aplicación).
- Cambio de comportamiento: las aplicaciones que solían establecer TPdfView.Color para recolorear la página PDF deben usar PageColor en su lugar. La experiencia por defecto mejora para el caso común (páginas blancas sobre fondos de control con tema) sin cambios en el código.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 120 casos cada una, y la suite de C++Builder a 103 casos, cubriendo valor por defecto y round-trip de color.
Version 1.17.0
- Se añadieron interruptores de bloqueo de entrada de usuario a TPdfView para que las aplicaciones que integran el visor en kioscos, paneles de previsualización o contextos de solo lectura puedan desactivar gestos de navegación sin necesidad de subclasificar: AllowUserPageChange controla los nuevos atajos de teclado PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling controla los nuevos saltos de página con rueda arriba/abajo; AllowUserTextSelection está reservado para la futura vía de selección de texto por arrastre de ratón. Las tres tienen valor por defecto True para que las aplicaciones existentes se actualicen sin cambio de comportamiento.
- La navegación de página por rueda del ratón omite Ctrl+wheel para que las aplicaciones puedan mantener Ctrl+wheel reservado para el zoom.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 118 casos cada una, y la suite de C++Builder a 101 casos, cubriendo valores por defecto y round-trip de los interruptores.
Version 1.16.2
- Se amplió la cobertura de regresión de TPdfView para clics en enlaces de anotaciones cuando la página del visor difiere de la página del TPdf asociado, usando una vía real de clic de ratón sin interfaz en Delphi, Lazarus y C++Builder.
- Las suites de Delphi y Lazarus ahora ejecutan 114 casos cada una, y C++Builder ahora ejecuta 99 casos.
Version 1.16.1
- Se corrigió el manejo de clics en enlaces de TPdfView para que las acciones automáticas de anotación y enlaces web usen la página actualmente mostrada por el visor, incluso cuando el componente TPdf asociado está parado en otra página.
- Se reforzó TPdfThumbnailView contra referencias colgantes a Pdf cuando se destruye el componente TPdf vinculado.
- Se añadió cobertura de regresión sobre el tiempo de vida de la referencia a la miniatura; las suites de Delphi y Lazarus ahora ejecutan 113 casos cada una, y C++Builder ahora ejecuta 98 casos.
- Se sincronizaron el README, la documentación de pruebas, el contenido de búsqueda/índice de la HTML Help y las salidas generadas del paquete C++ con las actualizaciones de integración de v1.7.0 a v1.16.0.
Version 1.16.0
- Se añadió una nueva demo PrintDialog en Delphi (Demo/Delphi/PrintDialog) centrada en impresión N-up (1 / 2 / 4 / 9 páginas por hoja) con filtrado de páginas pares / impares, renderizado en escala de grises y bordes de celda opcionales de 1 píxel. Es un compañero pequeño y deliberado de la demo PrintPDF existente, que ya cubre previsualización, ficheros recientes, zoom y escalado.
Version 1.15.0
- Se añadió un nuevo componente TPdfThumbnailView (unidad FPdfThumbnail) que renderiza una miniatura de página por fila en un panel lateral desplazable con resaltado al pasar el ratón y al seleccionar, además de navegación por clic. Diseñado para colocarse junto a un TPdfView para que los usuarios finales puedan navegar un documento largo por página.
- El componente está registrado en la pestaña de la paleta losLab junto con TPdf y TPdfView; propiedades clave: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor y el evento OnPageClick.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 112 casos cada una, y la suite de C++Builder a 97 casos, cubriendo valores por defecto, round-trip del tamaño de miniatura, clamping de valores extremos, round-trip de color y asignación de manejadores de eventos.
Version 1.14.0
- Se añadió una nueva demo BatchExport en Delphi (Demo/Delphi/BatchExport) que muestra cómo convertir muchos ficheros PDF a JPG en una sola pasada usando TPdf.LoadCustomDocument para carga en streaming, IPdfCancellationToken para cancelación cooperativa, y barras de progreso global por fichero + actual por página. La demo usa una instancia de TPdf por fichero (PDFium en sí no es thread-safe) y abre la carpeta de salida en el Explorador cuando la extracción finaliza con éxito.
Version 1.13.0
- Se añadió un overlay de UI para renderizado asíncrono a TPdfView mediante tres nuevas propiedades: AsyncRendering, LoadingText y LoadingColor. Cuando AsyncRendering es True, la vía de pintado de una sola página dibuja un pequeño indicador “Loading...” sobre la página renderizada para que las aplicaciones que usan su propio worker para renderizados largos compartan una representación visual coherente.
- Los valores por defecto preservan el comportamiento existente: AsyncRendering es False, de modo que las aplicaciones que no opten no verán ningún cambio visual.
- La documentación aclara que PDFium en sí no es thread-safe — trasladar realmente el renderizado a un worker requiere que el llamador mantenga un TPdf por worker; la próxima demo de exportación por lotes muestra ese patrón.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 106 casos cada una, y la suite de C++Builder a 93 casos, cubriendo valores por defecto y el round-trip de las tres propiedades.
Version 1.12.0
- Se añadió manejo de enlaces por clic a TPdfView. La nueva propiedad LinkOptions controla el comportamiento automático para los cuatro tipos de acciones de enlace PDF: goto (salto de página), URI (ShellExecute), launch (ShellExecute) y GotoR embebido (reservado). Los valores por defecto habilitan loAutoGoto y loAutoOpenURI; loAutoLaunch y loAutoEmbeddedGoto permanecen desactivados para que un clic accidental no pueda ejecutar un programa arbitrario.
- Se añadieron los eventos OnAnnotationLinkClick y OnWebLinkClick que se disparan antes de cualquier acción automática y permiten a las aplicaciones inspeccionar el enlace, marcarlo como Handled o redirigirlo (por ejemplo, a un aviso de seguridad).
- La detección de clic en enlace solo se ejecuta cuando el gesto es un clic en lugar de un arrastre, usando un anclaje fresco de MouseDown, de modo que los gestos de paneo siguen fluyendo por la vía de desplazamiento existente sin cambios.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 102 casos cada una, y la suite de C++Builder a 91 casos, cubriendo LinkOptions por defecto, round-trip de conjunto y asignación de manejadores de eventos.
Version 1.11.0
- Se añadió pulido visual a TPdfView: las propiedades PageShadowSize, PageShadowColor y PageBorderColor pintan una sombra opcional bajo el rectángulo de la página y un borde de un píxel a su alrededor. Los valores por defecto preservan el aspecto plano previo (PageShadowSize = 0; el borde se dibuja en el clBlack por defecto pero se funde con el fondo blanco por defecto hasta que el llamador cambie los colores).
- Se añadió una propiedad SmoothScroll como flag opt-in para una futura animación de desplazamiento incremental; la propiedad hoy hace round-trip y está cableada para que las aplicaciones puedan persistir la preferencia, mientras que el lado del renderizado sigue usando el comportamiento de desplazamiento inmediato existente.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 98 casos cada una, y la suite de C++Builder a 89 casos, cubriendo valores por defecto, round-trip de propiedades y el clamp del tamaño de sombra negativo.
Version 1.10.0
- Se añadió inserción directa de imágenes mediante las nuevas sobrecargas TPdf.AddImage y TPdfView.AddImage que toman bien una ruta de fichero o un TBitmap, además del AddPicture existente basado en TPicture. AddImage(FileName) reconoce cualquier formato registrado con las unidades gráficas de VCL o LCL (BMP, PNG vía la unidad PngImage, JPG, etc.) y pasa por la misma tubería que AddPicture, por lo que el comportamiento es idéntico.
- AddImage(TBitmap) omite el intermediario TPicture, lo que simplifica los llamadores que ya disponen de un TBitmap procedente de renderizado o de trabajo de generación por lotes.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 92 casos cada una, y la suite de C++Builder a 84 casos, cubriendo inserción de bitmap, límites del objeto de página, rechazo de bitmap nil y carga de fichero BMP.
Version 1.9.0
- Se añadió soporte de matriz de transformación de alto nivel mediante la nueva clase TPdfMatrix en la unidad FPdfMatrix. TPdfMatrix envuelve el FS_MATRIX de PDFium con una API OO para Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew y Multiply, adecuada para componer transformaciones antes de pasarlas a FPDFPageObj_SetMatrix y APIs similares de PDFium.
- TPdfMatrix.Multiply hace correctamente un snapshot de los seis elementos de la matriz antes de calcular los nuevos valores de fila, corrigiendo un problema latente en el que las implementaciones alternativas en Pascal sobrescribían elementos anteriores durante la misma llamada y producían resultados incorrectos para cualquier composición más allá de la pura traslación.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 88 casos cada una, y la suite de C++Builder a 81 casos, cubriendo identidad, reset, translate / scale / flip, orden de composición post-multiplicativa y el caso de regresión de Multiply.
Version 1.8.0
- Se añadió carga de stream bajo demanda mediante el nuevo método TPdf.LoadCustomDocument(AStream, AOwnsStream) y la clase auxiliar TPdfStreamAdapter, respaldados por FPDF_LoadCustomDocument de PDFium. PDFium ahora lee bloques desde el TStream proporcionado únicamente cuando los necesita, de modo que los PDF muy grandes o remotos ya no requieren una copia previa en memoria.
- Se añadió propiedad opcional del stream: pasar AOwnsStream = True entrega el tiempo de vida del TStream a TPdf, que lo libera cuando se ejecuta UnloadDocument.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 79 casos cada una, y la suite de C++Builder a 75 casos, cubriendo carga en streaming vía TFileStream, limpieza de owned-stream y el contrato “el stream de propiedad externa sobrevive al unload”.
Version 1.7.0
- Se añadieron primitivas de cancelación asíncrona cooperativa en la nueva unidad FPdfAsync, exponiendo IPdfCancellationToken / IPdfCancellationTokenSource y un singleton reutilizable PdfNoCancellationToken para que los flujos de renderizado y exportación de larga duración puedan soportar semántica limpia de cancelación desde la UI.
- Se añadió un helper ligero TPdfFuture<T> que ejecuta un worker en un hilo de fondo y publica el sobre TPdfFutureResult<T> de vuelta al hilo principal, distinguiendo los casos de éxito, cancelación y fallo.
- Se ampliaron las suites de regresión de Delphi y Lazarus a 76 casos cada una, y la suite de C++Builder a 73 casos, con cobertura compartida del estado de cancelación, cancelación idempotente, fan-out de callbacks y registro post-cancelación.
Version 1.6.10
- Se añadió acceso de alto nivel TPdf.PrintPageRanges a la preferencia del visor PDF para rango de páginas de impresión, devolviendo rangos de página de base uno para el código de la aplicación.
- Se añadieron TPdf.SetFormFieldFlags / SetFormFieldFlagsAt y los helpers TPdfView correspondientes para que las aplicaciones puedan actualizar los flags de campo de AcroForm mediante la API pública, incluyendo cobertura para los flags de password y multi-select.
- Se reforzó la cobertura del ABI de las bindings de PDFium para FPDF_DWORD de tamaño Windows, callbacks FPDF_FILEACCESS y campos de slot del embedder V8.
Version 1.6.9
- Se añadieron bindings de renderizado Skia de bajo nivel para las APIs recientemente exportadas FPDF_RenderPageSkia y FPDF_FFLDrawSkia en las DLLs PDFium estándar y V8 incluidas.
- Se ampliaron las verificaciones de cobertura de bindings públicas, de modo que la carga de la DLL estándar y V8 ahora verifica los puntos de entrada de renderizado Skia junto con las comprobaciones de capacidades V8/XFA existentes.
Version 1.6.8
- Se añadieron TPdf.SetTextPositions y TPdfSingleArray para establecer posiciones por carácter en objetos de texto existentes mediante la API FPDFText_SetPositions recientemente exportada.
- Se promovió FPDFText_SetPositions a binding requerido para las DLLs PDFium incluidas actualmente, mientras se confirma que los puntos de entrada de renderizado Skia siguen no disponibles porque las DLLs aún no los exportan.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 65 casos cada una con cobertura de posiciones de texto.
Version 1.6.7
- Se añadió acceso de alto nivel TPdf a las acciones JavaScript del name-tree del documento, devolviendo los nombres de acción y los scripts mediante JavaScriptAction y JavaScriptActions.
- Se añadió TPdf.FileIdentifier para leer los IDs de trailer permanente y cambiante como TBytes binarios sin el byte terminador de PDFium.
- Se añadieron TPdf.PageBox, GetPageBox y SetPageBox para MediaBox, CropBox, BleedBox, TrimBox y ArtBox en la página actual.
- Se confirmó que las DLLs PDFium incluidas actualmente dejan únicamente los puntos de entrada de renderizado Skia no disponibles en runtime porque esos exports no están presentes.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 64 casos cada una con cobertura de JavaScript de documento, ID de trailer y page-box.
Version 1.6.6
- Se añadió soporte en runtime para la DLL PDFium habilitada con V8 incluida. Establecer EnableV8Engine antes de cargar ahora selecciona pdfium.v8.dll del árbol DLLs\Win32 o DLLs\Win64 y expone bindings exclusivos de V8/XFA cuando la DLL cargada los proporciona.
- Se añadieron V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags y bindings opcionales de bajo nivel para FPDF_BStr_*, FPDF_GetRecommendedV8Flags y FPDF_GetArrayBufferAllocatorSharedInstance.
- Se hizo opcional FPDFText_SetPositions para que PDFiumVCL siga cargando con DLLs PDFium que no exporten ese setter experimental de posición de texto.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 61 casos cada una con cobertura de capacidades de la DLL estándar y la DLL V8.
Version 1.6.5
- Se añadió inspección del árbol de estructura de PDF etiquetado mediante TPdf.StructureElements y TPdfView.StructureElements, incluyendo tipo de elemento, título, texto alternativo, texto real, texto de expansión, idioma, IDs de marked-content, recuentos de hijos y recuentos de atributos.
- Se añadió selección de modo de impresión de PDFium en Windows mediante TPdfPrintMode y SetPdfPrintMode, cubriendo los modos de impresión EMF, solo texto, PostScript, pass-through, image-mask y Type 42.
- Se añadieron bindings de bajo nivel para los exports públicos restantes de PDFium en la DLL estándar, cubriendo acciones JavaScript, flags de formulario de anotación / color de fuente, estado activo de objetos de página, inserción indexada, valores float de marca de contenido, datos del perfil ICC de imagen, eliminación de form-object y posiciones de texto.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 59 casos cada una con cobertura del árbol de estructura de PDF etiquetado, modo de impresión y bindings de export públicas.
Version 1.6.4
- Se actualizaron las demos de Delphi, C++Builder y Lazarus para abrir automáticamente los PDFs generados, el texto/imágenes exportados y las carpetas de salida por lotes tras una creación exitosa.
Version 1.6.3
- Se ampliaron las suites de regresión alineadas de Delphi, C++Builder y Lazarus a 56 casos cada una con cobertura GUI de TPdfView para los helpers de fit-zoom, round-trips de coordenadas de dispositivo/página, hit-testing de caracteres y paneo con ratón a través de controles del visor en ventanas ocultas.
- Los fixtures de TPdfView ahora utilizan un tamaño de visor explícito y subclases solo para pruebas que ejercitan los manejadores de ratón protegidos manteniendo las suites totalmente headless.
Version 1.6.2
- Se corrigió TPdf.AddPage(0, ...) para que la primera página insertada se convierta inmediatamente en la página activa. El código de muestra existente sigue funcionando, mientras que PageNumber ahora informa una página válida en base uno tras la inserción.
- Se sincronizó la versión del paquete Lazarus y se ampliaron las suites de regresión alineadas de Delphi, C++Builder y Lazarus a 52 casos cada una.
Version 1.6.1
- Se corrigió un requisito incorrecto de versión mínima en el validador de conformidad de versión PDF de v1.6.0: la acción SetState fue reclasificada de PDF 1.5 a PDF 1.2, coincidiendo con PDF 1.2 Reference 6.9.9. Los targets SaveAs de PDF 1.3 / 1.4 que contienen acciones SetState ahora se guardan correctamente en lugar de ser rechazados.
- Se añadieron comprobaciones léxicas equivalentes para PDF 1.2 según la misma sección de la especificación: las acciones Sound, Movie y NOP, así como el espacio de color Separation, ahora se bloquean cuando la versión target elegida es anterior a PDF 1.2.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 50 casos cada una añadiendo una prueba positiva de aceptación de SetState en PDF 1.4 que fija la frontera corregida.
Version 1.6.0
- Se reforzaron los targets explícitos de SaveAs PDF 1.0 a PDF 1.7 con un validador completo de features por versión que cubre toda la línea de tiempo de features desde PDF 1.1 hasta ISO 32000-1. El validador ahora bloquea los guardados que contengan entradas de diccionario, nombres de filtro, subtipos de anotación, tipos de acción, fuentes, espacios de color o parámetros de cifrado introducidos después de la versión target elegida. Ejemplos: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), anotaciones Polygon / PolyLine / Caret / Screen / Watermark / Redact, cifrado AES y AES-256 (CFM AESV2 / AESV3), entradas del catálogo Perms / Legal / Requirements / NeedsRendering y acciones acotadas por versión como JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView se rechazan todas cuando la versión PDF target no puede representarlas.
Version 1.5.13
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 49 casos cada una, añadiendo cobertura directa para el rechazo de espacios de color ICCBased, Tagged PDF MarkInfo, anotaciones Polygon, cifrado AES (V2) y anotaciones Redact contra targets PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 respectivamente.
Version 1.5.12
- Se corrigió el post-procesado de SaveAs para reescrituras incrementales del catálogo. PDFiumVCL ahora valida el último objeto indirecto repetido, de modo que las sobreescrituras existentes de /Version del catálogo se reemplazan correctamente al guardar en una versión target PDF más antigua explícita.
- Se ampliaron las suites de regresión de Delphi, C++Builder y Lazarus a 44 casos cada una, añadiendo cobertura directa para el reemplazo de /Version del catálogo obsoleto, la normalización de versión del catálogo PDF 1.4 y el rechazo de transparencia y features de colección portátil cuando la versión target PDF seleccionada no puede representarlas.
Version 1.5.11
- Se reforzó la salida SaveAs con versión para targets explícitos PDF 1.3, 1.4, 1.5, 1.6 y 1.7. PDFiumVCL ahora normaliza los marcadores de versión del catálogo, mantiene el OpenAction de Fit Height por defecto seguro para la versión y rechaza las features PDF más nuevas cuando la versión target seleccionada no puede representarlas.
- Se añadió cobertura de regresión en Delphi, C++Builder y Lazarus que guarda y recarga ficheros PDF explícitos de 1.3 a 1.7, verificando la cabecera final, el OpenAction de Fit Height por defecto y la versión PDF reportada.
Version 1.5.10
- Se avanzó de la opción B a la opción C de la especificación añadiendo pruebas de smoke de TPdfView en las tres suites IDE (Tests.PdfView). Cada suite construye un TForm padre oculto (vía TForm.CreateNew en los lados Pascal y
new TForm(NULL, 0)en el lado C++Builder), reparenta un TPdfView, establece Active := True y luego verifica la superficie round-trip para PageCount, valor por defecto de PageNumber, Zoom, Rotation, DisplayMode y que View.Text coincida con el TPdf.Text subyacente. Cada suite IDE ahora ejecuta 39 casos.
Version 1.5.9
- Se avanzó de la opción A a la opción B de la especificación añadiendo pruebas de smoke de renderizado en las tres suites IDE. Cada suite Tests.Render llama a TPdf.RenderPage sobre sample.pdf y verifica tres señales robustas en lugar de checksums byte a byte: el bitmap devuelto coincide exactamente con el tamaño de píxel solicitado; tamaños solicitados diferentes (200x100, 64x256) producen bitmaps coincidentes; y la página renderizada tiene al menos un 95% de fondo blanco con al menos 50 (Lazarus: 20) píxeles no blancos que marcan el texto antialiased. Cada suite IDE ahora ejecuta 33 casos.
Version 1.5.8
- Se cerraron los grupos originales del plan de pruebas A(2) añadiendo siete regresiones más por IDE: TPdf.CreateAnnotation construyendo una anotación anHighlight más un round-trip SaveAs/LoadDocument, la vía de lectura AcroForm sobre Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType es ftAcroForm, FormFieldCount > 0, FlattenAllPages reduce los campos a cero), y cobertura de vía de lectura silenciosa para Bookmarks, LinkAnnotationCount y WebLinkCount en un documento que no tiene ninguna de esas features. Cada suite IDE ahora ejecuta 30 casos.
Version 1.5.7
- Se ampliaron las suites de Delphi (DUnitX), Lazarus (FPCUnit) y C++Builder (GoogleTest) con siete nuevas regresiones por IDE: PdfVersion, PageRotation, búsqueda de subcadena TPdf.FindFirst / FindNext, concordancia de CharacterOrigin / CharacterRectangle contra el origen de AddText, registro de CreateAttachment más un round-trip SaveAs/LoadDocument, y un round-trip de AddText con texto acentuado que verifica que la vía de embebido TrueType europeo de v1.3.0 mantiene intactos los code points suplementarios Latin-1.
Version 1.5.6
- Los PDFs guardados ahora obtienen una acción de apertura Fit Height en la primera página por defecto cuando no existe un OpenAction previo, de modo que los lectores PDF muestran inicialmente los documentos generados al zoom de altura de página.
- Se añadió cobertura de regresión en Delphi, Lazarus y C++Builder para el OpenAction generado y el ajuste Fit Height.
Version 1.5.5
- Se añadieron pruebas de regresión en las suites de Delphi (DUnitX), Lazarus (FPCUnit) y C++Builder (GoogleTest) para la superficie de la API de inspección indexada de carácter y fuente (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). La suite de Lazarus omite intencionalmente FontData, que actualmente provoca una violación de acceso dentro de FPDFFont_GetFontData bajo FPC.
Version 1.5.4
- Se añadió una demo de Attachment en C++Builder portada desde la muestra en Delphi, cubriendo la creación de PDFs, añadir, listar, extraer, eliminar y guardar ficheros adjuntos embebidos con visualización del subtipo MIME.
Version 1.5.3
- Se expuso el cálculo de páginas de spread que respalda los modos de dos páginas de TPdfView como el helper a nivel de unidad ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). El comportamiento es el mismo; el helper hace que la regla de cover-aware sea testeable de forma independiente sin instanciar un visor.
- Se añadieron cinco pruebas de regresión en las suites de Delphi (DUnitX), Lazarus (FPCUnit) y C++Builder (GoogleTest) cubriendo documentos vacíos, el emparejamiento estándar de dos páginas, la página de portada en solitario en dmTwoPageContinuousWithCover, los pares post-portada y el comportamiento de clamping de la última página / fuera de rango.
Version 1.5.2
- Se añadió soporte de idioma del documento mediante TPdf.Language, mapeado a la entrada /Lang del catálogo PDF.
- Se añadió acceso al subtipo MIME de fichero adjunto con TPdf.AttachmentType.
- Se añadió anRedact a TPdfAnnotationSubtype y se añadieron helpers de eliminación de objetos de página para TPdf y TPdfView.
- Se actualizaron las demos del visor y de attachment para mostrar la nueva información de idioma y tipo de fichero adjunto cuando esté disponible.
Version 1.5.1
- Se añadió dmTwoPageContinuousWithCover para TPdfView, de modo que los layouts del visor pueden mostrar la primera página sola y luego continuar con spreads de dos páginas.
- Se actualizaron las demos MultiPageViewer en Delphi, C++Builder y Lazarus para exponer el modo de visualización de dos páginas cover-aware.
Version 1.5.0
- Se añadieron suites de pruebas automatizadas a nivel de smoke para Delphi (DUnitX), Lazarus (FPCUnit) y C++Builder (GoogleTest). Las tres suites comparten un único PDF de fixture en Tests\TestData y ejecutan los mismos siete casos cada una, cubriendo carga del documento, información de página, extracción de texto, metadatos, round-trip de guardado, validación de cabecera PDF y la propiedad Compressed.
Version 1.4.3
- Se mejoró la demo FontProperties para mostrar las APIs de metadatos de fuente tanto de TPdfView como de TPdf, incluyendo handles de fuente, tamaño de los datos de fuente y métricas de carácter.
- Se añadieron propiedades de inspección indexada de carácter y fuente a TPdfView y se actualizó la demo FontProperties para consultar los metadatos de fuente de los objetos de texto.
Version 1.4.2
- Se añadieron propiedades indexadas de inspección de carácter y fuente a TPdf para análisis de texto sin necesidad de un visor. Las propiedades indexadas por carácter (CharacterAngle, CharacterFontSize, CharacterFontWeight) consultan métricas por carácter del flujo de texto de la página actual. Las propiedades indexadas por objeto de página (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) consultan los metadatos de fuente para cualquier objeto de texto en la página actual.
- Los objetos de página que no son de texto devuelven valores seguros de cero o vacíos para todas las propiedades Font* en lugar de lanzar un error, lo que facilita iterar cada objeto de página e inspeccionar solo los de texto.
- FontBaseName lee directamente el nombre PostScript base font en lugar de recurrir al nombre de familia de fuente, dando un identificador más preciso para fuentes embebidas.
Version 1.4.1
- Se añadieron versiones en C++Builder y Lazarus de la demo EuropeanText para que todas las familias de IDE soportadas puedan verificar la generación de texto europeo acentuado con fuentes TrueType del sistema.
- Se añadieron versiones en C++Builder y Lazarus de la demo FormFill, incluyendo PDFs de formulario de muestra, edición de campos, regeneración de apariencia, guardado relleno y flujos de guardado aplanado.
Version 1.4.0
- Se añadió soporte para Lazarus / Free Pascal: el nuevo paquete PDFiumLaz proporciona los mismos componentes TPdf, TPdfView y relacionados bajo el conjunto de widgets LCL, extendiendo la biblioteca al IDE Lazarus y al compilador Free Pascal junto a los paquetes existentes para Delphi y C++Builder.
- Se añadieron versiones en Lazarus de las demos para que los desarrolladores de Lazarus puedan explorar todas las funcionalidades con ejemplos ejecutables.
- Se corrigió un problema de compilación en Lazarus donde las definiciones condicionales de Free Pascal se evaluaban junto con comprobaciones de versión del compilador Delphi, lo que causaba que las builds FPC intentaran resolver nombres de unidad específicos de Delphi y fallaran.
Version 1.3.1
- Se documentó el flujo de trabajo de aplanado de formulario en el conjunto de ayuda: GenerateFormAppearances, FlattenPage, FlattenAllPages y las constantes FLAT_* / FLATTEN_* relacionadas ahora están cubiertas en TPdf, TPdfView, la referencia de la API, la matriz de funcionalidades y los ejemplos de programación.
- Se corrigió la tabla de arquitectura en la página de overview para que liste las unidades de binding reales distribuidas en la carpeta Lib.
Version 1.3.0
- Se mejoró el soporte de caracteres europeos al crear PDFs. TPdf.AddText ahora carga y cachea la fuente TrueType del sistema coincidente antes de crear un objeto de texto, preservando caracteres acentuados de checo, francés, alemán, español, portugués, polaco y turco que las fuentes estándar integradas de PDFium no pueden representar.
- Las aplicaciones que antes producían signos de interrogación o glifos de reemplazo para texto Latin no-ASCII ahora se renderizarán correctamente sin ningún cambio de código. Se añadió la demo EuropeanText para ilustrar la funcionalidad.
Version 1.2.0
- Se añadió refresco de apariencia de AcroForm a TPdf: llamar a GenerateFormAppearances después de modificar los valores de FormField[] actualiza la apariencia del widget para que los valores rellenados sean visibles en lectores PDF estándar sin requerir una sesión de edición interactiva.
- Se añadieron helpers de aplanado de formulario a TPdf (FlattenPage / FlattenAllPages) y a TPdfView (FlattenPage para la página actual del visor). El aplanado embebe permanentemente los valores de campo rellenados como contenido de página ordinario y elimina la capa de formulario interactivo, produciendo un documento estático que se renderiza de forma coherente en todos los visores.
- Se añadió Demo\Delphi\FormFill para demostrar los flujos de relleno-y-guardado y relleno-y-aplanado con un PDF AcroForm de muestra.
Version 1.1.2
- Se añadió compresión de stream PDF en el momento del guardado. La nueva propiedad TPdf.Compressed (habilitada por defecto) reescribe los streams de contenido sin comprimir como streams comprimidos con FlateDecode al guardar, reduciendo significativamente el tamaño de fichero para PDFs generados programáticamente. Las aplicaciones que requieran salida sin comprimir pueden establecer Compressed a False antes de llamar a SaveAs.
Version 1.1.1
- Las builds del paquete Win64 ya no incluyen unidades de registro en tiempo de diseño, evitando fallos de build cuando el paquete Win64 se despliega en un contexto solo en runtime.
- El cargador de la DLL PDFium ahora busca primero en el subdirectorio Win32 o Win64 de la aplicación, usando los nombres estándar pdfium.dll y pdfium.v8.dll, y recurre al directorio plano de la aplicación y al directorio del sistema de Windows. Esto coincide con el layout de la DLL incluido con el paquete del componente, haciendo que la instalación sea sencilla.
Version 1.1.0
- Se corrigió un defecto de recorte visual en el modo de dos páginas de TPdfView: el contenido de la página se filtraba a través del gutter porque ambos tiles de página izquierda y derecha compartían un único rectángulo de recorte. Cada tile ahora se recorta de forma independiente para que el contenido permanezca dentro de los límites de su página.
- Se mejoró el mensaje de error de la demo Delphi cuando no se puede encontrar la DLL PDFium, ofreciendo un aviso más claro con el nombre y la ubicación esperados de la DLL.