![]() |
Re: Vektor Format anzeigen/drucken
Zitat:
ps.: übrigens tolle fehlerbeschreibung ... |
Re: Vektor Format anzeigen/drucken
Hallo,
ich habe jetzt eine Routine, die Kerning berücksichtigt. Die Textdarstellung verlangsamt sich dadurch zwar etwas, aber nur um den Faktor 7-10 :wink: . Die neue Version findet sich auf meiner ![]() Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
|
Re: Vektor Format anzeigen/drucken
Zitat:
also die schrift funktioniert jetzt perfekt ... kannst du mir mit dem drucken noch mal kurz helfen? Ich versuche die Seite, die genau 210*297 ist, original auf den drucker auszugeben (den Offset habe ich schon ausgerechnet) aber wie kann ich die seite nun verschieben?
Delphi-Quellcode:
function MarginToMM(const Value, dpi : integer) : Extended;
begin Result := ((Value * 254) / dpi) / 100; end; temp.BeginDoc; grPrinter := TGPGraphics.Create(temp.Canvas.Handle); try grPrinter.SetPageUnit(UnitMillimeter); margin.x := -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX), GetDeviceCaps(Printer.Handle, LOGPIXELSX)); margin.y := -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY), GetDeviceCaps(Printer.Handle, LOGPIXELSY)); SVGImage1.SVG.PaintTo(grPrinter, Bounds, nil, 0); finally grPrinter.Free; end; temp.EndDoc; |
Re: Vektor Format anzeigen/drucken
Hallo,
das Drucken ist immer so eine Sache... Ich verwende da folgende Routine:
Delphi-Quellcode:
Ob das bei Dir funktioniert, musst Du allerding selbst ausprobieren.
type
TDeviceCaps = record Name: WideString; Index: Integer; Width, Height, DPIX, DPIY, OffsetX, OffsetY: Integer; PhysicalWidth, PhysicalHeight: Integer; PixelWidth, PixelHeight: Real; Orientation: TPrinterOrientation; end; function GetPrinterCaps: TDeviceCaps; var DC: THandle; Caps: TDeviceCaps; begin DC := Printer.Handle; Caps.Orientation := Printer.Orientation; Caps.Index := Printer.PrinterIndex; Caps.Name := Printer.Printers[Caps.Index]; Caps.Width := GetDeviceCaps(DC, HorzSize); // mm Caps.Height := GetDeviceCaps(DC, VertSize); // mm Caps.DPIX := GetDeviceCaps(DC, LogPixelSX); // DPI Caps.DPIY := GetDeviceCaps(DC, LogPixelSY); // DPI Caps.OffsetX := GetDeviceCaps(DC, PhysicalOffsetX); // Pixel Caps.OffsetY := GetDeviceCaps(DC, PhysicalOffsetY); // Pixel Caps.PhysicalWidth := GetDeviceCaps(DC, PhysicalWidth); // Pixel Caps.PhysicalHeight := GetDeviceCaps(DC, PhysicalHeight); // Pixel Caps.PixelWidth := (Caps.Width / Printer.PageWidth); Caps.PixelHeight := (Caps.Height / Printer.PageHeight); Result := Caps; end; function GetPageRect(const Width, Height: Integer; const Caps: TDeviceCaps; Center: Boolean = True): TRect; begin Result.Left := -Caps.OffsetX; Result.Top := -Caps.OffsetY; Result.Right := Result.Left + Round(Width / Caps.PixelWidth); Result.Bottom := Result.Top + Round(Height / Caps.PixelHeight); if Center then begin if Result.Right < Caps.PhysicalWidth then begin Result.Left := (Caps.PhysicalWidth - Result.Right) div 2; Inc(Result.Right, Result.Left); end; if Result.Bottom < Caps.PhysicalHeight then begin Result.Top := (Caps.PhysicalHeight - Result.Bottom) div 2; Inc(Result.Bottom, Result.Top); end; end; end; procedure TForm1.Print; var R: TRect; Bounds: TGPRectF; Graphics: TGPGraphics; Caps: TDeviceCaps; begin Caps := GetPrinterCaps; R := GetPageRect(Round(SVG.Width), Round(SVG.Height), Caps, False); Printer.BeginDoc; Bounds.X := R.Left; Bounds.Y := R.Top; Bounds.Width := R.Right - R.Left; Bounds.Height := R.Bottom - R.Top; Graphics := TGPGraphics.Create(Printer.Canvas.Handle); try Graphics.SetPageUnit(UnitPixel); Graphics.SetSmoothingMode(SmoothingModeAntiAlias); SVG.PaintTo(Graphics, Bounds, nil, 0); finally Graphics.Free; end; Printer.EndDoc; end; Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Eventuell wäre dafür aber ein neuer Thread sinnvoll. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Da liegst DU richtig. Eigentlich hatte ich doch schon die Fehlermeldung in Deinem Kommentarfenster geschrieben. Ich werde das Montag aber hier gern nochmal wiederholen, denn eigentlich wäre ich auch sehr an der Verwendung interessiert.
Mal nebenbei gefragt. Ist es eigentlich auch möglich andere Vektorgrafiken anzuzeigen? Ala *.ai von Adobe Illustrator? |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
daher wird das ganze dann ja auch sicher nicht um die ränder versetzt auf den drucker gezeichnet oder? Bei mir ist auch die SVG.Height und SVG.Width beides 0, aber die proportionen stimmen bei mir ja beim drucken (wenn ich UnitMillimeter verwende) mein SVG ist auch in millimeter ausgegben, und hat eine viewbox von genau 0,0,210,297 das problem ist nur, das die druckroutine das ganze in den druckbaren bereich druckt, und so habe ich einen versatz von 4 millimeter |
Re: Vektor Format anzeigen/drucken
so, habs nun hinbekommen, das er das ganz genau so druckt, wie es gehört ...
Delphi-Quellcode:
danke nochmal für alles und diese extrem geniale komponente!
bounds.X := 0;
bounds.Y := 0; bounds.Width := 210; bounds.Height := 297; Printer.BeginDoc; Graphics := TGPGraphics.Create(Printer.Canvas.Handle); try Graphics.SetPageUnit(UnitMillimeter); Graphics.SetSmoothingMode(SmoothingModeAntiAlias); Graphics.TranslateTransform(-MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX), GetDeviceCaps(Printer.Handle, LOGPIXELSX)), -MarginToMM(GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY), GetDeviceCaps(Printer.Handle, LOGPIXELSY))); SVGImage1.SVG.PaintTo(Graphics, Bounds, nil, 0); finally Graphics.Free; end; Printer.EndDoc; |
Re: Vektor Format anzeigen/drucken
hab noch ne frage ....
XML-Code:
der gibt mir nun im Corel den zusätzlichen Code oben "xmlns:xlink="&ns_xlink;"" mit aus
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
viewBox="0 0 210 297" xmlns:xlink="&ns_xlink;"> ich weiss nicht, warum, ich weiss nur, das er wenn das drinnen steht, die gesamte seite nicht parsen kann (es kommt rein gar nichts raus am schluß) ich muß diese zeile händisch rauslöschen, dann passt die seite perfekt Was sollte dieser Parameter machen? |
Re: Vektor Format anzeigen/drucken
So, also ich denke mal, dass ich alle Schritte durchgeführt habe. Also folgendes ist wohl installiert:
DirectX 9 Headers v1.0 (756 KB) GDI+ v1.1 (108 KB) MSXML 6 v1.2 (42 KB) Danach wollte ich die SVG-Bibliothek v0.65 (41 KB) installieren, aber die benötigt wohl Teile aus der Lists v1.0 (13 KB)!? Also habe ich dass erstmal vorgezogen. Hier trat beim ompilieren folgender Fehler auf: [Fehler] WideStringList.pas(254): Undefinierter Bezeichner: 'NameValueSeparator' in der Zeile =>
Code:
Also diese Zeile remarkt, compiliert und installiert. Danach habe ich dann die SVGPackage.dpk per Doppelklick aufgerufen und beim Compilieren diese Fehler erhalten:
FNameValueSeparator := WideChar(TStringList(Source).NameValueSeparator);
[Fehler] SVGTypes.pas(34): 'END' erwartet, aber 'CLASS' gefunden [Fehler] SVGTypes.pas(34): ';' erwartet, aber '(' gefunden [Fehler] SVGTypes.pas(34): '=' erwartet, aber ')' gefunden [Fehler] SVGTypes.pas(35): 'IMPLEMENTATION' erwartet, aber ';' gefunden [Fehler] SVGTypes.pas(40): '.' erwartet, aber ';' gefunden [Fehler] SVGTypes.pas(59): Undefinierter Bezeichner: 'TBounds' [Fehler] SVGTypes.pas(69): ';' erwartet, aber 'IMPLEMENTATION' gefunden [Fataler Fehler] SVG.pas(33): Verwendete Unit 'SVGTypes.pas' kann nicht compiliert werden Dabei springt der Debugger in diese Zeile:
Code:
Vielleicht hilft das JA!?
class operator Add(A, B: TSPoint): TSPoint;
|
Re: Vektor Format anzeigen/drucken
Hallo,
da habe ich mit den Neuerungen von Delphi 2006 rumgespielt. Ich werde später eine neue Version hochladen, die auch unter älteren Delphi-Versionen kompiliert. Ich melde mich dann hier nochmal. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Danke Dir schon jetzt!!!
|
Re: Vektor Format anzeigen/drucken
Hallo,
mir ist gerade aufgefallen, dass ich die neue Version schon hochgeladen hatte. Lad Dir nochmal die Version 0.65 runter. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Ok, ich habs mir gezogen.
Wie kann ich jetzt ein SVG in einer TImage laden lassen??? Habe bis jetzt das hier installiert: DirectX 9 Headers v1.0 (756 KB) GDI+ v1.1 (108 KB) MSXML 6 v1.2 (42 KB) SVG-Bibliothek v0.65 (41 KB) Lists v1.0 (13 KB) Habe mir auch noch die SVGImage gezogen, aber wenn ich da eines der beiden Packages compilieren will, meckert der Kollege wieder. vclactnband wird benötigt, konnte aber nicht gefunden werden... kommt, wenn ich die SVGImagePackageD compilieren will... |
Re: Vektor Format anzeigen/drucken
Zitat:
also einfach die zeile ersetzen mit
Delphi-Quellcode:
dann funkt es (und ist glaub ich auch die einzige änderung, da man machen muß)
FNameValueSeparator := WideChar('=');//TStringList(Source).NameValueSeparator);
|
Re: Vektor Format anzeigen/drucken
Danke für deine Antwort...an dem Punkt sind wir zwar schon vorbei, aber ich werde es nochmal so compilieren, wie von Dir vorgeschlagen. Das aktuelle Problem ist die installation der SVG-Image, die ein vclactnband in den requires, hat, was , so glaube ich bei D6 noch nicht mit bei war...
|
Re: Vektor Format anzeigen/drucken
Zitat:
|
Re: Vektor Format anzeigen/drucken
Das nimmt irgendwie kein Ende. Jetzt findet er die DesignIntf.dcu nicht. Dann kann er mit GetFileVersion nix anfangen. Welches Package muss ich denn überhaupt compilieren und installieren??? Das mit D oder mit R am Ende!?
|
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Naja aktuell hängt es ja nur noch am SVG-Image...
|
Re: Vektor Format anzeigen/drucken
Zitat:
der design...? füge einfach mal die designide.dcp manuell in die requires packages ein |
Re: Vektor Format anzeigen/drucken
So, ich habs. Ich habe einfach mal die Dateien, die noch fehlten in einer anderen Delphi-Version gesucht und gefunden und dann die pas und dcu´s in den Komponenten-Ordner kopiert, von wo aus ich compiliert und installiert habe. Nicht ganz sauber, aber zumindest die SVG-image funzt jetzt endlich!!!
Jetzt muss ich nur noch herausbekommen, wie ich den Inhalt zur Laufzeit drehen und skalieren kann... //Nachtrag Ganz so einfach scheint es doch nicht zu sein, denn ich kann zwar zur DesignTime ein TSvgImage auf meinem Form platzieren, aber das Projekt lässt sich natürlich nicht kompilieren, da er mit der anderen SysUtils nicht klarkommt... [Fehler] SysUtils.pas(16): Ungültige Compileranweisung: 'UNSAFE_TYPE' [Fehler] SysUtils.pas(745): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(752): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(803): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(809): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(815): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(821): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(827): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(833): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(883): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(893): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1034): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1039): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1067): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1078): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1169): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1185): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(1191): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2197): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2199): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2205): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2207): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2215): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2217): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2397): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2652): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2661): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2679): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(2681): Deklaration erwartet, aber 'INLINE' gefunden [Fehler] SysUtils.pas(6600): Undefinierter Bezeichner: 'VarToLStrProc' [Fehler] SysUtils.pas(6600): Inkompatible Typen [Fehler] SysUtils.pas(6601): Undefinierter Bezeichner: 'VarToLStrProc' [Fehler] SysUtils.pas(7799): Undefinierter Bezeichner: 'VarToWStrProc' [Fehler] SysUtils.pas(7799): Inkompatible Typen [Fehler] SysUtils.pas(7800): Undefinierter Bezeichner: 'VarToWStrProc' [Fehler] SysUtils.pas(13566): Undefinierter Bezeichner: 'SAccessViolationNoArg' [Warnung] SysUtils.pas(13569): Symbol 'EStackOverflow' wird abgelehnt [Fehler] SysUtils.pas(13574): Undefinierter Bezeichner: 'SVarInvalid' [Fehler] SysUtils.pas(13829): Undefinierter Bezeichner: 'SAccessViolationArg3' [Fehler] SysUtils.pas(14629): Undefinierter Bezeichner: 'CSTR_EQUAL' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'SysUtils.pas' kann nicht compiliert werden |
Re: Vektor Format anzeigen/drucken
@xaromz: habe noch eine frage
warum ist es eigentlich so, das wenn du einen text ausgibst, diesen immer gleich in einen Pfad umwandelst? Geht das nur so? Bin gerade dabei, das ich die SVG Grafik in ein PDF exportiere, und da verliere ich dann natürlich alle Text informationen, da die ja schon beim importieren in pfade gewandelt werden ... ich weiss zwar noch nicht, wie und was die pdf export engine dazu sagt, wenn ich mal einen GDI+ Text ausgebe, aber im moment hat ja noch nicht mal ein Adobe Acrobat eine chance, das ganze als text zu generieren ... |
Re: Vektor Format anzeigen/drucken
Könnte mir nicht geholfen werden, indem ich schon vorkompilierte DCU´s nutze???
|
Re: Vektor Format anzeigen/drucken
Zitat:
in der TKerningText.AddToGraphics ist noch ein Fehler drinnen, da muß das PrepareKerning mit dem Faktor verwendet werden, sonst passt der gezeichnete Text mit Kerning nicht ... (ist der abstand falsch)
Delphi-Quellcode:
und hier ist meine PaintToGraphics
function TKerningText.AddToGraphics(const Graphics: TGPGraphics;
const Text: WideString; const Font: TGPFont; Origin: TGPPointF; const Format: TGPStringFormat; const Brush: TGPBrush): TStatus; var P1, P2: PWideChar; Status: TStatus; begin Status := Ok; if Text = '' then begin Result := Ok; Exit; end; PrepareKerning(Font, Graphics, TRUE); <<< hier gehört TRUE
Delphi-Quellcode:
procedure TSVGText.PaintToGraphics(Graphics: TGPGraphics);
var SF: TGPStringFormat; f : TGPFont; brush : TGPBrush; pointF : TGPPointF; TGP : TGPMatrix; ClipRoot: TSVGBasic; begin if FText = '' then Exit; {$IFDEF DONT_USE_TEXT} inherited; {$ELSE} SF := TGPStringFormat.Create(TGPStringFormat.GenericTypographic); SF.SetFormatFlags(StringFormatFlagsMeasureTrailingSpaces); pointF := MakePoint(X, Y - FFontHeight); f := GetFont; try if Assigned(FClipPath) then begin if ClipURI <> '' then begin ClipRoot := TSVGBasic(GetRoot.FindByID(ClipURI)); if Assigned(ClipRoot) then begin TGP := GetGPMatrix(ClipRoot.Matrix); Graphics.SetTransform(TGP); TGP.Free; end; end; try Graphics.SetClip(FClipPath); except end; Graphics.ResetTransform; end; TGP := GetGPMatrix(Matrix); Graphics.SetTransform(TGP); TGP.Free; Brush := GetFillBrush; if Assigned(Brush) and (Brush.GetLastStatus = OK) then try KerningText.AddToGraphics(Graphics, FText, f, pointF, SF, brush); finally Brush.Free; end; finally Graphics.ResetTransform; Graphics.ResetClip; end; f.Free; SF.Free; {$ENDIF} end; |
Re: Vektor Format anzeigen/drucken
Zitat:
aber bei mir hat es mit D6 eigentlich fast keine probs beim installieren gegeben, den einen fehler in den widestrings raus, die requiered units ausmisten und dann lief das ganze schon fast ohne probs ... |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
edit: was dann natürlich nicht mehr funktioniert, ist wenn das SVG gestrecht werden soll, DANN werden wirklich die buchstaben übereinandergezeichnet ... |
Re: Vektor Format anzeigen/drucken
Zitat:
ich habe nun folgendes getan. Ich lade mir die SVGImagePackageD und lösche dort direkt im Code vclactnband aus den reqiures. Dann will ich compilieren. Das scheitert dann aufgrund eines Fehlers. Der Compiler meckert, dass er GetFileVersion aus der Unit SVGImageList nicht kennt. Ich nehme mal an, dass das mit der neueren SysUtils zusammen hängt!? Also ändere ich folgenden Code ab, da ich die IconListe nicht brauche sondern eigentlich nur das SVGImage brauche. Aus
Code:
Wir dann
if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
Result := SVGToIcon32(SVG) else Result := SVGToIcon24(SVG);
Code:
Nun schreibt mir der Compiler, dass er die Themes.dcu nicht finden kann. Diese gehört wohl auch nicht standardmäßig zu D6. Also wie gehts nun weiter?
//if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
// Result := SVGToIcon32(SVG) //else Result := SVGToIcon24(SVG); Nachtrag Es läuft nun!!! Danke!!! |
Re: Vektor Format anzeigen/drucken
Ich habe noch was gefunden: Gradients werden leider noch nicht unterstützt...
getestet mit dieser Datei: ![]() |
Re: Vektor Format anzeigen/drucken
habe noch ein gröberes problem ....
und zwar mit folgendem svg
Code:
die zweite linie wird nicht mehr richtig gedruckt (bzw alle linien, die nach dem path kommen, werden falsch gezeichnet)
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 210 297"> <g id="Ebene_x0020_1"> <metadata id="CorelCorpID_0Corel-Layer"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="29.04" x2="204" y2= "29.04" /> <path fill="#131516" d="M65.4536 22.9805l0 3.6945 0.4196 0 0 -0.3359c0.1802,0.2647 0.4285,0.3971 0.7449,0.3971 0.3181,0 0.5908,-0.1249 0.8178,-0.3756 0.2273,-0.2502 0.341,-0.6049 0.341,-1.0633 0,-0.1934 -0.0269,-0.3748 -0.0809,-0.5441 -0.0537,-0.1701 -0.1284,-0.3148 -0.2235,-0.4347 -0.095,-0.1199 -0.2164,-0.2133 -0.3635,-0.2798 -0.1471,-0.0662 -0.3032,-0.0996 -0.4682,-0.0996 -0.2978,0 -0.5426,0.1206 -0.7345,0.3616l0 -1.3194 -0.4527 -0.0003 0 -0.0005zm0.631 1.59c0.1447,-0.172 0.3164,-0.2581 0.5153,-0.2581 0.197,0 0.3651,0.083 0.5037,0.2495 0.1386,0.1663 0.2083,0.4238 0.2083,0.7731 0,0.3405 -0.0724,0.5971 -0.2171,0.7691 -0.1448,0.1719 -0.3165,0.258 -0.5149,0.258 -0.2441,0 -0.438,-0.1168 -0.5808,-0.35 -0.0875,-0.1424 -0.1312,-0.3741 -0.1312,-0.6948 -0.0006,-0.326 0.0718,-0.5747 0.2167,-0.7468z"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="277" x2="204" y2= "277" /> </g> </svg> aber nur, wenn ich das ganze in ein MetaFile zeichne, dem ich als Referenz einen HDC zu einem Drucker gebe ...
Delphi-Quellcode:
FReferenceDC := CreateDC(ADriver, ADevice, nil, nil)
FCanvas := TMetafileCanvas.Create(FMetafile, FReferenceDC); SetMapMode(DC, MM_ANISOTROPIC); SetWindowExtEx(DC, Fpage_xres, Fpage_yres, nil); SetViewPortExtEx(DC, currX, currY, nil); SetViewPortOrgEx(DC, 0, 0, nil); SetWindowOrgEx(DC, 0, 0, nil); hast du eine idee, woran das liegen kann? edit: also, es liegt irgendwie am pfad folgender pfad funktioniert
Code:
nach folgendem path sind alle linien falsch (sowohl direkt gezeichnete als auch die, die in Path umgewandelt wurden ...)
<path fill="none" d="M80.2099 6.9461c-0.209,0 -0.3845,0.0697 -0.5269,0.2086 -0.1424,0.139 -0.2211,0.3249 -0.2363,0.5576l1.4992 0.0002c-0.0203,-0.2246 -0.0775,-0.3928 -0.172,-0.5049 -0.1453,-0.1743 -0.3332,-0.2615 -0.564,-0.2615z"/>
Code:
<path fill="#009FC6" d="M6.491 26.575c0.5687,0 1.0486,-0.4375 1.0486,-1.0127l0 -19.2078c0,-0.5546 -0.499,-0.9334 -1.0463,-0.9345 -0.5484,-0.0012 -1.0509,0.3479 -1.0509,0.9348l0 19.2451c0.0002,0.5699 0.4706,0.9751 1.0486,0.9751z"/>
|
Re: Vektor Format anzeigen/drucken
hmmm, ich sehe gerade, das sobald ich einen path verwenden (Egal welchen - aber sobald der gezeichnet wird (der erste pfad oben hat fill="none" und wird deshalb nicht gezeichnet), dann passt das zeichnen von linien gar nicht mehr
ich zeichne zuerst das svg in ein TGPGraphic, dann mache ich ein ResetTransform, ResetClip und ein erneutes ScaleTransform, aber die Linie (Die ich manuell zeichne ist nicht mehr dort, wo sie hingehört) das zeichnen des pfades hat irgendetwas verstellt, das ich mit diesen befehlen oben nicht mehr korrigieren kann ... [edit]also, sobald ich wieder einen text ausgebe (aber nur mit DrawString, dann funktioniert das ganze wieder) also irgendwie kommt mir das ganze sehr komisch vor |
Re: Vektor Format anzeigen/drucken
Ich habe mal noch eine kleine Frage. Das Drehen des SVG´s kann ich ja über
Delphi-Quellcode:
erledigen. Hat es einen Grund, warum der Angle nicht einfach von 1-360° geht? Und von wo nach wo geht denn der Angel im Falle des SVG´s? Ich nehme mal an von 0 - ?
SVGImage1.SVG.Angle:=1
|
Re: Vektor Format anzeigen/drucken
Zitat:
|
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 3)
das svg file
XML-Code:
habe dir die 3 pdfs mit angehängt, zweimal wegen dem kerning und einmal wegen dem path problem
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 210 297"> <g id="Ebene_x0020_1"> <metadata id="CorelCorpID_0Corel-Layer"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="29.04" x2="204" y2= "29.04" /> <path fill="#131516" d="M65.4536 22.9805l0 3.6945 0.4196 0 0 -0.3359c0.1802,0.2647 0.4285,0.3971 0.7449,0.3971 0.3181,0 0.5908,-0.1249 0.8178,-0.3756 0.2273,-0.2502 0.341,-0.6049 0.341,-1.0633 0,-0.1934 -0.0269,-0.3748 -0.0809,-0.5441 -0.0537,-0.1701 -0.1284,-0.3148 -0.2235,-0.4347 -0.095,-0.1199 -0.2164,-0.2133 -0.3635,-0.2798 -0.1471,-0.0662 -0.3032,-0.0996 -0.4682,-0.0996 -0.2978,0 -0.5426,0.1206 -0.7345,0.3616l0 -1.3194 -0.4527 -0.0003 0 -0.0005zm0.631 1.59c0.1447,-0.172 0.3164,-0.2581 0.5153,-0.2581 0.197,0 0.3651,0.083 0.5037,0.2495 0.1386,0.1663 0.2083,0.4238 0.2083,0.7731 0,0.3405 -0.0724,0.5971 -0.2171,0.7691 -0.1448,0.1719 -0.3165,0.258 -0.5149,0.258 -0.2441,0 -0.438,-0.1168 -0.5808,-0.35 -0.0875,-0.1424 -0.1312,-0.3741 -0.1312,-0.6948 -0.0006,-0.326 0.0718,-0.5747 0.2167,-0.7468z"/> <line fill="none" stroke="#AAA9A9" stroke-width="0.7056" x1="4" y1="277" x2="204" y2= "277" /> <text x="26.82" y="288.035" fill="#131516" font-weight="normal" font-size="2.8222" font-family="Arial">Bei Zahlungsverzug werden 1% Verzugszinsen pro Monat berechnet.</text> </g> </svg> mit folgendem code kann ich den Canvas (oder wie auch immer man das bei GDI+ nennt) wieder reparieren, danch funktionieren die normalen Linien wieder (ohne dem sehen normale einfache Linien sie wo oben im SVG definiert falsch aus) und es ist auch egal, ob die Linie im SVG gezeichnet wird, oder ob ich die danach manuell auf das GPGraphic zeichne, er hat immer ein problem damit
Delphi-Quellcode:
Font := TGPFont.Create('Arial', 8);
Font.GetLogFontW(Graphics, LF); Font.Free; |
Re: Vektor Format anzeigen/drucken
Hallo,
ich glaube, es liegt an diesem Teil:
Delphi-Quellcode:
Damit manipulierst Du das Koordinatensystem im GDI. GDI+ verwendet aber ein eigenes Koordinatensystem, das mit dem GDI nur bedingt zu tun hat. Ich vermute, diese beiden kollidieren irgendwie. Das dürfte auch der Grund für den Kerning-Fehler sein. PrepareKerning geht nämlich davon aus, dass der DC, von dem die Auflösung geholt wird, aud MM_TEXT steht. Da müsste man also je nach MapMode unterschiedliche Faktoren nehmen.
SetMapMode(DC, MM_ANISOTROPIC);
SetWindowExtEx(DC, Fpage_xres, Fpage_yres, nil); SetViewPortExtEx(DC, currX, currY, nil); SetViewPortOrgEx(DC, 0, 0, nil); SetWindowOrgEx(DC, 0, 0, nil); Gruß xaromz PS: Es gibt eine neuer Version, die das Problem mit dem Gradient löst, und ein neues Demoprogramm, bei dem der Zoom endlich besser arbeitet. |
Re: Vektor Format anzeigen/drucken
ja, es liegt an dem teil, meine frage ist, aber warum?
ich kann linien zeichnen, texte ausgeben, alles ohne probleme funktioniert mit dem koordinatensystem perfekt, aber sobald ein path dabei ist, sind alle linien dahinter kaput, texte funktionieren wieder wenn ich dann systematisch vor jeder ausgabe im GDI+ den teil mit dem logischen Font reinschreibe, dann passen fast alle pfade (ein einziger wird nicht an der richtigen stelle gezeichnet) - aber das sagt eigetnlich ja aus, das es kein problem mit dem koordinatensystem ist, sondern ein nebeneffekt - würde ich sagen ... und das problem mit dem kerning (also dem , true und ,false) hat nix damit zu tun, dann auch auf dem bildschirm, ohne den ganzen mapmode und co gibt es das selbe problem, nur nicht ganz so gravierend, da passt es nur um den faktor 1.8 nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz