Delphi-PRAXiS
Seite 8 von 10   « Erste     678 910      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Vektor Format anzeigen/drucken (https://www.delphipraxis.net/102812-vektor-format-anzeigen-drucken.html)

torud 20. Nov 2007 09:11

Re: Vektor Format anzeigen/drucken
 
Zitat:

Zitat von Gruber_Hans_12345
wenn du mir sagst, welche dcu du benötigst, kann ich dir die schon irgendwie zukommen lassen ...
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 ...

Guten Morgen,

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:
  if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
    Result := SVGToIcon32(SVG)
  else
    Result := SVGToIcon24(SVG);
Wir dann
Code:
  //if GetFileVersion(comctl32) >= ComCtlVersionIE6 then
  //  Result := SVGToIcon32(SVG)
  //else
    Result := SVGToIcon24(SVG);
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?

Nachtrag
Es läuft nun!!! Danke!!!

torud 20. Nov 2007 10:17

Re: Vektor Format anzeigen/drucken
 
Ich habe noch was gefunden: Gradients werden leider noch nicht unterstützt...

getestet mit dieser Datei:

http://www.w3.org/TR/SVG/images/pservers/lingrad01.svg

Gruber_Hans_12345 20. Nov 2007 11:08

Re: Vektor Format anzeigen/drucken
 
habe noch ein gröberes problem ....

und zwar mit folgendem svg

Code:
<?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>
die zweite linie wird nicht mehr richtig gedruckt (bzw alle linien, die nach dem path kommen, werden falsch gezeichnet)

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:
<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"/>
nach folgendem path sind alle linien falsch (sowohl direkt gezeichnete als auch die, die in Path umgewandelt wurden ...)
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"/>

Gruber_Hans_12345 20. Nov 2007 11:34

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

torud 20. Nov 2007 13:57

Re: Vektor Format anzeigen/drucken
 
Ich habe mal noch eine kleine Frage. Das Drehen des SVG´s kann ich ja über
Delphi-Quellcode:
SVGImage1.SVG.Angle:=1
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 - ?

Gruber_Hans_12345 20. Nov 2007 14:00

Re: Vektor Format anzeigen/drucken
 
Zitat:

Zitat von torud
Ich habe mal noch eine kleine Frage. Das Drehen des SVG´s kann ich ja über
Delphi-Quellcode:
SVGImage1.SVG.Angle:=1
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 - ?

hast mal probiert ob der angel in rad angegeben werden muß? (also 0-2PI) (ohne testen, aber wäre logisch ...)

xaromz 20. Nov 2007 16:56

Re: Vektor Format anzeigen/drucken
 
Hallo,

Zitat:

Zitat von torud
Ich habe noch was gefunden: Gradients werden leider noch nicht unterstützt...

Eigentlich schon... ich werde die Tage mal schauen, was da schiefläuft.

Zitat:

Zitat von Gruber_Hans_12345
hast mal probiert ob der angel in rad angegeben werden muß? (also 0-2PI) (ohne testen, aber wäre logisch ...)

Genau.

Zitat:

Zitat von Gruber_Hans_12345
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

Muss ich mir ansehen. Das Problem kenne ich so nicht.

Zitat:

Zitat von Gruber_Hans_12345
nein, ich habe es bei mir umgetellt, das ich texte immer direkt zeichnen lasse, damit die textinformationen im PDF erhalten bleiben, und wenn ich da FALSE drinnen lasse, dann habe ich statt 2mm abstand auf einmal 2cm abstand, gebe ich true rein, dann passt die asugabe 100% (genau so, wie wenn ich die text zuerst in pfade wandle)

edit: was dann natürlich nicht mehr funktioniert, ist wenn das SVG gestrecht werden soll, DANN werden wirklich die buchstaben übereinandergezeichnet ...

Kannst Du mir da mal ein Bild (SVG + Screenshot) anhängen? Welche Schrift verwendest Du?

Gruß
xaromz

Gruber_Hans_12345 20. Nov 2007 19:06

Re: Vektor Format anzeigen/drucken
 
Liste der Anhänge anzeigen (Anzahl: 3)
das svg file

XML-Code:
<?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>
habe dir die 3 pdfs mit angehängt, zweimal wegen dem kerning und einmal wegen dem path problem

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;

xaromz 20. Nov 2007 19:59

Re: Vektor Format anzeigen/drucken
 
Hallo,

ich glaube, es liegt an diesem Teil:
Delphi-Quellcode:
  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);
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.

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.

Gruber_Hans_12345 20. Nov 2007 20:13

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 21:27 Uhr.
Seite 8 von 10   « Erste     678 910      

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