TppHotPDFDevice

ReportBuilder adapter (Lib\Addons\ReportBuilder\ppHotPDFDevice.pas)

 

FastReport adapter  QuickReport adapter  DevExpress adapter

מחלקת device של ReportBuilder שמשתמשת ב-HotPDF כ-backend ה-PDF הבסיסי במקום ppPDFDevice של ReportBuilder. מיועדת לפרויקטים שכבר מטמיעים HotPDF ורוצים backend PDF יחיד בכל היישום

 

Delphi declaration:

type

  TppHotPDFDevice = class(TppGraphicsDevice)

  public

    class function DeviceName: String; override;

    procedure StartJob; override;

    procedure EndJob; override;

    procedure CancelJob; override;

    procedure SetOutputStream(AStream: TStream);

    property FileName: string;

    property Title, Author, Subject, Keywords: string;

    property PDFVersion: TPDFVersType;

    property Compressed: Boolean;

    property CompressionLevel: TPDFCompressionLevel;

  end;

 

תיאור

TppHotPDFDevice יורד מ-TppGraphicsDevice, רמה אחת מעל TppCustomScreenDevice / TppImageDevice, ולכן משתלב ב-device chain של ReportBuilder כאשר הוא מוקצה ל-TppReport.PrinterDevice או משמש publisher device על TppPublisher. DeviceName מדווח כ-'HotPDF'. מכיוון שרישום device ב-ReportBuilder נעשה דרך ppRptDeviceMap ולא דרך RegisterComponents, אין כניסה ב-IDE component palette; הקוראים יוצרים TppHotPDFDevice ישירות

 

כל עמוד שמגיע דרך TppGraphicsDevice.ReceivePage מצויר על TMetafileCanvas זמני, שנוצר ב-BeforeRenderPage ונסגר ב-AfterRenderPage. ה-TMetafile שנלכד מועבר לאחר מכן אל importer בעל auto-scaling של ShowEnhancedMetafile ב-HotPDF:

 

1. StartJob creates the THotPDF instance, sets metadata, and calls BeginDoc.

2. BeforeRenderPage creates a TMetafile sized to spWidth x spHeight plus a TMetafileCanvas, and sets it as the inherited Canvas.

3. RenderPage, בירושה, עובר על DrawCommands ומנתב אותם דרך GraphicsContext אל metafile canvas שלנו

4. AfterRenderPage מסיים את ה-metafile, משחרר את הקנבס, מוסיף עמוד HotPDF חדש בגודל mmWidth x mmHeight לאחר המרה לנקודות PDF, ומנגן את ה-metafile דרך ShowEnhancedMetafile

5. EndJob קורא ל-HotPDF.EndDoc; אם הפלט הוא Stream, הוא מעתיק bytes מהקובץ הזמני שנכתב פנימית

 

מאפיינים

FileName - target PDF path. Used unless SetOutputStream has installed a stream.

Title / Author / Subject / Keywords - metadata של המסמך. כאשר Title ריק, ה-device נופל חזרה אל FileName, כך של-PDF תמיד יש כותרת לא ריקה

PDFVersion - רמת מפרט PDF שהמסמך אמור ליעד. ברירת המחדל היא pdf17

Compressed - HotPDF stream compression on (default True). Set False for diagnostic PDFs.

CompressionLevel - FlateDecode level. Defaults to clDefault.

SetOutputStream(AStream) - מנתב את bytes של ה-PDF אל AStream במקום לכתוב לדיסק. יש לקרוא לו לפני שהדוח מפעיל StartJob

 

Typical workflow

 

Dev := TppHotPDFDevice.Create(nil);

try

  Dev.FileName := 'Report.pdf';

  Dev.Title := 'Monthly Statement';

  Dev.PDFVersion := pdf17;

  ppReport1.DeviceType := 'HotPDF';

  ppReport1.PrinterDevice := Dev;

  ppReport1.Print;

finally

  Dev.Free;

end;

 

Capabilities preserved

תוכן עמוד וקטורי ו-raster שמרונדר על ידי pipeline ה-draw-command הסטנדרטי של ReportBuilder. מחרוזות טקסט שנפתרו על ידי GDI. לכידת metafile בברירת מחדל של 200 DPI, ניתנת להגדרה דרך PixelsPerInch בירושה, נותנת פלט באיכות הדפסה ללא קבצים עצומים

 

Limitations of the metafile bridge

מפני שהעמודים נלכדים כ-enhanced metafiles, תכונות PDF ייחודיות ל-ReportBuilder שדורשות מידע מבני, כמו שדות AcroForm, named destinations, outlines ושערי תאימות PDF/A או PDF/X, אינן מועברות. הפלט הוא שחזור חזותי נאמן של מה ש-ReportBuilder מרנדר, לא PDF מובנה

 

Packaging note

ה-device נמצא ב-Lib\Addons\ReportBuilder\ ואינו חלק מחבילות HotPDF*.dpk הראשיות, לכן תלות ReportBuilder נמשכת רק על ידי פרויקטים שבוחרים להשתמש ב-device. בדיקת smoke ‏(smoke_pp_hotpdf.dpr) נמצאת לצד היחידה

 

See also: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support