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 Seite. 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz