Ok. Ist bei mir genauso (hab PowerPdf gegen SynPdf ausgetauscht). Möchte das eigentlich nicht mehr rückgängig machen. Die 90 Grad Drehung lass ich dann lieber weg.
Sollen wir uns mal an die SynPdf Gemeinde wenden? Die ist für doch solche gravierenden Erweiterungen der Ansprechpartner und dein Chef hat dich auch wieder lieb?
Hallo
wir können versuchen das direkt by Synopse zu melden, ich denke aber das wir
damit keinen grossen Erfolg haben werden. Für den Anwendungsfall wie es dort eingesetzt
wird, funktioniert es ja wirklich gut.
Ich habe mich jetzt schon gute 2 Tage durch die Source und Die Adobe PDF Beschreibung gewühlt.
Mit dem aktuellen Design der SynPdf geht das nicht so einfach.
Was da im PDF Format wirklich fehlt ist eine komplettes setzen der Transformation.
Im Moment kann man nur verändern
Dann noch was habe ich gestern nicht aufgepasst
Du solltest für Manipulationen am WorldTransform aufpassen das die Werte auch stimmen
Da Du die ganze Transformation setzt solltest Du die eM11 und eM22 auf 1 setzen
Windows selber ist da zwar unempfindlich aber die Werte stimmen sonst nicht also:
Delphi-Quellcode:
procedure TFemGraphic.SaveToEmfFile(const FileName: string);
var
MF: TMetafile;
MC: TMetafileCanvas;
XForm: tagXFORM;
begin
if not FWantHaveRotate90 then
SaveToDefaultEmfFile(FileName)
else
begin // -90°;
MF := TMetafile.Create;
try
MF.Width := FMetafile.Height;
MF.Height := FMetafile.Width;
MC := TMetafileCanvas.Create(MF, 0);
try
XForm.eM11 := 1; //0; change
XForm.eM12 := -1;
XForm.eM21 := 1;
XForm.eM22 := 1; // 0; change
XForm.eDx := 0;
XForm.eDy := FMetafile.Width;
SetGraphicsMode(MC.Handle, GM_ADVANCED);
SetWorldTransform(MC.Handle, XForm);
MC.Draw(0, 0, FMetafile);
finally
MC.Free;
end;
finally
MF.SaveToFile(FileName);
MF.Free;
end;
end;
end;
Besser wäre folgendes dann ist es egal was vorher schon da war
Wie gesagt windows ist unempfindlich aber andere EMF Interpreter reagieren da schon mal komisch
Delphi-Quellcode:
procedure TFemGraphic.SaveToEmfFile(const FileName: string);
var
MF: TMetafile;
MC: TMetafileCanvas;
XForm: tagXFORM;
begin
if not FWantHaveRotate90 then
SaveToDefaultEmfFile(FileName)
else
begin // -90°;
MF := TMetafile.Create;
try
MF.Width := FMetafile.Height;
MF.Height := FMetafile.Width;
MC := TMetafileCanvas.Create(MF, 0);
try
XForm.eM11 := 1;
XForm.eM12 := -1;
XForm.eM21 := 1;
XForm.eM22 := 1;
XForm.eDx := 0;
XForm.eDy := FMetafile.Width;
SetGraphicsMode(MC.Handle, GM_ADVANCED);
GetWorldTransform(MC.Handle, orgXForm);
// So wird nur zusätzlich die Drehung eingebaut
ModifyWorldTransform(MC.Handle, XForm, MWT_LEFTMULTIPLY);
MC.Draw(0, 0, FMetafile);
// und wieder zurück auf Normal
ModifyWorldTransform(MC.Handle, XForm, MWT_IDENTITY);
finally
MC.Free;
end;
finally
MF.SaveToFile(FileName);
MF.Free;
end;
end;
end;