|
Filtr eksportu PDF FastReport 4 / FastReport VCL, który używa HotPDF jako bazowego backendu PDF zamiast wbudowanego writer PDF FastReport. Przeznaczony dla projektów, które już osadzają HotPDF i chcą jednego backendu PDF w całej aplikacji
Deklaracja Delphi:
type
TfrxHotPDFExport = class(TfrxCustomExportFilter)
published
property Compressed: Boolean default True;
property Title, Author, Subject, Keywords: string;
property PageRange: string;
property PDFVersion: TPDFVersType default pdf17;
property PDFACompliance: string;
property PDFXCompliance: string;
property CompressionLevel: TPDFCompressionLevel default clDefault;
property RenderDPI: Integer default 200;
property ExportMode: TfrxHotPDFExportMode default hemPageMetafile;
property AutoCreateURL: Boolean default False;
property FontEmbedding: Boolean default True;
property NotEmbeddedFonts: TStrings;
property ActivateProtection: Boolean default False;
property UserPassword, OwnerPassword: string;
property CryptKeyLength: THPDFKeyType default k40;
property ProtectOptions: THPDFProtectOptions default [];
property EncryptMetadata: Boolean default True;
property DialogDefaultFileName, DialogFilter, DialogTitle: string;
end;
Opis
TfrxHotPDFExport wywodzi się z TfrxCustomExportFilter, więc wchodzi do zwykłego workflow MyReport.Export(MyExportInstance) bez żadnych zmian w rdzeniu FastReport. Jednostka woła RegisterComponents('FastReport 4.0 Export Filters', [TfrxHotPDFExport]), więc filtr pojawi się na palecie komponentów IDE, jak tylko dodasz jednostkę do pakietu
Gdy ShowDialog jest True i nie ustawiono wyjściowego strumienia, eksport pyta o plik oknem zapisu. DialogDefaultFileName wypełnia nazwę pliku (puste: FileName, potem Title, potem nazwa raportu), DialogFilter ustawia listę typów plików (puste: pliki PDF i wszystkie pliki), a DialogTitle podpis okna (puste: Export to PDF). Przy cichym eksporcie nie mają znaczenia
Adapter może eksportować jednym z trzech trybów:
1. Start tworzy świeżą instancję THotPDF i ustawia metadane dokumentu (Title / Author / Subject / Keywords / PDFVersion / Compression) 2. PageRange opcjonalnie filtruje strony FastReport, zanim obiekty stron HotPDF zostaną wymiarowane albo wypełnione 3. StartPage wymiarowuje nową stronę HotPDF w punktach tak, by pasowała do milimetrowych wymiarów strony raportu FastReport 4. hemPageMetafile zachowuje oryginalną ścieżkę przechwytywania podglądu całej strony i importuje ją przez ShowEnhancedMetafile 5. hemObjectCanvas prosi FastReport o narysowanie każdego przygotowanego widoku do pośredniego metafile strony, zanim HotPDF zaimportuje tę stronę 6. hemNativeObjects mapuje obsługiwane przygotowane widoki bezpośrednio na wywołania stron HotPDF dla zaznaczalnego tekstu memo z tłem, wyrównaniem, clipowaniem, odstępami znaków i stylami ramki, image XObject obrazów rastrowych, prostą geometrią kształtów, kreskami linii i adnotacjami URL widoków 7. Finish woła EndDoc i w razie potrzeby kopiuje tymczasowy PDF do dostarczonego Stream Właściwości Compressed - kompresja strumieni HotPDF włączona (domyślnie True). Ustaw False dla PDF-ów diagnostycznych (~5x większe pliki).
Title / Author / Subject / Keywords - metadane dokumentu. Gdy Title jest puste, adapter schodzi do Report.Name, więc PDF zawsze ma niepusty tytuł
PageRange - opcjonalny filtr stron od jedynki o składni takiej jak operacje stron HotPDF, np. 1, 1,3-5, albo pusty string dla wszystkich stron
PDFVersion - poziom specyfikacji PDF, jaki dokument ma realizować. Domyślnie pdf17
PDFACompliance i PDFXCompliance - przepuszczają bramki zgodności ze standardami HotPDF do generowanego PDF-a raportu. Wywołujący nadal przygotowuje wymagany profil ICC, OutputIntent, tagowanie albo zasoby poligraficzne normalnym workflow HotPDF, zanim oprze się na końcowej deklaracji zgodności
CompressionLevel - poziom FlateDecode. Domyślnie clDefault
RenderDPI - gęstość pikseli używana przy rastrowaniu strony FastReport przez TMetafileCanvas. Wyższa = ostrzejszy tekst i linie, ale większy metafile i PDF. 96 to natywne ekranowe DPI FastReport; 200 (domyślne) daje jakość druku bez gigantycznych plików
ExportMode - wybiera eksport całej strony jako metafile, eksport per obiekt na canvas albo eksport natywnych obiektów dla aktualnie mapowanych klas widoków FastReport
AutoCreateURL - przekazuje do THotPDF.AutoCreateURL, żeby natywny tekst memo mógł tworzyć adnotacje URI dla wykrytych URL-i
FontEmbedding i NotEmbeddedFonts - przekazują zwykłą politykę osadzania fontów HotPDF do generowanego PDF-a raportu
ActivateProtection, UserPassword, OwnerPassword, CryptKeyLength, ProtectOptions i EncryptMetadata - przekazują ustawienia zabezpieczenia hasłem HotPDF, gdy wymagane jest szyfrowane wyjście raportu
Typowy workflow Exp := TfrxHotPDFExport.Create(nil); try Exp.FileName := 'Report.pdf'; Exp.Title := 'Monthly Statement'; Exp.PDFVersion := pdf17; Exp.PDFACompliance := '3B'; Exp.PageRange := '1,3-5'; Exp.RenderDPI := 200; Exp.ExportMode := hemNativeObjects; Exp.AutoCreateURL := True; Exp.FontEmbedding := True; Exp.NotEmbeddedFonts.Add('Courier New'); Exp.ActivateProtection := True; Exp.CryptKeyLength := aes256; Exp.OwnerPassword := 'owner'; Exp.UserPassword := 'viewer'; Exp.ProtectOptions := [prPrint, prInformationCopy]; frxReport1.Export(Exp); finally Exp.Free; end; Zachowywane możliwości Tryby całej strony i object-canvas zachowują wektorową i rastrową treść stron renderowaną przez standardowy silnik składu FastReport. Tryb native-object aktualnie zachowuje obsługiwany tekst memo jako tekst PDF z tłem, wyrównaniem poziomym i pionowym oraz stylami ramki; widoki obrazów jako image XObject; proste kształty jako geometrię PDF; widoki linii jako kreski; a URL-e widoków jako adnotacje linków URI Ograniczenia Funkcje PDF specyficzne dla FastReport, które wymagają dodatkowego mapowania strukturalnego (pola AcroForm, nazwane destynacje i konspekt dokumentu), nie są przenoszone przez ten adapter. Właściwości bramek PDF/A i PDF/X są przekazywane do HotPDF, ale zasoby specyficzne dla standardów, takie jak profile OutputIntent, pozostają odpowiedzialnością wywołującego Uwaga o pakowaniu Adapter jest dystrybuowany jako add-on opt-in, a nie zależność głównych pakietów HotPDF*.dpk, więc projekty bez FastReport nie ciągną jednostek FastReport Zobacz też: TQRHotPDFExportFilter, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Enhanced EMF/WMF Support |