Ich erstelle ein größeres , mehrseitiges PDF in welches wiederum pro Seite 15 weitere PDF eingefügt werden. Wenn eine Seite voll ist (alle 15 Elemente eingefügt ) sollte diese eigentlich auf Platte geschrieben werden ( eben um den Hauptspeicherbedarf zu minimieren), offensichtlich macht PDF::API2 das aber nicht, denn nach einigen Seiten bricht es ab mit "out of memory".
Jedes der eingefügten PDF hat ca 25MB auf Platte , das ganze PDF enthält ca 600 davon !
Hier mal der Code (auszugsweise):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PAGE: while ($cnt < @$snippets ) {
my $p2 = $pdf->importpage($vorlage, 2);
my $gfx = $p2->gfx;
$pcnt = 0;
for my $row ( 0..$max_rows2 - 1 ) {
for my $col ( 0..$max_cols - 1 ) {
next PAGE if $cnt >= @$snippets || $pcnt > $max_cols * $max_rows2; last PAGE unless $snippets->[$cnt];
my $spdf = PDF::API2->open( $snippets->[$cnt]);
my $xo = $pdf->importPageIntoForm($spdf,1);
$spdf->end;
$gfx->formimage($xo, $x0+ $col*$dw, $y2-$row*$dh, 1);
$cnt++;
$pcnt++;
}
}
$pdf->finishobjects($p2, $gfx);
}
in Zeile 11 wird mit
$spdf->end das eingefügte PDF "gelöscht", das scheint auch zu funktionieren. In Zeile 18 sollte dann die Seite mit
$pdf->finishobjects($p2, $gfx); geschrieben und (idealerweise) auch aus dem Hauptspeicher gelöscht werden, was aber vermutlich nicht passiert da der speicherbedarf stetig zunimmt bis er eben aus ist.
So, jetzt bitte keine Antworten der Art "Dann bau doch mehr Ram ein" . Es geht um die Frage, ob und wie so ein Problem mit PDF::API2 gelöst werden kann. Wir arbeiten hier mit Druckdaten und die sind schon mal etwas größer :-)
Rolf