Artículo técnico

Merging and Splitting Gigabyte PDFs in Delphi with PDFlibPas Direct Access

Esta versión localizada revisa Merging and Splitting Gigabyte PDFs in Delphi with PDFlibPas Direct Access tomando como referencia el artículo base en inglés ya actualizado para equipos que trabajan con Delphi, PDF y software documental

La página convierte la versión base actualizada en puntos de control prácticos para diseño, implementación y validación

Contenido sincronizado desde la versión base

El artículo base se amplió con contexto práctico, decisiones técnicas y ejemplos concretos, así que esta página funciona como guía de trabajo y no como un resumen corto

Puntos importantes de la versión actualizada:

  • Use primero archivos de entrada pequeños y reproducibles
  • Mantenga intactos nombres de producto, API, archivos y valores literales
  • Guarde la salida del validador y las versiones junto con el archivo de prueba generado

Decisiones prácticas de implementación

Comience por el tipo de archivo, el resultado esperado y el error que debe ver el usuario. Después vincule cada llamada API con un resultado verificable para que validación, registros y soporte puedan reproducir el caso del cliente

  • Use primero archivos de entrada pequeños y reproducibles
  • Mantenga intactos nombres de producto, API, archivos y valores literales
  • Guarde la salida del validador y las versiones junto con el archivo de prueba generado

Código y puntos API

Los ejemplos de código se conservan sin cambios para compararlos directamente con proyectos Delphi, C++Builder y Lazarus/FPC

var
  Lib: TPDFlib;
  Handle, Pages: Integer;
begin
  Lib := TPDFlib.Create;
  try
    Handle := Lib.DAOpenFileReadOnly('archive-2025.pdf', '');
    if Handle = 0 then
      raise Exception.Create('Direct access open failed');
    Pages := Lib.DAGetPageCount(Handle);
    Writeln('pages : ', Pages);
    Writeln('title : ', Lib.DAGetInformation(Handle, 'Title'));
    Lib.DACloseFile(Handle);
  finally
    Lib.Free;
  end;
end;
PageRef := Lib.DAFindPage(Handle, 250);          // page number -> object handle
if PageRef <> 0 then
begin
  Text := Lib.DAExtractPageText(Handle, PageRef, 0);
  Lib.DARenderPageToFile(Handle, PageRef, 5, 150, 'page250.png');
end;
Lib.AddToFileList('Statements', 'jan.pdf');
Lib.AddToFileList('Statements', 'feb.pdf');
Lib.AddToFileList('Statements', 'mar.pdf');
Lib.MergeFileList('Statements', 'q1-statements.pdf');

// Verify the result the cheap way: direct access again
Handle := Lib.DAOpenFileReadOnly('q1-statements.pdf', '');
Writeln('merged pages: ', Lib.DAGetPageCount(Handle));
Lib.DACloseFile(Handle);

Comprobación antes de publicar

Revise el archivo de salida con las mismas herramientas que usará el cliente o el repositorio documental. Registre versión del componente, datos de prueba, versión del validador y resultado observado