Hallo,
ich habe immer noch ein Problem mit meinem Rave Report, ich erzeuge zur Laufzeit eine Grafik (MetaFile) dieses übergebe ich an
einen Report um den Report entweder auszudrucken oder als PDF abzuspeichern, es klappt auch soweit bis auf eine Sache.
Die Grafik ist zu pixelig, d.h. zoomt man im PDF immer näher so werden Linien und Texte pixelig dargestellt, was noch zu
verschmerzen wäre wenn die so erzeugte PDF Datei nicht viel zu groß wäre.
Erstelle ich den Report und drucke ihn über einem PDF Druckertreiber aus, so ist die erzeugte PDF Datei weder pixelig noch
zu groß, die Dateigröße ist dann ca. 20-30KB. Speicher ich den gleichen Report über mein Programm als PDF Datei ab so wird
die Grafik pixelig und die PDF Datei ist über 400 KB groß.
Irgendwie schafft der Druckertreiber (z.B. PDF Creator) die Grafik als Vektor Grafik darzustellen. Jedoch die zur Laufzeit
erzeugte Grafik ist eine pixel Grafik trotz Metafile. (Ich hatte gedacht ein MetaFile wäre automatisch eine Vektorgrafik)
Ich hoffe jemand hat eine idee wie ich das ganze besser in den Griff bekomme. Also meine Ziele sind keine pixelige Grafik
und die Dateigröße soll gleich bzw. ungefähr gleich dem PDF Druckertreiber sein.
Das MetaFile wird wie folgt erzeugt und an den Report übergeben.
Delphi-Quellcode:
procedure TfrmGraph.RvCustConTAGraphGetRow(Connection: TRvCustomConnection);
var
MemStream : TMemoryStream;
DotsPerInch : Word;
Wmf : TMetaFile;
WmfCanvas : TMetaFileCanvas;
begin
//init
DotsPerInch := RvRenderPDF.MetafileDPI;
Wmf := TMetaFile.Create;
try
try
Wmf.Enhanced := True;
//Größe
Wmf.SetSize(fMmToPx(1800, DotsPerInch), fMmToPx(1220, DotsPerInch));
//Zeichenfläche erstellen
WmfCanvas := TMetaFileCanvas.Create(Wmf, 0);
try
//Grafik zeichnen...
finally
WmfCanvas.Free;
end;
//Zu Testzwecken wird das Bild gespeichert
//Die hier erzeugte Datei ist ebenfalls pixelig beim heranzoomen (Datei größe ca. 350 KB)
Wmf.SaveToFile(glLocalAppDir+'bla.emf');
//Bild in Report laden...
MemStream := TMemoryStream.Create;
try
Wmf.SaveToStream(MemStream);
Connection.WriteBlobData(MemStream.Memory^, MemStream.Size);
finally
MemStream.Free;
end;
except
on EOutOfResources do begin
//Fehlermeldung...
end;
end;{try..except}
finally
Wmf.Free;
end;{try..finally}
end;
Ich hab schon das Forum rauf und runter durchsucht und bisher nix gefunden ausser einem Beitrag mit ähnnlichem Problem,
jedoch auch ohne Lösung. Der Beitrag (
Rave - RvRenderPDF und Metafiles) ist von
Stephan.
mfg
TUX