|
ReportBuilder-enhetsklasse som bruker HotPDF som underliggende PDF-bakende i stedet for ReportBuilders egen ppPDFDevice. Ment for prosjekter som allerede inneholder HotPDF og vil ha én PDF-bakende for hele programmet
Delphi-erklæring:
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;
Beskrivelse
TppHotPDFDevice arver fra TppGraphicsDevice (ett nivå over TppCustomScreenDevice / TppImageDevice), så den passer inn i ReportBuilders enhetskjede når den tilordnes TppReport.PrinterDevice eller brukes som publiseringsenhet på en TppPublisher. DeviceName rapporteres som 'HotPDF'. Fordi enhetsregistrering i ReportBuilder gjøres via ppRptDeviceMap i stedet for RegisterComponents, finnes det ingen IDE-oppføring i komponentpaletten - kallere instansierer TppHotPDFDevice direkte
Hver side som kommer gjennom TppGraphicsDevice.ReceivePage tegnes på en midlertidig TMetafileCanvas (opprettet i BeforeRenderPage, ferdigstilt i AfterRenderPage). Den innsamlede TMetafile-en mates deretter til HotPDFs auto-skalering-importør ShowEnhancedMetafile:
1. StartJob oppretter THotPDF-instansen, setter metadata og kaller BeginDoc
2. BeforeRenderPage oppretter en TMetafile med størrelsen spWidth x spHeight pluss en TMetafileCanvas, og setter den som den nedarvede Canvas
3. RenderPage (nedarvet) går gjennom DrawCommands og sender dem via GraphicsContext til metafile-flaten vår
4. AfterRenderPage fullfører metafilen (frigjør canvas), legger til en ny HotPDF-side med størrelsen mmWidth x mmHeight (konvertert til PDF-punkter), og spiller av metafilen via ShowEnhancedMetafile
5. EndJob kaller HotPDF.EndDoc; hvis utdata er en Stream, kopieres bytene fra tempfilen som ble skrevet internt
Egenskaper
FileName - mål-PDF-bane. Brukes med mindre SetOutputStream har satt opp en strøm
Title / Author / Subject / Keywords - dokumentmetadata. Når Title er tom, faller enheten tilbake til FileName slik at PDF-en alltid får en ikke-tom tittel
PDFVersion - PDF-spesifikasjonsnivået dokumentet skal sikte mot. Standard er pdf17
Compressed - slår på HotPDF-strømkomprimering (standard True). Sett False for diagnostiske PDF-er
CompressionLevel - FlateDecode-nivå. Standard er clDefault
SetOutputStream(AStream) - ruter PDF-bytene til AStream i stedet for å skrive til disk. Kalles før rapporten utløser StartJob
Typisk arbeidsflyt
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;
Bevarte egenskaper
Vektor- og rastersideinnhold rendres av ReportBuilders standard tegnekommando-pipeline. Tekststrenger løst via GDI. Standard fangst av metafiler på 200 DPI (kan justeres via den arvede PixelsPerInch) gir utskrift i god kvalitet uten enorme filer
Begrensninger i metafile-broen
Fordi sider fanges som forbedrede metafiler, blir ikke ReportBuilder-spesifikke PDF-funksjoner som krever strukturell informasjon (AcroForm-felt, navngitte mål, disposisjoner, PDF/A- eller PDF/X-samsvarskontroller) videreført. Resultatet er en tro visuell gjengivelse av det ReportBuilder rendrer, ikke en strukturert PDF
Pakkeringsnotat
Enheten ligger i Lib\Addons\ReportBuilder\ og er ikke en del av hovedpakkene HotPDF*.dpk, så ReportBuilder-avhengigheten tas bare inn av prosjekter som velger å bruke enheten. En røyktest (smoke_pp_hotpdf.dpr) ligger ved siden av enheten
Se også: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Støtte for forbedret EMF/WMF
|