|
فیلتر خروجی QuickReport که بهجای QRPDFFilter خود QuickReport از HotPDF بهعنوان پشتوانه PDF استفاده میکند. این adapter برای پروژههایی است که از قبل HotPDF را در خود دارند و یک پشتوانه PDF واحد برای کل برنامه میخواهند
اعلان 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;
توضیح
TQRHotPDFExportFilter از TQRExportFilter مشتق میشود، بنابراین بدون هیچ تغییر در هسته QuickReport در گردشکار معمول MyReport.ExportToFilter(MyExporterInstance) جا میگیرد. چون TQRExportFilter فرزند TComponent نیست و در طراحی QuickReport یک کلاس ساده است، هیچ ثبت مؤلفهای در IDE وجود ندارد و فراخوانندهها TQRHotPDFExportFilter را مستقیماً با Create('out.pdf') نمونهسازی میکنند
QuickReport هر صفحه آماده را در یک TMetafile که در QRPrinter.PageList کش شده است رندر میکند. بهجای بازپیادهسازی کامل مجموعه callbackهای TextOut / AcceptGraphic / AcceptBand برای هر مؤلفه، این adapter آنها را نادیده میگیرد (overrideهای no-op) و متافایلهای هر صفحه را در Finish برداشت میکند:
1. Start(PaperWidth, PaperHeight, Font) - نمونه THotPDF را ایجاد میکند، فراداده را تنظیم میکند، BeginDoc را فرا میخواند و (PaperWidth, PaperHeight) را ذخیره میکند تا Finish بتواند صفحهها را درست شکل بدهد
2. NewPage / EndPage / TextOut / AcceptGraphic - no-op است چون متافایل از قبل محتوای رندرشده را دارد
3. Finish - برای هر متافایل کششده QRPrinter.PageList[i] یک صفحه HotPDF با اندازه PaperWidth / PaperHeight بر حسب point اضافه میکند (یا دوباره استفاده میکند) و ShowEnhancedMetafile را فرا میخواند. سپس EndDoc را اجرا و منابع را آزاد میکند
ویژگیها
Title / Author / Subject / Keywords - فراداده سند. وقتی Title خالی باشد، adapter به Filename برمیگردد تا PDF همیشه یک عنوان غیرخالی داشته باشد. این مقدارها را پیش از فراخوانی ExportToFilter تنظیم کنید
PDFVersion - سطح مشخصات PDF که سند باید هدف بگیرد. مقدار پیشفرض pdf17 است
Compressed - فشردهسازی جریان HotPDF روشن است (پیشفرض True). برای PDFهای تشخیصی False را بگذارید
CompressionLevel - سطح FlateDecode. مقدار پیشفرض clDefault است
SetOutputStream(AStream) - بایتهای PDF را بهجای نوشتن روی دیسک به AStream هدایت میکند. این کار را پیش از ExportToFilter انجام دهید. درونسازی از فایل موقت استفاده میکند چون HotPDF در EndDoc ذخیره میکند و بایتها در Finish به جریان برمیگردند
گردشکار معمول
Filter := TQRHotPDFExportFilter.Create('Report.pdf');
try
Filter.Title := 'Monthly Statement';
Filter.PDFVersion := pdf17;
QuickRep1.ExportToFilter(Filter);
finally
Filter.Free;
end;
قابلیتهای حفظشده
محتوای برداری و شطرنجی صفحه که توسط خط لوله استاندارد پیشنمایش / چاپ QuickReport رندر میشود. رشتههای متنی حلشده توسط GDI. اندازه صفحه از PaperWidth / PaperHeight که QuickReport به Start میدهد پیروی میکند
محدودیتهای پل متافایل
چون صفحات بهصورت enhanced metafile ضبط میشوند، ویژگیهای PDF خاص QuickReport که به اطلاعات ساختاری نیاز دارند (فیلدهای AcroForm، مقصدهای نامدار، outlineها، دروازههای انطباق PDF/A یا PDF/X) منتقل نمیشوند. خروجی یک بازنمایی بصری دقیق از چیزی است که QuickReport رندر میکند، نه یک PDF ساختاریافته
یادداشت بستهبندی
این adapter در Lib\Addons\QuickReport\ قرار دارد و بخشی از بستههای اصلی HotPDF*.dpk نیست، بنابراین وابستگی QuickReport فقط توسط پروژههایی وارد میشود که این adapter را انتخاب میکنند. یک smoke test (smoke_qr_hotpdf.dpr) هم کنار این واحد قرار دارد
همچنین ببینید: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, پشتیبانی پیشرفته EMF/WMF
|