AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Vektor Format anzeigen/drucken
Thema durchsuchen
Ansicht
Themen-Optionen

Vektor Format anzeigen/drucken

Ein Thema von Gruber_Hans_12345 · begonnen am 5. Nov 2007 · letzter Beitrag vom 24. Nov 2007
 
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#11

Re: Vektor Format anzeigen/drucken

  Alt 17. Nov 2007, 16:32
Hallo,

das Drucken ist immer so eine Sache... Ich verwende da folgende Routine:
Delphi-Quellcode:
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;
Ob das bei Dir funktioniert, musst Du allerding selbst ausprobieren.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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