|
Kelas perangkat ReportBuilder yang memakai HotPDF sebagai backend PDF di bawah alih-alih ppPDFDevice bawaan ReportBuilder. Ditujukan untuk proyek yang sudah menanam HotPDF dan ingin satu backend PDF di seluruh aplikasi
Deklarasi 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;
Deskripsi
TppHotPDFDevice mewarisi TppGraphicsDevice (satu level di atas TppCustomScreenDevice / TppImageDevice), sehingga masuk ke rantai perangkat ReportBuilder saat ditetapkan ke TppReport.PrinterDevice atau dipakai sebagai perangkat penerbit pada TppPublisher. DeviceName dilaporkan sebagai 'HotPDF'. Karena pendaftaran perangkat di ReportBuilder dilakukan melalui ppRptDeviceMap alih-alih RegisterComponents, tidak ada entri palet komponen IDE - pemanggil membuat instance TppHotPDFDevice secara langsung
Setiap halaman yang melewati TppGraphicsDevice.ReceivePage digambar ke TMetafileCanvas sementara yang dibuat di BeforeRenderPage dan dituntaskan di AfterRenderPage. TMetafile yang tertangkap lalu diteruskan ke pengimpor penskalaan otomatis HotPDF ShowEnhancedMetafile:
1 StartJob membuat instance THotPDF, menetapkan metadata, lalu memanggil BeginDoc
2 BeforeRenderPage membuat TMetafile berukuran spWidth x spHeight beserta TMetafileCanvas, lalu menjadikannya Canvas turunan
3 RenderPage bawaan menelusuri DrawCommands dan meneruskannya melalui GraphicsContext ke kanvas metafile kami
4 AfterRenderPage menuntaskan metafile, membebaskan kanvas, menambahkan halaman HotPDF baru berukuran mmWidth x mmHeight yang sudah dikonversi ke titik PDF, lalu memutar metafile lewat ShowEnhancedMetafile
5 EndJob memanggil HotPDF.EndDoc; jika keluarannya berupa Stream, bytes disalin dari file sementara yang ditulis di dalam
Properti
FileName - path PDF tujuan. Dipakai kecuali SetOutputStream sudah memasang stream
Title / Author / Subject / Keywords - metadata dokumen. Saat Title kosong perangkat akan kembali ke FileName sehingga PDF selalu memiliki judul yang tidak kosong
PDFVersion - level spesifikasi PDF yang menjadi target dokumen. Default pdf17
Compressed - kompresi stream HotPDF aktif, default True. Set False untuk PDF diagnostik
CompressionLevel - level FlateDecode. Default clDefault
SetOutputStream(AStream) - arahkan bytes PDF ke AStream alih-alih menulis ke disk. Panggil sebelum report memicu StartJob
Alur kerja umum
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;
Kemampuan yang dipertahankan
Konten halaman vektor dan raster dirender lewat pipeline draw-command standar ReportBuilder. String teks diselesaikan oleh GDI. Penangkapan metafile 200 DPI bawaan, yang dapat diatur lewat PixelsPerInch turunan, memberi keluaran kualitas cetak tanpa file yang membengkak
Batasan bridge metafile
Karena halaman ditangkap sebagai enhanced metafile, fitur PDF khusus ReportBuilder yang memerlukan informasi struktural (field AcroForm, named destination, outline, atau gerbang kepatuhan PDF/A maupun PDF/X) tidak ikut terbawa. Keluaran merupakan reproduksi visual yang setia dari apa yang dirender ReportBuilder, bukan PDF terstruktur
Catatan paket
Perangkat ini berada di Lib\Addons\ReportBuilder\ dan bukan bagian dari paket utama HotPDF*.dpk, jadi dependensi ReportBuilder hanya ikut terambil oleh proyek yang memilih perangkat ini. Ada smoke test (smoke_pp_hotpdf.dpr) di sebelah unitnya
Lihat juga: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Dukungan EMF/WMF yang Ditingkatkan
|