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