مقاله فنی

PDF/A and PDF/UA Preflight in Delphi with PDFlibPas

این نسخه بومی‌سازی شده، PDF/A and PDF/UA Preflight in Delphi with PDFlibPas را بر اساس مقاله پایه انگلیسی به‌روزرسانی شده برای تیم‌هایی که با Delphi، PDF و نرم‌افزارهای اسناد کار می‌کنند، بررسی می‌کند

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

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

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

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

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

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

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

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

نکات کد و API

مثال‌های کد برای مقایسه مستقیم با پروژه‌های Delphi، C++Builder و Lazarus/FPC بدون تغییر حفظ شده‌اند

function GateArchiveUpload(Pdf: TPDFlib; const FileName: string): Boolean;
var
  ListId, I: Integer;
begin
  ListId := Pdf.CheckFileCompliance(FileName, '', 1, 0);  // 1 = PDF/A
  if ListId = 0 then
  begin
    // 0 means "no findings" OR "file unreadable" -- disambiguate before passing
    Result := Pdf.LastErrorCode = 0;
    Exit;
  end;
  for I := 0 to Pdf.GetStringListCount(ListId) - 1 do
    LogFinding(FileName, Pdf.GetStringListItem(ListId, I));
  Pdf.ReleaseStringList(ListId);
  Result := False;
end;
var
  Pdf: TPDFlib;
  Diag: WideString;
begin
  Pdf := TPDFlib.Create;
  try
    Pdf.NewDocument;
    Pdf.SetPDFAMode(1);
    Pdf.LoadOutputIntentProfile('sRGB-IEC61966-2.1.icc', 'RGB');
    Pdf.SetPDFUAMode('en-US');
    Pdf.SetInformation(1, 'Quarterly Statement');  // /Title: required for PDF/UA
    // ... draw tagged content here ...
    Diag := Pdf.GetPDFUADiagnostics;
    if Diag <> '' then
      Writeln('fix before shipping: ', Diag);
    Pdf.SaveToFile('statement.pdf');
    // the preflight that counts runs on the saved file:
    Writeln(Pdf.CreatePreflightReport('statement.pdf', '', 1, 0));
  finally
    Pdf.Free;
  end;
end;

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

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