مقاله فنی

PDFlibPas Print Preview and Device-Context Output in Delphi

این نسخه بومی‌سازی شده، PDFlibPas Print Preview and Device-Context Output in Delphi را بر اساس مقاله پایه انگلیسی به‌روزرسانی شده برای تیم‌هایی که با Delphi، PDF و نرم‌افزارهای اسناد کار می‌کنند، بررسی می‌کند

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

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

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

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

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

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

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

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

نکات کد و API

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

procedure TPreviewForm.PreviewBoxPaint(Sender: TObject);
begin
  // these three are sticky library state, not per-call parameters:
  FPdf.SetRenderDCOffset(FOffsetX, FOffsetY);
  FPdf.SetRenderDCErasePage(1);
  FPdf.SetRenderCropType(0);
  FPdf.RenderPageToDC(FPreviewDpi, FCurrentPage, PreviewBox.Canvas.Handle);
end;
var
  Pdf: TPDFlib;
  Virt: WideString;
  Opt: Integer;
begin
  Pdf := TPDFlib.Create;
  try
    if Pdf.LoadFromFile('report.pdf', '') <> 1 then
      raise Exception.Create('load failed');
    Virt := Pdf.NewCustomPrinter(Pdf.GetDefaultPrinterName);
    Pdf.SetupPrinter(Virt, 1, 9);        // setting 1 = paper, DMPAPER_A4
    Pdf.SetupPrinter(Virt, 11, 1);       // setting 11 = orientation, 1 = portrait
    Opt := Pdf.PrintOptions(1, 1, 'Monthly Report');  // fit to paper, auto-rotate + center
    Pdf.PrintDocument(Virt, 1, Pdf.PageCount, Opt);
  finally
    Pdf.Free;
  end;
end;
procedure ShowPrinterTruePreview(Pdf: TPDFlib; const Virt: WideString; Opt: Integer);
var
  Data: AnsiString;
  Strm: TMemoryStream;
  Bmp: TBitmap;
begin
  Data := Pdf.GetPrintPreviewBitmapToString(Virt, 1, Opt, 1200, 0);
  Strm := TMemoryStream.Create;
  try
    Strm.WriteBuffer(PAnsiChar(Data)^, Length(Data));
    Strm.Position := 0;
    Bmp := TBitmap.Create;
    try
      Bmp.LoadFromStream(Strm);
      PreviewImage.Picture.Assign(Bmp);
    finally
      Bmp.Free;
    end;
  finally
    Strm.Free;
  end;
end;

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

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