dxHotPDFExportReportLink

DevExpress ExpressPrinting System adapter (Lib\Addons\DevExpress\dxHotPDFExport.pas)

 

FastReport adapter  QuickReport adapter  ReportBuilder device

Adapter خروجی PDF برای DevExpress ExpressPrinting System (XtraPrinting / XtraReports / cxGrid printable links و موارد مشابه) که به جای emitter داخلی DevExpress یعنی dxPSExportToPDF / TdxPSPDFExport از HotPDF به عنوان backend اصلی PDF استفاده می‌کند. این adapter برای پروژه‌هایی در نظر گرفته شده که از قبل HotPDF را در خود دارند و یک backend واحد PDF برای کل برنامه می‌خواهند

 

رکورد گزینه‌ها:

type

  TdxHotPDFExportOptions = record

    Title, Author, Subject, Keywords: string;

    PDFVersion : TPDFVersType;  // default pdf17

    Compression: TPDFCompressionLevel;  // default clDefault

    RenderDPI  : Integer;  // default 200

  end;

 

function dxHotPDFDefaultOptions: TdxHotPDFExportOptions;

 

نقطه‌های ورود مبتنی بر فایل:

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToFile(

  AReportLink: TBasedxReportLink;

  const AOutputFileName: string): Boolean; overload;

 

نقطه‌های ورود مبتنی بر stream:

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream;

  const AOptions: TdxHotPDFExportOptions): Boolean; overload;

function dxHotPDFExportReportLinkToStream(

  AReportLink: TBasedxReportLink;

  AOutputStream: TStream): Boolean; overload;

 

توضیح

سیستم چاپ DevExpress بر TBasedxReportLink متمرکز است - لینک انتزاعی‌ای که یک مؤلفه قابل چاپ (cxGrid، cxRichEdit، cxScheduler، cxPivotGrid و مشابه آن‌ها) را به TdxComponentPrinter متصل می‌کند. printer / link صفحه‌ها را می‌سازد و سپس یک روش protected به نام PaintPage(ACanvas, APageBounds, APageIndex, AContinuousIndex, AZoomFactor) در اختیار می‌گذارد که یک صفحه را روی هر TCanvas ترسیم می‌کند

 

این adapter حلقه موجود در TdxPSPDFReportExportProvider.Build خود DevExpress را بازتاب می‌دهد، اما به جای فرستادن خروجی PaintPage به یک PDF canvas در DevExpress، آن را به TMetafileCanvas می‌فرستد. metafile حاصل سپس به importer خودمقیاس‌پذیر ShowEnhancedMetafile در HotPDF داده می‌شود:

 

1. فراخواننده dxHotPDFExportReportLinkToFile یا dxHotPDFExportReportLinkToStream را با TBasedxReportLink آماده‌شده فراخوانی می‌کند

2. adapter متد AReportLink.RebuildReport را برای ساختن صفحه‌ها فراخوانی می‌کند

3. برای هر index صفحه، از link مقدار RenderInfo.GetActualPageRenderInfo را می‌گیرد، اندازهٔ صفحه را بر حسب pointهای PDF محاسبه می‌کند (با استفاده از نسبت PointsPerInch / UnitsPerInch خود DevExpress)، یک TMetafile را با render DPI انتخاب‌شده می‌سازد و صفحه را از طریق PaintPage(MetaCanvas, ...) رندر می‌کند

4. یک صفحهٔ جدید HotPDF اضافه می‌شود (یا نخستین صفحهٔ خودکارِ ایجادشده دوباره استفاده می‌شود)، با ابعاد point محاسبه‌شده اندازه‌گذاری می‌شود و metafile از طریق ShowEnhancedMetafile پخش می‌شود

5. HotPDF.EndDoc فایل PDF را می‌نویسد؛ برای overloadهای stream، فایل موقت سپس در TStream ارائه‌شده توسط فراخواننده کپی می‌شود

 

گزینه‌ها

Title / Author / Subject / Keywords - فراداده سند. وقتی Title خالی باشد adapter ابتدا به AReportLink.ReportTitle.Text و سپس به AReportLink.Name برمی‌گردد تا PDF همیشه یک عنوان غیرخالی داشته باشد

PDFVersion - سطح مشخصات PDF که سند باید هدف بگیرد. مقدار پیش‌فرض pdf17 است

Compression - سطح FlateDecode. مقدار پیش‌فرض clDefault است

RenderDPI - چگالی پیکسلی که هنگام rasterising هر صفحه از طریق TMetafileCanvas استفاده می‌شود. مقدار بالاتر متن و خطوط را واضح‌تر می‌کند اما metafile و PDF را بزرگ‌تر می‌سازد. 200 (پیش‌فرض) خروجی هم‌سطح چاپ می‌دهد بدون فایل‌های بسیار بزرگ. مقادیر ≤ 0 به 200 clamp می‌شوند

 

گردش‌کار معمول

 

dxComponentPrinter1.CurrentLink := cxGridReportLink1;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf');

 

یا با گزینه‌های سفارشی:

 

Opts := dxHotPDFDefaultOptions;

Opts.Title := 'Q1 Sales';

Opts.RenderDPI := 300;

dxHotPDFExportReportLinkToFile(cxGridReportLink1, 'Grid.pdf', Opts);

 

خانواده‌های لینک پشتیبانی‌شده

هر زیرکلاس از TBasedxReportLink. این شامل cxGrid، cxRichEdit، cxScheduler، cxPivotGrid و هر لینک سفارشی مشتق‌شده از همان کلاس پایه می‌شود. این adapter به نوع خاص لینک وابسته نیست چون قرارداد PaintPage روی کلاس پایه تعریف شده است

 

قابلیت‌های حفظ‌شده

محتوای صفحهٔ برداری و raster که هر خانوادهٔ لینک DevExpress صادر می‌کند (cxGrid، cxScheduler، cxRichEdit، cxPivotGrid، لینک‌های سفارشی). رشته‌های متنی resolve شده توسط GDI (DevExpress متن را از طریق TCanvas رندر می‌کند؛ metafile فراخوانی‌های GDI text را به‌دقت ثبت می‌کند)

 

محدودیت‌های پل metafile

چون صفحه‌ها به‌صورت enhanced metafile capture می‌شوند، featureهای ویژهٔ PDF در DevExpress که به اطلاعات ساختاری نیاز دارند (فیلدهای تعاملی AcroForm، مقصدهای نام‌دار، bookmark / outline، دروازه‌های انطباق PDF/A یا PDF/X) منتقل نمی‌شوند. خروجی بازتولید بصری دقیقی از چیزی است که DevExpress رندر می‌کند، نه یک PDF ساختاریافته

 

یادداشت بسته‌بندی

این adapter در Lib\Addons\DevExpress\ قرار دارد و بخشی از packageهای اصلی HotPDF*.dpk نیست، بنابراین dependencyِ DevExpress ExpressPrinting فقط توسط پروژه‌هایی وارد می‌شود که این adapter را opt in کنند. یک smoke test (smoke_dx_hotpdf.dpr) کنار همان unit قرار دارد

 

همچنین ببینید: TfrxHotPDFExport, TQRHotPDFExportFilter, TppHotPDFDevice, THPDFPage.ShowMetafile, پشتیبانی Enhanced EMF/WMF