TppHotPDFDevice

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

 

FastReport adapter  QuickReport adapter  DevExpress adapter

ReportBuilder-deviceklasse die HotPDF gebruikt als onderliggende PDF-backend in plaats van ReportBuilder's eigen ppPDFDevice. Bedoeld voor projecten die HotPDF al inbedden en één PDF-backend voor de hele toepassing willen

 

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;

 

Beschrijving

TppHotPDFDevice erft van TppGraphicsDevice (één niveau boven TppCustomScreenDevice / TppImageDevice) en past daardoor in de device-keten van ReportBuilder wanneer hij aan TppReport.PrinterDevice wordt toegewezen of als publisher-device op een TppPublisher wordt gebruikt. DeviceName wordt gerapporteerd als 'HotPDF'. Omdat device-registratie in ReportBuilder via ppRptDeviceMap gebeurt en niet via RegisterComponents, is er geen vermelding in het IDE-componentenpalet - aanroepers maken TppHotPDFDevice direct aan

 

Elke pagina die via TppGraphicsDevice.ReceivePage binnenkomt, wordt getekend op een tijdelijke TMetafileCanvas (gemaakt in BeforeRenderPage, afgewerkt in AfterRenderPage). De vastgelegde TMetafile wordt daarna doorgegeven aan HotPDF's automatisch schaalende ShowEnhancedMetafile-importeur:

 

1. StartJob maakt de THotPDF-instantie aan, stelt de metadata in en roept BeginDoc aan

2. BeforeRenderPage maakt een TMetafile aan met de afmetingen spWidth x spHeight plus een TMetafileCanvas en stelt die in als de overgeërfde Canvas

3. RenderPage (geërfd) doorloopt de DrawCommands en stuurt ze via de GraphicsContext naar onze metafile-canvas

4. AfterRenderPage finaliseert de metafile, maakt de canvas vrij, voegt een nieuwe HotPDF-pagina toe op mmWidth x mmHeight in PDF-punten en speelt de metafile af via ShowEnhancedMetafile

5. EndJob roept HotPDF.EndDoc aan; als de uitvoer een Stream is, worden de bytes uit het intern geschreven tijdelijke bestand gekopieerd

 

Eigenschappen

FileName - doel-PDF-pad. Wordt gebruikt tenzij SetOutputStream een stream heeft ingesteld

Title / Author / Subject / Keywords - documentmetadata. Wanneer Title leeg is, valt het device terug op FileName zodat de PDF altijd een niet-lege titel heeft

PDFVersion - het PDF-specificatieniveau waarop het document zich moet richten. Standaard pdf17

Compressed - HotPDF-streamcompressie aan (standaard True). Zet False voor diagnostische PDF's

CompressionLevel - FlateDecode-niveau. Standaard clDefault

SetOutputStream(AStream) - stuur de PDF-bytes naar AStream in plaats van naar schijf te schrijven. Roep dit aan vóór het rapport StartJob activeert

 

Typische 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;

 

Behouden mogelijkheden

Vector- en rasterpaginainhoud die door ReportBuilder's standaard draw-command-pijplijn wordt gerenderd. Via GDI opgeloste tekststrings. Standaard 200 DPI-metafileopname, configureerbaar via de geërfde PixelsPerInch, geeft uitvoer van afdrukkwaliteit zonder enorme bestanden

 

Beperkingen van de metafile-brug

Omdat pagina's als enhanced metafiles worden vastgelegd, worden ReportBuilder-specifieke PDF-functies die structurele informatie vereisen (AcroForm-velden, benoemde bestemmingen, outlines, PDF/A- of PDF/X-conformiteitscontroles) niet doorgegeven. De uitvoer is een getrouwe visuele reproductie van wat ReportBuilder rendert, geen gestructureerde PDF

 

Pakketnotitie

Het device staat in Lib\Addons\ReportBuilder\ en maakt geen deel uit van de hoofdpackages HotPDF*.dpk, dus de ReportBuilder-afhankelijkheid wordt alleen meegenomen door projecten die het device expliciet inschakelen. Een smoke test (smoke_pp_hotpdf.dpr) staat naast de unit

 

Zie ook: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Verbeterde EMF/WMF-ondersteuning