Artículo técnico

PDFlibPas: DLL, ActiveX, and Dylib integration in Delphi

Esta versión localizada revisa PDFlibPas DLL, ActiveX, and dylib Bindings: Calling One PDF Engine from Any Language 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, por lo que esta página debe leerse como una guía de trabajo y no como un resumen breve

Puntos importantes de la versión actualizada:

  • Trabaje primero con 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

Empiece 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

  • Trabaje primero con 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 poder compararlos directamente con proyectos Delphi, C++Builder y Lazarus/FPC

// Windows binding (PDFlibDLL64.dll): Stdcall, plain export names
function DLCreateLibrary: Integer; stdcall;
  external 'PDFlibDLL64.dll' name 'DLCreateLibrary';
function DLReleaseLibrary(InstanceID: Integer): Integer; stdcall;
  external 'PDFlibDLL64.dll' name 'DLReleaseLibrary';
function DLLoadFromFile(InstanceID: Integer;
  FileName, Password: PWideChar): Integer; stdcall;
  external 'PDFlibDLL64.dll' name 'DLLoadFromFile';

// macOS binding: same function, Cdecl, and an underscore prefix on the export
function DLCreateLibrary: Integer; cdecl;
  external 'PDFlibDylib.dylib' name '_DLCreateLibrary';
var
  Inst, Doc: Integer;
begin
  Inst := DLCreateLibrary;                       // one instance per worker thread
  try
    Doc := DLLoadFromFile(Inst, 'in.pdf', '');   // returns a DocumentID, 0 on failure
    if Doc <> 0 then
    begin
      DLEncrypt(Inst, 'owner-secret', 'user-secret', 3,
        DLEncodePermissions(Inst, 1, 0, 0, 0, 0, 0, 0, 1));
      DLSaveToFile(Inst, 'out.pdf');
    end;
  finally
    DLReleaseLibrary(Inst);                      // frees every document the instance owns
  end;
end;
var
  P: PWideChar;
  PageText: string;
begin
  P := DLGetPageText(Inst, 7);   // pointer into a library-owned buffer
  PageText := P;                 // copy now; a later call may reuse the buffer
end;

Comprobación antes de publicar

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