AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Druckjob Speichergröße
Thema durchsuchen
Ansicht
Themen-Optionen

Druckjob Speichergröße

Ein Thema von MyRealName · begonnen am 5. Okt 2021 · letzter Beitrag vom 5. Okt 2021
Antwort Antwort
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#1

Druckjob Speichergröße

  Alt 5. Okt 2021, 11:32
Hallo,

ich schlage mich gerade mit dem Support von DevExpress rum, die diesmal so hilfreich sind wie ein 6. Zeh.
Es geht um das Drucken von vielen Bildern in einem Druckjob, also zwischen Printer.BeginDoc und Printer.EndDoc.
Bei DevExpress läuft mit der Speicher voll mit dem TdxComponentPrinter. Ich habe beim Reportbauen schon optimiert, das verbraucht jetzt nur noch minimal Speicher, aber wenn ich es dann zum Drucker sende, schießt der Speicherverbrauch nach oben.
Mein Chef meint, dann müssen wir es eben selbst drucken. Was ok ist... aber..

Ich will (bevor ich den Umbau anfange) eine Sache klären :
So ein Druckjob läuft ja so, dass ich BeginDoc mache, dann drauf male, dann NewPage, dann wieder drauf male, dann wieder NewPage etc etc. und dann irgendwann EndDoc.

Alles was da an Seiten so anfällt füllt meinen Speicher oder geht an den Druckmanager von Windows ? weil bei 400 Seiten kann das schon ein bissl was sein...

Danke schonmal



Edit: hab mal was gebaut, sieht aus als würde da kein extra Speicher benutzt werden. DevExpress scheint da irgendwie der Meinung zu sein, alles buffern zu müssen.
Ich habe es mit folgendem Code getestet :

Zitat:
procedure TForm1.Button3Click(Sender: TObject);
var
R: TRect;
scale: Double;
Bitmap1: TBitmap;
Pic: TdxSmartImage;
begin
Printer.BeginDoc;

for var j := 0 to 9 do
begin
if j > 0 then
Printer.NewPage;
dxImageSlider1.MultiFrameImage.LoadFromFile(gLocal Path + 'example.tif');
for var i := 0 to dxImageSlider1.MultiFrameImage.AnimationFrameCount - 1 do
begin
dxImageSlider1.MultiFrameImage.ActiveFrame := i;
Bitmap1 := dxImageSlider1.MultiFrameImage.GetAsBitmap;

scale := Printer.PageWidth / Bitmap1.Width;
R.Left := 0;
R.Top := 0;
R.Right := trunc(Bitmap1.Width * scale);
R.Bottom := trunc(Bitmap1.Height * scale);

printer.canvas.stretchdraw(R, Bitmap1);
FreeAndNil(Bitmap1);
if i < dxImageSlider1.MultiFrameImage.AnimationFrameCount - 1 then
Printer.NewPage;
end;
end;
Printer.EndDoc;
end;

Geändert von MyRealName ( 5. Okt 2021 um 12:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Druckjob Speichergröße

  Alt 5. Okt 2021, 12:51
Wenn ich mich richtig erinnere, wird alles, was du an den Drucker schickst in BMP umgewandelt. Wenn du dir also zwischen BeginDoc und EndDoc 400 Seiten zusammenbaust, wird der Druckjob entsprechend viel Speicher verbrauchen.
Eine Seite mit einem Farbbild und 150 dpi braucht dann schon über 6,5MB. Mal 400 ergibt einen Speicherbedarf von über 2,5 GB. Bei 300 dpi sind das pro Seite über 24 MB und insgesamt ca. 10 GB. Und das sind nur die reinen Bilddaten.

Also selbst wenn ihr das nich mit DevExpress macht, habt ihr einen entsprechend hohen Speicherbedarf. Wenn das zuviel bei euch ist, könnte es im ersten Schritt vielleicht helfen, die 400 Seiten aufzuteilen und in Schritten von 50 Seiten zu drucken.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Druckjob Speichergröße

  Alt 5. Okt 2021, 13:27
Mit dem obigen Code habe ich nur immer kurze Spitzen wenn ein bild von Tiff zu Bitmap gewandelt wird um es auf den Canvas zu schreiben. Wenn ich die Schleife durch bin und 33 Seiten gesendet habe (vor EndDoc), dann bin ich bei 9 MB im Speicher für die exe.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:59 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