Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch (https://www.delphipraxis.net/159823-quickpdf-7-19-renderpagetostream-und-mehrseitenpdf-ram-verbrauch.html)

hoika 14. Apr 2011 10:46

QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch
 
Hallo,

folgender Code (von der QPDF-Seite) zeigt eine Seite eines PDF's an.

Delphi-Quellcode:
procedure TForm.RenderPage;
var
  BM        : TBitmap;
  MS        : TMemoryStream;
  DPI       : Integer;
  JpegStream : Tmemorystream;
  JPEG      : TJpegImage;
  JpegImage : Timage;
begin
  MyTrace('RenderPage: Start');

  MyTrace('RenderPage: ScrollBar: Start');
  BM := TBitmap.Create;
  try
    imgPreview.Picture.Assign(BM);
    PreviewScrollBox.HorzScrollBar.Position := 0;
    PreviewScrollBox.VertScrollBar.Position := 0;
    imgPreview.Left := 0;
    imgPreview.Top := 0;
  finally
    BM.Free;
  end;
  MyTrace('RenderPage: ScrollBar: End');

  JPEG      := TJpegImage.create;
  JpegStream := Tmemorystream.Create;
  JpegImage := Timage.Create(self);
  MS        := TMemoryStream.Create;
  try
    DPI := ((cmbZoom.ItemIndex + 1) * 25 * 96) div 100;
    MyTrace('RenderPage: RenderPageToStream: DPI='+IntToStr(DPI)+' : Start');

    MessageBox(0, 'RenderPage: Start', '', 0);


//    QPDF.RenderPageToStream(DPI, ViewPrintPageNum, 0{BMP}, MS);
//    MyTrace('RenderPage: RenderPageToStream: Stream-Size='+IntToStr(MS.Size));

    JpegStream.Clear;
    QPDF.RenderPageToStream(DPI, ViewPrintPageNum, 1{JPG}, JpegStream);
    MyTrace('RenderPage: RenderPageToStream: Stream-Size='+IntToStr(JpegStream.Size));

    MessageBox(0, 'RenderPage: End', '', 0);

    MyTrace('RenderPage: RenderPageToStream: End');
//    MS.Seek(0, soFromBeginning);
    JpegStream.Seek(0, soFromBeginning);
    BM := TBitmap.Create;
    try
      MyTrace('RenderPage: LoadFromStream: Start');

      JPEG.LoadFromStream(jpegstream);
      jpegimage.Picture.Assign(JPEG);

//      BM.LoadFromStream(MS);
      MyTrace('RenderPage: LoadFromStream: End');

      imgPreview.AutoSize := True;
      MyTrace('RenderPage: Picture.Assign: Start');
//      imgPreview.Picture.Assign(BM);
      imgPreview.Picture.Assign(jpegimage.Picture.Graphic);
      MyTrace('RenderPage: Picture.Assign: End');
    finally
      BM.Free;
    end;
  finally
    MS.Free;
    JPEG.Free;
    JpegStream.Free;
    JpegImage.Free;
  end;

  MyTrace('RenderPage: End');
end { RenderPage } ;
Problem: die Stelle QPDF.RenderPageToStream verballert 300-400 MB Speicher !!!
DPI ist 46, die PDF enthält nur Text (Stream-Size 30 kB).

Das Speicherproblem tritt nur auf, wenn das PDF mehr als eine Seite hat.
#Update#: Falsch, es tritt immer auf !


Wie man am Code sieht, hatte ich zuerst mit Bitmap, dann mit JPEG gespielt.


Kennt jemand das Problem ?


Danke


Heiko

ULIK 14. Apr 2011 14:24

AW: QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch
 
Hallo,

hab's grad mit der aktuellen 7.24 getestet: ich kann das nur nachstellen, wenn ich mit 1200 DPI render. Dann schnellt der Speicherverbrauch nach oben.
Welche DPI-Werte verwendest Du denn?


Grüße,
Uli

hoika 14. Apr 2011 14:57

AW: QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch
 
Hallo,

48 (50%) bzw. 96 DPI (100%).
Ich habe festgestellt, dass das "nur" unter XP passiert.


Heiko

ULIK 14. Apr 2011 15:30

AW: QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch
 
Darum, ich hab's hier unter Windows 7 getestet.

hoika 15. Apr 2011 17:57

AW: QuickPDF 7.19: RenderPageToStream und MehrseitenPDF -> RAM-Verbrauch
 
Hallo,

hm, ein Fehler von mir hat bei jedem Fontwechsel einen neuen Font zum PDF addiert (AddTrueTypeFont),
auch wenn der Font schon da war.

Jetzt ist der RAM-Verbrauch von 500 MB auf 120 MB gesunken.
Noch nicht das wahre, aber immerhin.


Heiko


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