TppHotPDFDevice

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

 

Adaptor FastReport  Adaptor QuickReport  Adaptor DevExpress

Clasă de dispozitiv ReportBuilder care folosește HotPDF ca backend PDF de bază în locul propriului ppPDFDevice al ReportBuilder. Este destinată proiectelor care încorporează deja HotPDF și doresc un singur backend PDF în întreaga aplicație

 

Declarație Delphi:

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;

 

Descriere

TppHotPDFDevice derivă din TppGraphicsDevice (cu un nivel deasupra TppCustomScreenDevice / TppImageDevice), astfel încât se integrează în lanțul de dispozitive ReportBuilder când este atribuit la TppReport.PrinterDevice sau folosit ca dispozitiv publisher pe un TppPublisher. DeviceName este raportat ca 'HotPDF'. Deoarece înregistrarea dispozitivelor în ReportBuilder se face prin ppRptDeviceMap și nu prin RegisterComponents, nu există o intrare în paleta de componente IDE - apelanții instanțiază direct TppHotPDFDevice

 

Fiecare pagină care trece prin TppGraphicsDevice.ReceivePage este desenată pe un TMetafileCanvas tranzitoriu (creat în BeforeRenderPage, finalizat în AfterRenderPage). TMetafile-ul capturat este apoi trimis importatorului HotPDF ShowEnhancedMetafile cu autoscalare:

 

1. StartJob creează instanța THotPDF, setează metadatele și apelează BeginDoc

2. BeforeRenderPage creează un TMetafile dimensionat la spWidth x spHeight plus un TMetafileCanvas și îl setează ca Canvas moștenit

3. RenderPage (moștenit) parcurge DrawCommands și le redirecționează prin GraphicsContext către canvas-ul nostru metafile

4. AfterRenderPage finalizează metafile-ul (eliberează canvas-ul), adaugă o pagină HotPDF nouă dimensionată la mmWidth x mmHeight (convertite în puncte PDF) și redă metafile-ul prin ShowEnhancedMetafile

5. EndJob apelează HotPDF.EndDoc; dacă ieșirea este un Stream, copiază octeții din fișierul temporar scris intern

 

Proprietăți

FileName - calea țintă a PDF-ului, folosită dacă SetOutputStream nu a instalat un flux

Title / Author / Subject / Keywords - metadatele documentului, iar când Title este gol, dispozitivul revine la FileName astfel încât PDF-ul să aibă mereu un titlu nenul

PDFVersion - nivelul de specificație PDF țintit de document, implicit pdf17

Compressed - compresia fluxului HotPDF activată, implicit True. Puneți False pentru PDF-uri de diagnostic

CompressionLevel - nivelul FlateDecode, implicit clDefault

SetOutputStream(AStream) - redirecționează octeții PDF în AStream în loc să scrie pe disc. Apelați-l înainte ca raportul să declanșeze StartJob

 

Flux tipic

 

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;

 

Capabilități păstrate

Conținut vectorial și raster al paginii randat de fluxul standard de comenzi de desen al ReportBuilder. Șiruri de text rezolvate prin GDI. Capturarea implicită la 200 DPI a metafile-ului (configurabilă prin PixelsPerInch moștenit) oferă ieșire de calitate de tipar fără fișiere uriașe

 

Limitările podului bazat pe metafile

Deoarece paginile sunt capturate ca enhanced metafile, funcțiile PDF specifice ReportBuilder care au nevoie de informație structurală (câmpuri AcroForm, destinații denumite, schițe, porți de conformitate PDF/A sau PDF/X) nu sunt propagate. Ieșirea este o reproducere vizuală fidelă a ceea ce randă ReportBuilder, nu un PDF structurat

 

Notă de ambalare

Dispozitivul se află în Lib\Addons\ReportBuilder\ și nu face parte din pachetele principale HotPDF*.dpk, astfel că dependența ReportBuilder este adusă doar de proiectele care optează pentru dispozitiv. Un test smoke (smoke_pp_hotpdf.dpr) se află lângă unitate

 

Vezi și: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Suport Enhanced EMF/WMF