TQRHotPDFExportFilter

QuickReport adapter (Lib\Addons\QuickReport\qrHotPDFExport.pas)

 

FastReport adapter  ReportBuilder device  DevExpress adapter

فیلتر خروجی 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