|
کلاس دستگاه ReportBuilder که بهجای ppPDFDevice خود ReportBuilder از HotPDF بهعنوان پشتوانه PDF استفاده میکند. این adapter برای پروژههایی است که از قبل HotPDF را در خود دارند و یک پشتوانه PDF واحد برای کل برنامه میخواهند
اعلان 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;
توضیح
TppHotPDFDevice از TppGraphicsDevice مشتق میشود (یک سطح بالاتر از TppCustomScreenDevice / TppImageDevice)، بنابراین وقتی به TppReport.PrinterDevice نسبت داده شود یا بهعنوان دستگاه انتشار روی TppPublisher استفاده شود، در زنجیره دستگاه ReportBuilder جا میگیرد. DeviceName بهصورت 'HotPDF' گزارش میشود. چون ثبت دستگاه در ReportBuilder از طریق ppRptDeviceMap انجام میشود نه RegisterComponents، هیچ ورودی در پالت مؤلفه IDE وجود ندارد و فراخوانندهها TppHotPDFDevice را مستقیماً نمونهسازی میکنند
هر صفحهای که از طریق TppGraphicsDevice.ReceivePage میرسد روی یک TMetafileCanvas موقتی ترسیم میشود (در BeforeRenderPage ساخته و در AfterRenderPage نهایی میشود). سپس TMetafile ضبطشده به واردکننده خودمقیاس HotPDF یعنی ShowEnhancedMetafile داده میشود:
1. StartJob نمونه THotPDF را میسازد، فراداده را تنظیم میکند و BeginDoc را فراخوانی میکند
2. BeforeRenderPage یک TMetafile با اندازه spWidth x spHeight بهعلاوه یک TMetafileCanvas میسازد و آن را بهعنوان Canvas ارثبریشده تنظیم میکند
3. RenderPage (ارثبریشده) DrawCommands را پیمایش میکند و آنها را از طریق GraphicsContext روی بوم metafile ما میفرستد
4. AfterRenderPage metafile را نهایی میکند (canvas را آزاد میکند)، یک صفحه جدید HotPDF با اندازه mmWidth x mmHeight میافزاید (که به pointهای PDF تبدیل شدهاند)، و metafile را از طریق ShowEnhancedMetafile پخش میکند
5. EndJob HotPDF.EndDoc را فراخوانی میکند؛ اگر خروجی یک Stream باشد، بایتها را از فایل موقتی که در داخل نوشته شده کپی میکند
ویژگیها
FileName - مسیر هدف PDF. مگر اینکه SetOutputStream یک جریان نصب کرده باشد، از همین مسیر استفاده میشود
Title / Author / Subject / Keywords - فراداده سند. وقتی Title خالی باشد، دستگاه به FileName برمیگردد تا PDF همیشه یک عنوان غیرخالی داشته باشد
PDFVersion - سطح مشخصات PDF که سند باید هدف بگیرد. مقدار پیشفرض pdf17 است
Compressed - فشردهسازی جریان HotPDF روشن است (پیشفرض True). برای PDFهای تشخیصی False را بگذارید
CompressionLevel - سطح FlateDecode. مقدار پیشفرض clDefault است
SetOutputStream(AStream) - بایتهای PDF را بهجای نوشتن روی دیسک به AStream هدایت میکند. این کار را پیش از StartJob گزارش انجام دهید
گردشکار معمول
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;
قابلیتهای حفظشده
محتوای برداری و شطرنجی صفحه که توسط خط لوله استاندارد فرمانهای ترسیم ReportBuilder رندر میشود. رشتههای متنی حلشده توسط GDI. ضبط پیشفرض متافایل با 200 DPI (قابل تنظیم از طریق PixelsPerInch ارثبریشده) خروجی با کیفیت چاپ را بدون فایلهای بسیار حجیم فراهم میکند
محدودیتهای پل متافایل
چون صفحات بهصورت enhanced metafile ضبط میشوند، ویژگیهای PDF خاص ReportBuilder که به اطلاعات ساختاری نیاز دارند (فیلدهای AcroForm، مقصدهای نامدار، outlineها، دروازههای انطباق PDF/A یا PDF/X) منتقل نمیشوند. خروجی یک بازنمایی بصری دقیق از چیزی است که ReportBuilder رندر میکند، نه یک PDF ساختاریافته
یادداشت بستهبندی
این دستگاه در Lib\Addons\ReportBuilder\ قرار دارد و بخشی از بستههای اصلی HotPDF*.dpk نیست، بنابراین وابستگی ReportBuilder فقط توسط پروژههایی وارد میشود که این دستگاه را انتخاب میکنند. یک smoke test (smoke_pp_hotpdf.dpr) هم کنار این واحد قرار دارد
همچنین ببینید: TfrxHotPDFExport, TQRHotPDFExportFilter, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, پشتیبانی پیشرفته EMF/WMF
|