![]() |
Vektor Format anzeigen/drucken
Hallo
Ich muß mit Delphi ein (irgendeines) Vektorformat anzeigen können, dieses dann auf einen Canvas drucken können (somit auf Preview, Drcuker, PDF Export) dazu brauche ich natürlich ein Format, das ich mit irgendwelchen tools (CorelDraw, inkscape und co) vernünftig erzeugen/konvertieren lässt und auch in delphi importieren lässt. Es sollte Linien/kreise/freihand und co kennen, eingebettetet bilder (jpg/png) und texte am anfang hätte ich es mit EMF/WMF probiert, da man das ja ganz gut öffnen kann in delphi, aber leider habe ich kein vernünftiges programm gefunden, das emf richtig erstellen kann (CorelDraw patzt da zb bei den Texten, die positioniert diese irgendwo - übereinander oder mit abstand, der nicht da ist) jetzt bin ich auf der suche nach svg - sieht vom format her ganz gut aus, aber Importer/Viewer sind nicht so viele vorhanden, habe zwar einen gefunden,aber weiss nicht ob der nun gut ist oder nicht .... Kennt wer bzw verwendet wer einen guten Importer für Vektor Grafik Format? das ganze muß mit sourcecode verfügbar sein (darf natürlich was kosten, zwar nicht wie die sachen von leadtools (2k euro) aber "normale" preise sind ok) für SVG habe ich die "CAD Import VCL" gefunden |
Re: Vektor Format anzeigen/drucken
Nimm SVG, dann kannst du notfalls auch mit einem Texteditor editieren.
|
Re: Vektor Format anzeigen/drucken
Zitat:
...:cat:... |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Ist denn in diesem Forum immer noch nicht jedem bekannt, dass ich da ein paar ![]() Oh, ich sehe gerade, Du fragst nach guten Komponenten. Ich habe aber doch nur sehr gute. (War das jetzt schon genug Werbung?) Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
ne, habe zwar ne weile rumgesucht, sowohl hier als auch google, aber deine nicht gefunden, werde mir mal alles downloaden und angucken auf den ersten blick siehts gut aus, auf den zweiten blick, funktioniert bei meinem test svg mit deinem testprogramm das Zoomen nicht ... |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
uihhh .... hmmm .... ab welcher delphi version läuft das den?
glaub das wird viel arbeit, das ganz auf d6 zu portieren .... (class in records) |
Re: Vektor Format anzeigen/drucken
Hallo,
programmiert habe ich das in Delphi 2006. Aber TBounds ist die einzige Struktur, die Record-Funktionen benutzt. Dass lässt sich auch leicht mit entsprechenden Funktionen lösen. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
ok, das hab ich mal
kannst mir noch kurz sagen, wie ich nun ein SVG, das eine A4 Seite darstellen soll richtig und positionsgetreu wieder auf den drucker bringe? habe mal so angefangen ...
Delphi-Quellcode:
(allerdings stimmt dann am ausdruck nicht wirklich was - ist viel zu klein .... )
if PrintDialog1.Execute then begin
temp := TPrinter.Create; //temp.PrinterIndex := PrintDialog1. temp.BeginDoc; //x := temp.Canvas.ClipRect; bounds.X := 0; bounds.Y := 0; bounds.Width := temp.PageWidth; bounds.Height := temp.PageHeight; SVGImage1.SVG.PaintTo(temp.Canvas.Handle, bounds, m, 0); temp.EndDoc; temp.Free; end; in welchen einheiten braucht der die bounds? zuwas kann ich der druck routine noch zusätzlich rechtecke mit angeben? |
Re: Vektor Format anzeigen/drucken
hmmm, gibt es bei Texte irgendetwas zu beachten?
habe mit Inkscape mal ein SVG erzeugt, die Linien bekomme ich rein, aber die Texte nicht? werde es dann mal mit CorelDraw probieren [edit]mit Coreldraw kommend ie Texte auch mal gut an (ob die 100% passen, werde ich erst sehen, wenn ich das drucken mal im griff habe) |
Re: Vektor Format anzeigen/drucken
Hallo,
das Drucken ist ein Problem, weil der Drucker nicht auf Pixel eingestellt ist. Hier musst Du den Umweg über GDI+ gehen:
Delphi-Quellcode:
Die zusätzlichen Rects sind Update-Regions und werden normalerweise nicht benötigt. Die sind nur für das optimierte Zeichnen in Windows vorhanden.
var
Bounds: TGPRectF; Graphics: TGPGraphics; begin Printer.BeginDoc; Bounds.X := 0; Bounds.Y := 0; Bounds.Width := Printer.PageWidth; Bounds.Height := Printer.PageHeight; Graphics := TGPGraphics.Create(Printer.Canvas.Handle); try Graphics.SetPageUnit(UnitPixel); // <-- Das hier schaltet die Einheit um Graphics.SetSmoothingMode(SmoothingModeAntiAlias); SVG.PaintTo(Graphics, Bounds, nil, 0); finally Graphics.Free; end; Printer.EndDoc; end; Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 1)
danke für die hilfe, also die seite kann ich ausdrucken, allerdings muß ich die ganze seite etwas verschieben, da der drucker ränder hat, und ich das bild an position -4, -4 drucken muß zb
Die erste seite druckt nun das SVG richtig aus (allerdings noch verschoben) meine zweite seite wäre ein versuch, das ganze zuerst in ein MetaFile zu schreiben und dieses dann etwas versetzt an den drucker zu schicken, allerdings kommt da nur eine leere seite raus
Delphi-Quellcode:
zu den texten, habe ein problem : und zwar stimmt die positionierung nicht, er schreibt texte teilweise übereinander bzw zu weit zusammen
temp.BeginDoc;
grPrinter := TGPGraphics.Create(temp.Canvas.Handle); try grPrinter.SetPageUnit(UnitMillimeter); grPrinter.SetSmoothingMode(SmoothingModeAntiAlias); SVGImage1.SVG.PaintTo(grPrinter, Bounds, nil, 0); finally grPrinter.Free; end; temp.EndDoc; Graphics := TGPMetaFile.Create; SVGImage1.SVG.PaintTo(Graphics, Bounds, nil, 0); temp.BeginDoc; grPrinter := TGPGraphics.Create(temp.Canvas.Handle); grPrinter.SetPageUnit(UnitMillimeter); grPrinter.SetSmoothingMode(SmoothingModeAntiAlias); grPrinter.DrawImage(Graphics, -4, -4); grPrinter.Free; temp.EndDoc; Graphics.Free; wenn du dir mal das beispiel anguckst (beim text : Firmenbuchgericht bzw den Teil mit dem flughafen) |
Re: Vektor Format anzeigen/drucken
Bild kann nicht angezeigt werden
|
Re: Vektor Format anzeigen/drucken
Zitat:
|
Re: Vektor Format anzeigen/drucken
Wenn du die Datei in einem Texteditor anzeigen lässt, siehst du auch warum: die y-Position ist fast identisch:
Code:
<text x="5.8918" y="9.6632" class="fil1 fnt0">Firma GmbH</text>
<text x="18.0433" y="9.6632" class="fil1 fnt1"> · Ein Unternehmen der Holding</text> <text x="5.8918" y="12.4894" class="fil1 fnt1">Strasse, Ort und eventuell Land, </text> <text x="61.15" y="12.4894" class="fil1 fnt1"> Tel.: haben keine, eMail: [email]office@woauchimmer.com[/email], http://www.wieauchimmer.com</text> <text x="5.8918" y="15.2856" class="fil1 fnt1">Geschäftsführung: möchtegerne, Sitz: neine stehe Erfüllungsort und Gerichtsstand: wo auch immer</text> <text x="94.7042" y="15.2856" class="fil1 fnt1">, Firmenbuchgericht: haben keines</text> <text x="35.4986" y="12.4894" class="fil1 fnt2">Flughafen TESTFlughafen,</text> |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
an y-positinen passt auch alles, nur in x gibts die probleme, das sich die texte überschreiben z.B.: die zwei texte überschreiben sich (das , Firmenbuchgericht sollte nach dem wo auch immer stehen, aber der "," fängt schon beim 2ten m von immer an)
Code:
<text x="5.8918" y="15.2856" class="fil1 fnt1">Geschäftsführung: möchtegerne, Sitz: neine stehe Erfüllungsort und Gerichtsstand: wo auch immer</text>
<text x="94.7042" y="15.2856" class="fil1 fnt1">, Firmenbuchgericht: haben keines</text> wenn man die svg mit inkscape oder corel aufmacht, dann passt alles, wie es ist ich vermute, das hier die ausgabe des textes nicht 100% orignalgetreu ist, daher überschreiben sich die texte |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe Dein Bild mal in Opera geöffnet. Da sieht das so aus wie auf dem angehängten Screenshot. In Illustrator überschneiden sich die Texte auch etwas, allerdings beklagt er sich auch über eine fehlende Schrift (Arial Narrow). Nachdem ich mir Dein Bild im Quellcode angesehen habe, muss ich folgendes anmerken: Du verwendest da einen eingebetteten Font (nämlich Arial Narrow). Das unterstützt meine Komponente bisher nicht. Du verwendest CSS-Stylesheets. Auch das kann meine Komponente bisher nicht. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 1)
hallo
also bei mir ist es egal, ob ich die schriftart einbette oder nicht (da diese schriftart auf meinem rechner installiert ist, sieht der ausdruck immer gleich aus) das mit dem css? funktioniert nicht? bei mir zeigt er aber die schriftarten genau so an, wie die in dem css definiert wurden (Also die sachen fett, die fett sind und so weiter) aber auch, wenn ich das ganze ohne css speichere, also die font attribute direkt in jeden text reinspeichern lasse, dann sieht das ganze so aus wie vorher habe mal : *) ohne CSS, direkt in die Texte als Attribute *) Schriftart nicht eingebettet *) Schriftart in Arial gewandelt das resultat ist das gleiche wie vorher, er überschreibt sich texte |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 2)
so, hier mal den vergleich, beides auf meinem rechner einmal mit IE7 und einmal mit der SVG Library
|
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 2)
also, das problem ist, das der text mit der SVG Lib länger wird, als er original sein sollte ....
habe mal einen screenshoot mit kontrolllinien ausgegeben ... [edit]habe auch mal eine SVG mit Adobe Illustrater CS 2 erzeugt, aber selbes Resultat :( |
Re: Vektor Format anzeigen/drucken
@xaromz: siehst noch eine chance, die SVG Import Library so zu ändern, das die Schriften richtig gedruckt werden wie von den anderen Programmen (Coreldraw, Inkscape, IE, firefox, AI)?
Das Problem ist, das ich habe immer einiges an text, und die müssen doch einigermassen exakt positioniert und gedruckt werden (das selbe problem habe ich mit EMF/WMF auch, das die positinierung nicht passt - da war aber der export von corel schuld) |
Re: Vektor Format anzeigen/drucken
Hallo,
momentan habe ich keine rechte Idee, was das Problem ist. Ich schau mir das aber noch mal genauer an. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
(hattest du schon mal ein svg, wo die texte richtig gerendert wurden - also, wo das ende eines textes auch positionsgetreu sein mußte?) wenn du irgendeine hilfe brauchst - einfach melden das ist jetzt der part aus dem svg mit dem einfachen text
Code:
<text x="5.8918" y="12.3474" fill="#131516" font-weight="normal" font-size="2.4694" font-family="Arial">Strasse, Ort und eventuell Land, </text>
|
Re: Vektor Format anzeigen/drucken
hallo xaromz
hattest du schon mal zeit zu schauen, ob dieser fehler behebbar ist? wenn nicht, werde ich mich wohl oder übel nach einem anderen format oder eine andere komponente umsehen müssen :( (nur sind die meisten SVG Komponenten nicht alleine erhältlich sondern immer in verbindung mit anderen CAD Komponenten und kosten dann gleich mal an die 1000 euro, und das ist eindeutig viel zu viel) ich brauche das ganze "nur", um eine druckvorlage zu machen, also, wenn ein Report gedruckt werden soll, dann soll zuvor auf jede A4 seite dieses SVG gedruckt werden, wo statische Informationen zum betrieb sind, daher ist mir das format eigetnlich egal, es sollte nur eines sein, was Linien und co kann, Schriften und Grafiken (PNG, JPG), aber das ganze sollte gleich aussehen wie in einem standardprogramm zb CorelDraw oder Illustrator, damit man sagen kann, CorelDraw aufmachen -> das ganze als SVG mit folgenden einstellungen speichern und dann siehts im program gleich aus! (und bei EMF und WMF geht das zb nicht) |
Re: Vektor Format anzeigen/drucken
Hallo,
ich habe mir das angesehen und konnte in meinem Quellcode keinen Fehler feststellen. Ich weiß also leider nicht, warum das anders aussieht als in anderen Programmen. Wenn ich was neues weiß, werde ich mich melden. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
hab mir noch mal ein paar sachen angeschaut ...
die Höhe der Schrift passt 100% die y-Position der Schrift passt auch 100% aber schon die x-StartPosition also der linke wert der schrift passt absolut nicht (da ist ein versatz von 3mm drinnen) und dann noch die breite die statt 108.5mm 112mm hat (das mit einer Schrift mit Schriftgröße Arial 48) aber der linke versatz müsste doch etwas leichter zu finden sein oder? gibt es irgendwo eine dokumentation zu GDI+? hab mir mal den source etwas angeschaut, und die texte werden da ja mit TGPGraphicsPath.AddString ausgegeben, gibt es eine möglichkeit in GDI+ einen Text "ganz normal" auszugeben, also ohne Path einfach einen text an Position (x, y) auszugeben (vielleicht macht dieses Path da ein paar komische sachen mit dem text) edit: hab mir mal angeschaut, was da alles berechnet wird also ein Textfeld exportiert, und einen rahmen drumherumgemacht der rahmen hat genau die abmessungen von width="111.455" height="12.1121" das Textfeld bekommt bei SetSize die Werte (120,9 * 21,03) und FontHeight berechnet er auf 15,329 warum rechnet das MeasureText so einen großen Rahmen drum herum? -> deshalb sind die Startpsitionen schon mal falsch gibt es da noch wo einstellungen dafür? |
Re: Vektor Format anzeigen/drucken
@xaromz
ist es möglich den Text, der geladen wird zu stauchen? ich möchte probieren, ob es möglich ist, wenn ich den text immer mit einem faktor stauche (entweder fix oder fontheight oder fontsize abhängig) ob dann das richtige ergebnis rauskommt - wäre ein versuch? ich vermute mal ich muß da irgendwas mit der matrix machen oder? kannst mir vielleicht kurz den weg weisen ;) edit: also den offset von x bekomme ich so schon mal fast aufs pixel genau hin
Delphi-Quellcode:
FPath.AddString(FText, Length(FText), FF, FontStyle, GetFontSize, MakePoint(X - 18.5*(fFontHeight / 100), Y - FFontHeight), SF);
|
Re: Vektor Format anzeigen/drucken
tja, ich habe zwar absolut keine ahnung warum ich diese faktoren brauche (habe die jetzt mal mit testen rausbekommen) aber das ergebnis sieht schon mal zu 99% gut aus (ganz kleine abweichungen sind noch drinnen) - werde es noch mal mit mehr texte probieren
Delphi-Quellcode:
ich weiss, ich könnte die zwei translate zusammenfassen, aber so ist es wenigstens etwas übersichtlich ...
scale := 0.971;
M := TGPMatrix.Create; M.Reset; M.Translate(-0.184*fFontHeight, 0, MatrixOrderAppend); M.Scale(scale, 1, MatrixOrderAppend); M.Translate((1-scale)*(X), 0, MatrixOrderAppend); fPath.transform(M); M.Free; |
Re: Vektor Format anzeigen/drucken
Liste der Anhänge anzeigen (Anzahl: 2)
so .... ein großes problem habe ich mit dem text selber noch
und zwar wird bei dem Wort "Test" das e unterschiedlich weit zum T gezeichnet (bei Corel wird das e etwas ins T geschoben) bei GDI+ wird das e vom T weiter weggeschoben, das erklärt jetzt noch die Probleme mit verschiedenen Texten Ist das irgendeine Einstellung? also das die buchstaben nicht vom äussersten punkt berechnet werden sollen? hab die zwei screenshoots angehängt, damits klarer ist was ich meine ... |
Re: Vektor Format anzeigen/drucken
Hallo,
ein interessantes Selbstgespräch führst Du hier :wink: . Ich antworte mal auf ein paar Dinge: Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich schau mal, ob ich am Wochenende etwas Zeit habe, da noch gründlicher zu forschen. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Gruß xaromz |
Re: Vektor Format anzeigen/drucken
weiss eigetnlich wer, wie man das nennt, wenn zB CorelDraw "Te" schreibt, das das e etwas unter das T geschoben wird, aber wenn man zb Tk schreibt nicht?
Denn, wenn ich CorelDraw (oder AI) das ausreden kann, das er das e unters T schiebt, dann wäre mir auch schon geholfen mir ist nur wichtig, das ich ein 99.9% überinstimmung zwischen CorelDraw und der importierten Grafik erhalte ... |
Re: Vektor Format anzeigen/drucken
Man nennt das 'Kerning'. Der optische Abstand zwischen einem 'T' und einem 'e' ist anders, als zwischen einem 'H' und einem 'e', da das 'H' rechts mit einem Strich abschließt. Damit die Schrift leichter zu lesen ist und 'Te' scheibar genauso dicht ist, wie 'He', schiebt man das 'e' beim 'Te' etwas nach links. Im Übrigen ist das ein Qualitätsmerkmal. Handgebissene Amateurfonts haben so etwas nicht und dann sieht ein Text irgendwie 'sch****' aus...
Für jeden Font existiert eine Tabelle mit allen Kombinationen aus 2 Buchstaben, für die der Fontdesigner ein Kerning festgelegt hat. Einige Renderer meinen, das das Kerning nur bei Überschriften eine Rolle spielt. Eventuell hat Corel diese Einstellung. Windows/GDI sollte das aber können. |
Re: Vektor Format anzeigen/drucken
ah, danke das wort habe ich gesucht "kerning" ... das es ein qualitätsfeature ist, war mir schon bewusst, da es ja besser aussieht, wenn er das macht, nur mir ist es eben wichtig, das es auch funktioniert, und wenn der SVG Import/GDI+ oder wer auch immer das nicht kann, und die software das so ausgibt, dann hat man das problem, das der text mehr platz braucht, und den nächsten text überschreibt, und DAS sieht dann noch blöder aus.
Habes es mal mit 08/15 TextOut probiert, da macht er kein kerning
Delphi-Quellcode:
werde mich aber mal auf die suche machen mit kerning und corel und gdi ...
Image1.Canvas.Font.Name := 'Arial';
Image1.Canvas.Font.Size := 200; Image1.Canvas.TextOut(0, 0, 'Te'); Image1.Canvas.TextOut(0, 250, 'He'); |
Re: Vektor Format anzeigen/drucken
Mich würde Dein Rechercheergebnis interessieren.
|
Re: Vektor Format anzeigen/drucken
Hallo,
Heureka! Auf meiner Seite ( ![]() Zur Erklärung: In GDI+ kann man ein StringFormat festlegen. Dieses muss vom Typ "GenericTypographic" sein, damit das Kerning funktionert. Gruß xaromz |
Re: Vektor Format anzeigen/drucken
Zitat:
aber das problem mit dem kerning Te <-> Th ist noch immer da habe auch noch nicht wirklich viel infos dazu gefunden, da ja kerning nur den abstand zwischen buchstaben definiert, aber nicht, das zwischen Te weniger abstand als zwischen Th ist ... |
Re: Vektor Format anzeigen/drucken
Hallo,
Zitat:
Zitat:
![]() Gruß xaromz |
Re: Vektor Format anzeigen/drucken
habe es mit folgendem probiert ...
Code:
da sollte der erste Text nicht so viel platz brauchen wie der zweite ... (im coreldraw ist das ca ein ganzes A)
<text x="6.0803" y="2.6891" fill="#1F1A17" font-weight="normal" font-size="2.4694" font-family="Arial">AVAVAVAV</text>
<text x="6.0803" y="5.4478" fill="#1F1A17" font-weight="normal" font-size="2.4694" font-family="Arial">AAAAVVVV</text> hab auch extra geschaut, das er im sourcecode in das GenericTypograph reinspringt ... (macht er) hast du ein SVG, wo er das kerning richtig macht? stimm, auf der wiki seite ist es so eindeutig beschreiben, aber wenn du nach Corel und kerning suchst, dann siehts so aus, als ob die mit kerning den default abstand zwischen den buchstaben meinen, also nicht den speziellen, bei A und V. |
Re: Vektor Format anzeigen/drucken
Ich habe nicht einmal die Komponenten installiert bekommen... :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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