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