این نسخه بومیسازی شده، Multi-Engine PDF Rendering in Delphi: Built-in, Cairo, and PDFium with PDFlibPas را بر اساس مقاله پایه انگلیسی بهروزرسانی شده برای تیمهایی که با Delphi، PDF و نرمافزارهای اسناد کار میکنند، بررسی میکند
این صفحه، نسخه پایه بهروزرسانی شده را به نقاط کنترلی عملی برای طراحی، پیادهسازی و اعتبارسنجی تبدیل میکند
محتوای همگامسازی شده از نسخه پایه
مقاله پایه با زمینههای عملی، تصمیمات فنی و مثالهای ملموس گسترش یافته است، بنابراین این صفحه به جای یک خلاصه کوتاه، به عنوان یک راهنمای کاری عمل میکند
نکات مهم نسخه بهروزرسانی شده:
- ابتدا از فایلهای ورودی کوچک و قابل بازتولید استفاده کنید
- نام محصولات، APIها، فایلها و مقادیر ثابت را دستنخورده نگه دارید
- خروجی اعتبارسنج و نسخهها را همراه با فایل تست تولید شده ذخیره کنید
تصمیمات عملی پیادهسازی
با نوع فایل، نتیجه مورد انتظار، و خطایی که کاربر باید ببیند شروع کنید؛ سپس هر فراخوانی API را به یک نتیجه قابل بررسی پیوند دهید تا اعتبارسنجی، لاگها و پشتیبانی بتوانند وضعیت مشتری را بازتولید کنند
- ابتدا از فایلهای ورودی کوچک و قابل بازتولید استفاده کنید
- نام محصولات، APIها، فایلها و مقادیر ثابت را دستنخورده نگه دارید
- خروجی اعتبارسنج و نسخهها را همراه با فایل تست تولید شده ذخیره کنید
نکات کد و API
مثالهای کد برای مقایسه مستقیم با پروژههای Delphi، C++Builder و Lazarus/FPC بدون تغییر حفظ شدهاند
function ProbeEngines(PDF: TPDFlib): string;
begin
Result := 'built-in'; // engine 1 is always present
if (PDF.SetCairoFileName('cairo.dll') = 1) and (PDF.SelectRenderer(2) = 2) then
Result := Result + ', cairo';
if (PDF.SetPDFiumFileName('pdfium.dll') = 1) and (PDF.SelectRenderer(3) = 3) then
Result := Result + ', pdfium';
PDF.SelectRenderer(1); // restore the default before real work
end;PDF.SetRenderScale(2.0); // every later render is doubled
PDF.RenderPageToFile(150, 1, 5, 'p1.png'); // effectively 300 DPI
PDF.SetRenderScale(1.0); // reset, or your thumbnails arrive hugeprocedure RenderPageWithFallback(PDF: TPDFlib; Page: Integer; const OutFile: string);
begin
PDF.SelectRenderer(1); // built-in first
PDF.RenderPageToFile(200, Page, 5, OutFile); // 5 = PNG
if PDF.LastRenderError = '' then Exit;
LogEngineFailure('built-in', Page, PDF.LastRenderError);
if PDF.SelectRenderer(3) = 3 then // PDFium as the heavy fallback
begin
PDF.RenderPageToFile(200, Page, 5, OutFile);
if PDF.LastRenderError = '' then Exit;
LogEngineFailure('pdfium', Page, PDF.LastRenderError);
end;
raise Exception.CreateFmt('Page %d failed on all available engines', [Page]);
end;بررسی قبل از انتشار
فایل خروجی را با همان ابزارهایی بررسی کنید که مشتری یا مخزن اسناد استفاده خواهد کرد؛ نسخه کامپوننت، دادههای تست، نسخه اعتبارسنج و نتیجه مشاهده شده را ثبت کنید