Steema's TChart in Delphi en C++Builder rendert grafieken als GDI/GDI+-tekeningen. Om die visuele weergave in een PDF te krijgen, moet u het uitvoerformaat met aandacht overdragen. U kunt de grafiek naar een bitmap exporteren, maar dit resulteert in pixelige tekst en lijnen wanneer erop wordt ingezoomd, plus een grote bestandsgrootte. De superieure aanpak, die volledig wordt ondersteund door THotPDF, is exporteren als een Enhanced Metafile (EMF). Hierdoor blijven de lijnen, polygonen en tekst als vectorinstructies behouden, die THotPDF naadloos vertaalt naar eigen PDF-tekenoperatoren. De resulterende PDF blijft scherp op elk zoomniveau
De tussenliggende Metafile maken
De TeeChart-bibliotheek biedt een methode, TeeCreateMetafile (beschikbaar in de TeeProcs- of TeEngine-unit, afhankelijk van uw TeeChart-versie), die nauwkeurig de GDI-aanroepen voor de grafiek genereert en deze bundelt in een metafile-object
uses
Vcl.Graphics, TeeProcs;
function GetChartMetafile(AChart: TCustomTeePanel): TMetafile;
begin
// Set the second parameter to match the chart's current dimensions,
// or define a custom TRect to change the output proportions.
Result := AChart.TeeCreateMetafile(False, AChart.ClientRect);
end;
Zodra de grafiek as TMetafile is gerenderd, heeft u de grafiek overgebracht van het specifieke objectmodel van TeeChart naar de standaard GDI-vectorweergave van Windows, klaar voor inbedding
De Metafile in de PDF tekenen
De VCL-canvaswrapper van THotPDF handelt metafile-records autonoom af en vertaalt GDI-lijn-, -vul- en -teksttekenopdrachten naar equivalente PDF-structuren. U gebruikt eenvoudig DrawMetaFile. Eén belangrijk detail hierbij is positionering: u geeft de afmetingen en schaal binnen de PDF op, en het metafile tekent dienovereenkomstig
procedure ExportChartToPDF(AChart: TCustomTeePanel; const FileName: string);
var
HotPDF: THotPDF;
Meta: TMetafile;
begin
HotPDF := THotPDF.Create(nil);
try
HotPDF.BeginDoc;
Meta := GetChartMetafile(AChart);
try
// Draw the metafile into the PDF at specific coordinates (X, Y, Width, Height)
// Note: THotPDF uses coordinates relative to the page.
// Adjust these bounds to match your desired placement.
HotPDF.DrawMetaFile(50, 50, 400, 300, Meta);
finally
Meta.Free;
end;
HotPDF.EndDoc;
HotPDF.SaveToFile(FileName);
finally
HotPDF.Free;
end;
end;
Tijdens de aanroep van DrawMetaFile parseert HotPDF de EMF-records. Lijnen blijven lijnen, vlakken worden gevuld met de opgegeven kleuren en, cruciaal, tekstlabels in de grafiek blijven echte PDF-tekst, waarbij lettertypeparameters behouden blijven
Best practices en beperkingen
Het overdragen via EMF is efficiënt en de beste balans tussen kwaliteit en implementatiesnelheid, maar onthoud deze nuances:
-
Gradiënten en transparantie: Windows EMF (en GDI) is geen native systeem met alfa-kanaal/transparantie in tegenstelling tot GDI+. TeeChart met transparantie, schaduwen of zeer complexe gradiëntvullingen zal resulteren in een EMF waarbij die effecten zijn verwijderd of benaderd. Voor complexe grafieken wilt u mogelijk terugvallen op het inbedden van GDI+-gerenderde bitmaps, ondanks het verlies aan resolutieonafhankelijkheid
-
Lettertypen en inbedding:
THotPDFrespecteert de lettertypeniveaus in de getekende metafile. Zorg ervoor dat het lettertype dat door uw TChart-titels en -labels wordt gebruikt (standaard Arial of Segoe UI), ofwel is geladen in uwTHotPDF-configuratie (zodat het wordt ingesloten), ofwel een standaard PDF-lettertype is dat wordt herkend. Hierdoor wordt tekstnauwkeurigheid voor de eindgebruiker gegarandeerd, ongeacht of zij het lettertype van de grafiek geïnstalleerd hebben -
Grafieken met hoge gegevensdichtheid: Een
TChartmet 50.000 punten exporteert met metafile snel, maar vertaalt zich in 50.000 individuele lijnbewerkingen in de PDF-inhoudsstroom, wat een omvangrijk bestand kan opleveren en traag kan renderen in weergaveprogramma's. Bij massale gegevensreeksen kunt u overwegen de reeks af te kappen vóór export of het afbeeldingsvlak te rasteren als de details niet kunnen worden gezien door inzoomen
De methoden en concepten die hier worden geschetst, maken deel uit van de HotPDF VCL Component, de primaire bibliotheek van losLab Software voor het programmeren en genereren van documenten