مقاله فنی

PDFlibPas DLL, ActiveX, and dylib Bindings: Calling One PDF Engine from Any Language

این نسخه بومی‌سازی شده، PDFlibPas DLL, ActiveX, and dylib Bindings: Calling One PDF Engine from Any Language را بر اساس مقاله پایه انگلیسی به‌روزرسانی شده برای تیم‌هایی که با Delphi، PDF و نرم‌افزارهای اسناد کار می‌کنند، بررسی می‌کند

این صفحه، نسخه پایه به‌روزرسانی شده را به نقاط کنترلی عملی برای طراحی، پیاده‌سازی و اعتبارسنجی تبدیل می‌کند

محتوای همگام‌سازی شده از نسخه پایه

مقاله پایه با زمینه‌های عملی، تصمیمات فنی و مثال‌های ملموس گسترش یافته است، بنابراین این صفحه به جای یک خلاصه کوتاه، به عنوان یک راهنمای کاری عمل می‌کند

نکات مهم نسخه به‌روزرسانی شده:

  • ابتدا از فایل‌های ورودی کوچک و قابل بازتولید استفاده کنید
  • نام محصولات، APIها، فایل‌ها و مقادیر ثابت را دست‌نخورده نگه دارید
  • خروجی اعتبارسنج و نسخه‌ها را همراه با فایل تست تولید شده ذخیره کنید

تصمیمات عملی پیاده‌سازی

با نوع فایل، نتیجه مورد انتظار، و خطایی که کاربر باید ببیند شروع کنید؛ سپس هر فراخوانی API را به یک نتیجه قابل بررسی پیوند دهید تا اعتبارسنجی، لاگ‌ها و پشتیبانی بتوانند وضعیت مشتری را بازتولید کنند

  • ابتدا از فایل‌های ورودی کوچک و قابل بازتولید استفاده کنید
  • نام محصولات، APIها، فایل‌ها و مقادیر ثابت را دست‌نخورده نگه دارید
  • خروجی اعتبارسنج و نسخه‌ها را همراه با فایل تست تولید شده ذخیره کنید

نکات کد و API

مثال‌های کد برای مقایسه مستقیم با پروژه‌های Delphi، C++Builder و 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;

بررسی قبل از انتشار

فایل خروجی را با همان ابزارهایی بررسی کنید که مشتری یا مخزن اسناد استفاده خواهد کرد؛ نسخه کامپوننت، داده‌های تست، نسخه اعتبارسنج و نتیجه مشاهده شده را ثبت کنید