Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TPrintpreview / sdPDF Frage wegen Fehler (https://www.delphipraxis.net/160019-tprintpreview-sdpdf-frage-wegen-fehler.html)

thomas2009 23. Apr 2011 12:20

TPrintpreview / sdPDF Frage wegen Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich teste gerade diese Komponente Ohne Erfahrung mit der Sache:?
Ich lege mein Bild in Printpreview einfach so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Rect1: TRect;
begin
  with Form2.PrintPreview do
  begin
    BeginDoc;
 try
      Rect1 := Rect(40,40, Image1.width*40, Image1.Height*40);
      Canvas.StretchDraw(Rect1, Image1.Picture.Graphic);
    finally
      EndDoc;
    end;
  end;
  Form2.Show; // preview Form
end;
Das Bild erscheint nun in Printpreview Form
Nun möchte ich das Bild als PDF speichern, indem Ich auf PDF Symbole in Preview Form Klicke

Preview unit wo Fehler erscheint :
Delphi-Quellcode:
...
procedure TPrintPreview.SaveAsPDF(const FileName: String);
var
  PageNo: Integer;
{$IFDEF SYNOPSE}
  pdf: TPdfDocument;
{$ELSE}
  AnyPageRendered: Boolean;
{$ENDIF}
begin
{$IFDEF SYNOPSE}
  pdf := TPdfDocument.Create;
  try
    ChangeState(psSavingPDF);
    try
      pdf.Info.CreationDate := Now;
      pdf.Info.Creator := PDFDocumentInfo.Creator;
      pdf.Info.Author := PDFDocumentInfo.Author;
      pdf.Info.Subject := PDFDocumentInfo.Subject;
      pdf.Info.Title := PDFDocumentInfo.Title;
      pdf.DefaultPageWidth := ConvertX(PaperWidth, Units, mmPoints);
      pdf.DefaultPageHeight := ConvertY(PaperHeight, Units, mmPoints);
      pdf.NewDoc;
      DoProgress(0, TotalPages);
      for PageNo := 1 to TotalPages do
      begin
        case DoPageProcessing(PageNo) of
          pcAccept:
          begin
            pdf.AddPage;
            pdf.Canvas.RenderMetaFile(Pages[PageNo]);
          end;
          pcCancellAll:
            Exit;
        end;
        DoProgress(PageNo, TotalPages);
      end;
      pdf.SaveToFile(FileName);
    finally
      ChangeState(psReady);
    end;
  finally
    pdf.Free;
  end;
{$ELSE}
  if dsPDF.Exists then
  begin
    ChangeState(psSavingPDF);
    try
      dsPDF.BeginDoc(AnsiString(FileName));
      try
        dsPDF.SetDocumentInfoEx(PDFDocumentInfo);
        AnyPageRendered := False;
        DoProgress(0, TotalPages);
        for PageNo := 1 to TotalPages do
        begin
          case DoPageProcessing(PageNo) of
            pcAccept:
            begin
              if AnyPageRendered then
                dsPDF.NewPage;
              dsPDF.SetPage(PaperType, Orientation,
                ConvertX(PaperWidth, Units, mmHiMetric),
                ConvertY(PaperHeight, Units, mmHiMetric));
              dsPDF.RenderMetaFile(Pages[PageNo]);
              AnyPageRendered := True;
            end;
            pcCancellAll:
              Exit;
          end;
          DoProgress(PageNo, TotalPages);
        end;
      finally
        dsPDF.EndDoc; // Fehler wird hier markiert
      end;
    finally
      ChangeState(psReady);
    end;
  end
  else
    raise EPDFLibraryError.Create(SdsPDFError);
{$ENDIF}
end;

DeddyH 23. Apr 2011 12:50

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Er kann wohl die Datei nicht erzeugen. Woran das liegt, musst Du selbst herausfinden, möglicherweise ein Layer 8-Error :mrgreen:

thomas2009 23. Apr 2011 13:14

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Das Liegt nicht an dsPDF selbe sondern an meinen Code, wie ich das Bild in Printpreview lade

Ich teste das Demo von dem Autor ohne Änderung. Ich wollte nur mein eignes Bild als PDF speichern und nicht das Bild von dem Demo

mkinzler 23. Apr 2011 13:18

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Ich sehe dort aber keinen Anhaltspunkt für dein Bild

DeddyH 23. Apr 2011 13:37

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Nun wäre interessant zu wissen, was in FileName steht.

Jens01 23. Apr 2011 20:05

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Hast Du Dir diese zusätzlichen pdf-Komponenten heruntergeladen und zugänglich gemacht.
Ggf den Schalter für SYNOPSE ein- oder ausgeschaltet?

[EDIT]
Nee, das wird es nicht sein. Er kann die Datei wohl nicht schreiben.

thomas2009 23. Apr 2011 21:31

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Das Problem lag wie ich gedacht habe, an die Methode, wie ich das Bild in Printpreview Form lade

Nun verwende ich die Printpreview Funktion :
Delphi-Quellcode:
procedure TForm2.DrawImageOnlyPage;
var
  PR: TRect;
begin
  with PrintPreview do
  begin
PR := PageBoundsAfterMargin;
...
 PaintGraphicEx(PR, Form1.Image1.Picture.Graphic, True, False, True);
  end;
end;
Dann erscheint keine Fehlermeldung

Jens01 23. Apr 2011 22:08

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Richtig, für Bitmaps usw brauchst Du dies PaintGraphicEx, sonst kannst Du aber das Canvas von Printpreview einfach benutzen. Ich schreibe da z.B. direkt mit Textout drauf, Linien gehen auch.

himitsu 24. Apr 2011 00:14

AW: TPrintpreview / sdPDF Frage wegen Fehler
 
Zitat:

Das Problem lag wie ich gedacht habe, an die Methode, wie ich das Bild in Printpreview Form lade
Und wozu hat man da jetzt uns gebraucht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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