Schrift
[thread]5868[/thread]

Kann hier irgendwer PDF::API2?: Speichernutzung lässt mich verzweifeln

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
macMeck
 2003-10-31 19:29
#68451 #68451
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Hi,

hat von euch schon jemand effektiv mit PDF::API2 gearbeitet? Ich brauche ein Module, mit dem ich PDF-Vorlagen importieren, Grafiken reinstellen und Texte schreiben kann. Das einzige, dass ich gefunden habe, dass das vernünftig kann ist PDF::API2.

Wenn ich das jedoch benutze und einige PDFs nacheinander erstellen will, nutzt das Teil immer mehr Speicher, bis sich hier alles aufhängt. Hab hier mal eine abgespeckte Version für euch zum probieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl 
use strict;

use PDF::API2;

my $api2 = 0;

foreach (1..100) {
&pdfapi2();
}

exit();


sub pdfapi2 {

$api2++;
printf ("%03d. time PDF::API2\n", $api2) if ($api2 % 10 == 0);

foreach my $i (1..10) {

# -------------------------------
# ---------- Variables ----------
# -------------------------------
my $page = my $text = my $fontArial = my $fontArialBold = my $fontVerdana = undef;

my $pdf = PDF::API2->new(-file => sprintf("file%04d.pdf", $i));
my $importFile = 'form.pdf';

my $importPdf = PDF::API2->open($importFile);
foreach my $pageNr (1..$importPdf->pages()) {
$pdf->importpage($importPdf, 1);
}

# --------------------------
# ---------- Init ----------
# --------------------------
$page = $pdf->openpage(1);
$pdf->preferences(-firstpage => [$page, -fit => 1]);
$fontArial = $pdf->corefont('Arial', -encode => 'latin1');
$fontArialBold = $pdf->corefont('Arial,Bold', -encode => 'latin1');
$fontVerdana = $pdf->corefont('Verdana', -encode => 'latin1');

$page = $pdf->openpage(1);
$text = $page->text();

# -----------------------------
# ---------- Content ----------
# -----------------------------
$text->font($fontVerdana, 10);

$text->transform(-translate => [200, 200]);
$text->text('Just another PDF-File...');

# ------------------------------------
# ---------- Save & release ----------
# ------------------------------------
$pdf->save();

$importPdf->release();
$pdf->release();
}
}

Hab ich da irgendwas vergessen aufzuräumen oder ist das halt einfach so bei dem Modul? Habs mit der Version 0.3r77 versucht. Kann mir jemand auf die Sprünge helfen?

Oder weiß jemand ein anderes Modul, dass das kann? PDF::Reuse hab ich auch schon versucht. Das ist zwar schneller, aber das kann beispielsweise keine Texte über mehrere Zeilen schreiben und kommt daher nicht in Frage.
Wie erstellt ihr denn eure PDFs?

Grüsse

macMeck
It all works, as long as it's documented!
weismat
 2003-11-05 08:43
#68452 #68452
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich habe neben dem release auch noch ein end in der PDF2 Doku gesehen. Probier das doch mal aus.
Ansonsten musst Du halt aus dem Sub ein eigenes Programm machen, das Parameter übernimmt und dann aus dem Hauptskript mehrmals das Unterskript aufrufen. Das ist zwar schlecht für das Laufzeitverhaltens wegen des Overheads für die Prozessgenerierung, aber für den Speicher sollte es besser sein, außerdem kannst Du dann auch eventuell mehrere PDFs parallel generieren, wenn Du nicht auf das Ende der Subprozesse wartest.
Strat
 2003-11-05 12:36
#68453 #68453
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich hatte mal dasselbe problem, habe es allerdings dann anders geloest (fuer windows).
habe mir einen druckertreiber namens PDFCreator installiert, mit dem ich direkt nach PDF ausdrucken kann, und habe das zeug mit HTML geschrieben, ueber die seitenvorschau des IE manuell formatiert. Einfach bei Google nach PDFCreator suchen, und du findest es schnell\n\n

<!--EDIT|Strat|1068028631-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
macMeck
 2003-11-05 15:44
#68454 #68454
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
@weismat: Das mit dem $pdf->end hab ich auch schon versucht. Bringt aber irgendwie alles nix :(

@strat: Geht in dem Fall nicht, weil das am Ende einer monatlichen Abrechnung für später mal (hoffentlich) einige hundert Kunden passieren soll. Da seitenvorschau ich mir ja einen ab :D

macMeck\n\n

<!--EDIT|macMeck|1068039928-->
It all works, as long as it's documented!
esskar
 2003-11-05 16:12
#68455 #68455
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
kann man $page und $text auch noch irgendwie freigeben?
macMeck
 2003-11-05 18:07
#68456 #68456
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
Kann man schon machen. Man kann auch die Schriftarten freigeben, bringt aber alles irgendwie nix. Der Speicher läuft immer noch voll...

macMeck
It all works, as long as it's documented!
esskar
 2003-11-06 01:46
#68457 #68457
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=macMeck,05.11.2003, 17:07]Kann man schon machen. Man kann auch die Schriftarten freigeben, bringt aber alles irgendwie nix. Der Speicher läuft immer noch voll...

macMeck[/quote]
kannst du nachvollziehen, wann es genau passiert?
also, passiert es immer noch, wenn du was bestimmtes nicht tust, oder so?!?
Strat
 2003-11-06 02:34
#68458 #68458
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich habe mich damit noch nie naeher beschaeftigt, und sehe deshalb auch nicht, wo da der speicher gefressen wird. Vielleicht als zwischenloesung fuer jedes PDF ein eigenes script starten?

sonst koennte man hoechstens mal undef($pdf) und undef($importPdf) probieren, aber das wird wohl nichts bringen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
macMeck
 2003-11-06 03:17
#68459 #68459
User since
2003-08-04
162 Artikel
BenutzerIn
[default_avatar]
@esskar: Nee, kann leider nicht rausbekommen, wo genau das passiert. Habe es unter Win2000 getestet und sehe halt da im TaskManager, dass die Speichernutzung langsam gegen unendlich laeuft. Unter Linux ist es uebrigens das gleiche...

@strat: Ein undef hilft auch nicht weiter. Das Objekt wird am Ende des Blocks ja ohnehin zerstoert.

macMeck\n\n

<!--EDIT|macMeck|1068081500-->
It all works, as long as it's documented!
root
 2004-12-09 21:45
#68460 #68460
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Hast Du das Problem gelöst? Ich möchte auch Rechnungen auf einen PDF-Briefbogen erstellen. Das müssen doch tausende von Leuten machen. Warum finde ich dazu nix?
Die schreien alle immer nur "PHP" - igitigit!

Was ist denn mit PDF::Template?
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2003-10-31 19:29.