ReportBuilder'ın kendi ppPDFDevice'u yerine HotPDF'i alttaki PDF arka ucu olarak kullanan ReportBuilder aygıt sınıfı. HotPDF'i çoktan gömmüş ve uygulamanın tamamında tek bir PDF arka ucu isteyen projeler içindir. Delphi bildirimi: 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 PDFACompliance: string; property PDFXCompliance: string; property Compressed: Boolean; property CompressionLevel: TPDFCompressionLevel; property RenderMode: TppHotPDFRenderMode; end; Açıklama TppHotPDFDevice, TppGraphicsDevice'dan türer (TppCustomScreenDevice / TppImageDevice'un bir üstü); TppReport.PrinterDevice'a atandığında veya bir TppPublisher üzerinde yayıncı aygıtı olarak kullanıldığında ReportBuilder'ın aygıt zincirine oturur. DeviceName 'HotPDF' olarak bildirilir. ReportBuilder'da aygıt kaydı RegisterComponents yerine ppRptDeviceMap üzerinden yapıldığından IDE bileşen paleti girdisi yoktur; çağıranlar TppHotPDFDevice'i doğrudan örnekler. TppGraphicsDevice.ReceivePage üzerinden gelen her sayfa, geçici bir TMetafileCanvas üzerine çizilir (BeforeRenderPage'de oluşturulur, AfterRenderPage'de sonlandırılır). Yakalanan TMetafile daha sonra HotPDF'in ShowEnhancedMetafile otomatik ölçekleme içe aktarıcısına verilir:
1. StartJob, THotPDF örneğini oluşturur, üst veriyi ayarlar ve BeginDoc çağırır. 2. BeforeRenderPage, spWidth x spHeight boyutlarında bir TMetafile ve bir TMetafileCanvas oluşturur ve bunu kalıtsal Canvas olarak ayarlar. 3. RenderPage (kalıtsal), DrawCommands'i gezer ve bunları GraphicsContext üzerinden meta dosya tuvalimize yönlendirir. 4. AfterRenderPage, meta dosyayı sonlandırır (tuvali serbest bırakır), mmWidth x mmHeight boyutlarında (PDF puntolarına çevrilmiş) yeni bir HotPDF sayfası ekler; ardından meta dosyayı ShowEnhancedMetafile ile oynatır ya da RenderMode hprmNativeDrawCommands iken desteklenen çizim komutlarını yerel olarak yazar. 5. EndJob HotPDF.EndDoc çağırır; çıktı bir Stream ise, dahili olarak yazılan geçici dosyadan baytları kopyalar. Property'ler FileName - hedef PDF yolu. SetOutputStream bir stream takmadıysa kullanılır.
Title / Author / Subject / Keywords - belge üst verisi. Title boş olduğunda aygıt FileName'e döner; böylece PDF'in her zaman boş olmayan bir başlığı olur.
PDFVersion - belgenin hedefleyeceği PDF spec düzeyi. Varsayılan pdf17'dir.
PDFACompliance ve PDFXCompliance - HotPDF standart uyumluluk kapılarını üretilen rapor PDF'ine aktarır. Son uyumluluk iddiasına güvenmeden önce çağıranlar, gerekli ICC profilini, OutputIntent'i, etiketlemeyi veya baskı öncesi varlıkları yine normal HotPDF iş akışıyla hazırlar.
Compressed - HotPDF stream sıkıştırması açık (varsayılan True). Tanısal PDF'ler için False yapın.
CompressionLevel - FlateDecode düzeyi. Varsayılan clDefault'dur.
RenderMode - özgün görsel köprü için varsayılanı hprmPageMetafile'dır. Desteklenen ReportBuilder çizim komutlarını doğrudan HotPDF metin, vektör, görüntü ve URI bağlantı işlemlerine eşlemek için hprmNativeDrawCommands ayarlayın. Desteklenmeyen komut içeren sayfalar otomatik olarak meta dosya köprüsüne döner.
SetOutputStream(AStream) - PDF baytlarını diske yazmak yerine AStream'e yönlendirir. Rapor StartJob'ı tetiklemeden önce çağırın.
Tipik iş akışı Dev := TppHotPDFDevice.Create(nil); try Dev.FileName := 'Report.pdf'; Dev.Title := 'Monthly Statement'; Dev.PDFVersion := pdf17; Dev.PDFACompliance := '3B'; Dev.RenderMode := hprmNativeDrawCommands; ppReport1.DeviceType := 'HotPDF'; ppReport1.PrinterDevice := Dev; ppReport1.Print; finally Dev.Free; end; Korunan yetenekler ReportBuilder'ın standart çizim komutu hattının çizdiği vektör ve raster sayfa içeriği. GDI ile çözülmüş metin dizeleri. Varsayılan 200 DPI meta dosya yakalama (kalıtsal PixelsPerInch ile yapılandırılabilir), devasa dosyalar olmadan baskı kalitesi çıktı verir. Yerel çizim komutu kipi; sayfa yalnızca desteklenen komutlar içerdiğinde yaygın metin, şekil, çizgi, görüntü ve URI hiperbağlantı komutlarını doğrudan HotPDF sayfa işlemlerine eşler. Meta dosya köprüsünün sınırlamaları Sayfalar gelişmiş meta dosyalar olarak yakalandığından, yapısal bilgi gerektiren ReportBuilder'a özgü PDF özellikleri (AcroForm alanları, adlandırılmış hedefler ve ana hatlar) aktarılmaz. PDF/A ve PDF/X kapı özellikleri HotPDF'e aktarılır; OutputIntent profilleri gibi standarta özgü varlıklar çağıranın sorumluluğunda kalır. Yerel çizim komutu kipi şu anda yaygın ReportBuilder çizim komut kümesini kapsar; karmaşık özel çiziciler ya da gradyanlar gibi desteklenmeyen komut içeren sayfalarda bilinçli olarak meta dosya köprüsüne döner ve sayfayı kısmen yazmak yerine görsel çıktıyı korur. Paketleme notu Aygıt Lib\Addons\ReportBuilder\ içinde yaşar ve ana HotPDF*.dpk paketlerinin parçası değildir; böylece ReportBuilder bağımlılığını yalnızca aygıta katılan projeler çeker. Birim yanında bir duman testi (smoke_pp_hotpdf.dpr) bulunur. Ayrıca bkz.: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Gelişmiş EMF/WMF desteği |