Einzelnen Beitrag anzeigen

thomas2009
(Gast)

n/a Beiträge
 
#1

TPrintpreview / sdPDF Frage wegen Fehler

  Alt 23. Apr 2011, 13:20
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;
Miniaturansicht angehängter Grafiken
dspdf_fehler.jpg  
  Mit Zitat antworten Zitat