|
Filter ekspor QuickReport yang memakai HotPDF sebagai backend PDF di bawah alih-alih QRPDFFilter bawaan QuickReport. Ditujukan untuk proyek yang sudah menanam HotPDF dan ingin satu backend PDF di seluruh aplikasi
Deklarasi Delphi:
type
TQRHotPDFExportFilter = class(TQRExportFilter)
public
constructor Create(Filename: string); override;
procedure SetOutputStream(AStream: TStream);
property Title, Author, Subject, Keywords: string;
property PDFVersion: TPDFVersType;
property Compressed: Boolean;
property CompressionLevel: TPDFCompressionLevel;
end;
Deskripsi
TQRHotPDFExportFilter diturunkan dari TQRExportFilter, jadi ia masuk ke alur kerja biasa MyReport.ExportToFilter(MyExporterInstance) tanpa perubahan apa pun pada inti QuickReport. Karena TQRExportFilter bukan turunan TComponent dan hanya kelas biasa dalam desain QuickReport, tidak ada registrasi komponen IDE - pemanggil membuat TQRHotPDFExportFilter langsung lewat Create('out.pdf')
QuickReport merender setiap halaman yang sudah disiapkan ke dalam TMetafile yang disimpan di QRPrinter.PageList. Alih-alih menerapkan ulang seluruh set callback per-komponen TextOut / AcceptGraphic / AcceptBand, adaptor ini mengabaikannya sebagai override tanpa aksi dan mengambil metafile per halaman di Finish:
1 Start(PaperWidth, PaperHeight, Font) - membuat instance THotPDF, menetapkan metadata, memanggil BeginDoc, dan menyimpan (PaperWidth, PaperHeight) agar Finish dapat membentuk halaman dengan benar
2 NewPage / EndPage / TextOut / AcceptGraphic - no-op, karena metafile sudah berisi konten yang dirender
3 Finish - untuk setiap metafile QRPrinter.PageList[i] yang dicache, menambah atau memakai ulang halaman HotPDF berukuran PaperWidth / PaperHeight dalam point dan memanggil ShowEnhancedMetafile. Lalu EndDoc dan melepas sumber daya
Properti
Title / Author / Subject / Keywords - metadata dokumen. Saat Title kosong adaptor akan kembali ke Filename sehingga PDF selalu memiliki judul yang tidak kosong. Setel sebelum ExportToFilter dipanggil
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 ExportToFilter. Secara internal dipakai file sementara karena HotPDF menyimpan pada EndDoc; bytes dikirim balik di Finish
Alur kerja umum
Filter := TQRHotPDFExportFilter.Create('Report.pdf');
try
Filter.Title := 'Monthly Statement';
Filter.PDFVersion := pdf17;
QuickRep1.ExportToFilter(Filter);
finally
Filter.Free;
end;
Kemampuan yang dipertahankan
Konten halaman vektor dan raster dirender lewat pipeline pratinjau / pencetakan standar QuickReport. String teks diselesaikan oleh GDI. Ukuran halaman mengikuti PaperWidth / PaperHeight yang diberikan QuickReport ke Start
Batasan bridge metafile
Karena halaman ditangkap sebagai enhanced metafile, fitur PDF khusus QuickReport 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 QuickReport, bukan PDF terstruktur
Catatan paket
Adaptor ini berada di Lib\Addons\QuickReport\ dan bukan bagian dari paket utama HotPDF*.dpk, jadi dependensi QuickReport hanya ikut terambil oleh proyek yang memilih adaptor ini. Ada smoke test (smoke_qr_hotpdf.dpr) di sebelah unitnya
Lihat juga: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Dukungan EMF/WMF yang Ditingkatkan
|