|
Filtro de exportación de QuickReport que usa HotPDF como backend PDF subyacente en lugar del propio QRPDFFilter de QuickReport. Pensado para proyectos que ya integran HotPDF y quieren un único backend PDF en toda la aplicación
Delphi declaration:
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;
Descripción
TQRHotPDFExportFilter desciende de TQRExportFilter, así que encaja en el flujo normal MyReport.ExportToFilter(MyExporterInstance) sin cambios en el núcleo de QuickReport. Como TQRExportFilter no desciende de TComponent (es una clase simple en el diseño de QuickReport), no hay registro de componente en el IDE; los llamadores instancian TQRHotPDFExportFilter directamente mediante Create('out.pdf')
QuickReport renderiza cada página preparada en un TMetafile guardado en QRPrinter.PageList. En lugar de volver a implementar todo el conjunto de callbacks por componente TextOut / AcceptGraphic / AcceptBand, el adaptador ignora esos métodos (sobrescrituras sin operación) y recoge los metarchivos por página en Finish:
1. Start(PaperWidth, PaperHeight, Font) - crear la instancia de THotPDF, establecer los metadatos, llamar a BeginDoc y guardar (PaperWidth, PaperHeight) para que Finish pueda dar forma correcta a las páginas
2. NewPage / EndPage / TextOut / AcceptGraphic - sin efecto (el metafile ya contiene el contenido renderizado)
3. Finish - para cada metafile almacenado en QRPrinter.PageList[i], agregar o reutilizar una página HotPDF del tamaño PaperWidth / PaperHeight en puntos y llamar a ShowEnhancedMetafile. Luego EndDoc y liberar
Propiedades
Title / Author / Subject / Keywords - metadatos del documento. Cuando Title está vacío, el adaptador recurre a Filename para que el PDF siempre tenga un título no vacío. Debe establecerse antes de llamar a ExportToFilter
PDFVersion - PDF specification level the document should target. Defaults to pdf17
Compressed - HotPDF stream compression on (default True). Set False for diagnostic PDFs
CompressionLevel - FlateDecode level. Defaults to clDefault
SetOutputStream(AStream) - envía los bytes PDF a AStream en lugar de escribirlos en disco. Llámese antes de ExportToFilter. Internamente se usa un archivo temporal porque HotPDF guarda al ejecutar EndDoc; los bytes se devuelven mediante secuencia en Finish
Flujo de trabajo típico
Filter := TQRHotPDFExportFilter.Create('Report.pdf');
try
Filter.Title := 'Monthly Statement';
Filter.PDFVersion := pdf17;
QuickRep1.ExportToFilter(Filter);
finally
Filter.Free;
end;
Capacidades preservadas
Contenido de página vectorial y rasterizado renderizado por la canalización estándar de vista previa / impresora de QuickReport. Cadenas de texto resueltas por GDI. El tamaño de página sigue los valores PaperWidth / PaperHeight que QuickReport entrega a Start
Limitaciones del puente de metarchivos
Como las páginas se capturan como metarchivos mejorados, no se propagan las funciones PDF específicas de QuickReport que requieren información estructural (campos AcroForm, destinos con nombre, esquemas, controles de conformidad PDF/A o PDF/X). La salida es una reproducción visual fiel de lo que renderiza QuickReport, no un PDF estructurado
Nota de empaquetado
El adaptador vive en Lib\Addons\QuickReport\ y no forma parte de los paquetes principales HotPDF*.dpk, así que la dependencia de QuickReport solo entra en los proyectos que optan por el adaptador. Hay una prueba de humo (smoke_qr_hotpdf.dpr) junto a la unidad
Ver también: TfrxHotPDFExport, TppHotPDFDevice, dxHotPDFExportReportLink, THPDFPage.ShowMetafile, Soporte EMF/WMF mejorado
|