Template genereren met Imagick
Op het moment ben ik bezig met een script van een afbeelding maakt (png) van teksten.
Het probleem is dat ik een positie moet kunnen opgeven vanaf waar de tekst begint, en dan moet kunnen aangeven hoe groot het vak moet zijn waar de tekst in moet komen.
Bovenstaande is mij gelukt met Imagick, probleem is echter dat wanneer de tekst er niet op past, de tekst die er af valt op een nieuwe pagina moet komen.
Ik krijg dit niet voor elkaar en heb totaal geen idee hoe ik kan uitrekenen welke tekst op de volgende pagina moet komen.
Onderstaand script gebruik ik voor één pagina te maken.
Code (php)
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
64
65
66
67
68
69
70
71
72
73
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
64
65
66
67
68
69
70
71
72
73
<?php
set_time_limit( 0 );
////////////////////////////////////////////////////////////////////////////////////
$imTitleWidth = 500;
$imTitleHeight = 50;
$imTitle = new Imagick();
$imTitle->setBackgroundColor( "transparent" );
$imTitle->setFont( "Calibri.ttf" );
$imTitle->setpointsize( "36px" );
$imTitle->setOption( "fill", "#5d00f5" );
$imTitle->newPseudoImage( $imTitleWidth, $imTitleHeight, "caption:Reünie De Ranonkel" );
$imTitle->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$imTextWidth = 1000;
$imTextHeight = 530;
$text = "Een werkgroep is bezig met het organiseren van een reünie van de eerste jaren van openbare basisschool De Ranonkel in Someren.
Daarvoor worden ouders, kinderen en leerkrachten uitgenodigd, die in de jaren 1990-1998 betrokken waren bij de Ranonkel; van de houten noodbouw tot tweejaar in het nieuwe gebouw aan de Dommel: de pioniers van de openbare school.
De reünie vindt plaats in De Ranonkel zelf op zaterdag 22 juni van 14.00 uur tot 17.00 uur.
De werkgroep wil voor een hapje en een drankje zorgen en daarom wordt aan iedere bezoeker een bijdrage gevraagd in de kosten van € 5.
Aanmelden kan tot 15 juni bij Loes Verbeten via e-mail [email protected].
De opgave wordt definitief na overmaking van het verschuldigde bedrag op rekeningnr: 0156403463 t.n.v. L. Verbeten";
$imText = new Imagick();
$imText->setBackgroundColor( "transparent" );
$imText->setFont( "Calibri.ttf" );
$imText->setpointsize( "23px" );
$imText->setOption( "fill", "#ff0000" );
$imText->newPseudoImage( $imTextWidth, $imTextHeight, "caption:" . $text );
$imText->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$imPageWidth = 40;
$imPageHeight = 40;
$imPage = new Imagick();
$imPage->setBackgroundColor( "transparent" );
$imPage->setFont( "Calibri.ttf" );
$imPage->setpointsize( "20px" );
$imPage->setOption( "fill", "#000000" );
$imPage->newPseudoImage( $imPageWidth, $imPageHeight, "caption:1|1" );
$imPage->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$image = new Imagick();
$image->readImage( 'nieuws_brandweer.png' );
$image->compositeImage( $imTitle, imagick::COMPOSITE_OVER, "216px", "28px" );
$image->compositeImage( $imText, imagick::COMPOSITE_OVER, 216, 131 );
$image->compositeImage( $imPage, imagick::COMPOSITE_OVER, 1219, 672 );
$image->writeImages( 'test-1.png', true );
header( "Content-Type: image/png" );
echo $image;
?>
set_time_limit( 0 );
////////////////////////////////////////////////////////////////////////////////////
$imTitleWidth = 500;
$imTitleHeight = 50;
$imTitle = new Imagick();
$imTitle->setBackgroundColor( "transparent" );
$imTitle->setFont( "Calibri.ttf" );
$imTitle->setpointsize( "36px" );
$imTitle->setOption( "fill", "#5d00f5" );
$imTitle->newPseudoImage( $imTitleWidth, $imTitleHeight, "caption:Reünie De Ranonkel" );
$imTitle->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$imTextWidth = 1000;
$imTextHeight = 530;
$text = "Een werkgroep is bezig met het organiseren van een reünie van de eerste jaren van openbare basisschool De Ranonkel in Someren.
Daarvoor worden ouders, kinderen en leerkrachten uitgenodigd, die in de jaren 1990-1998 betrokken waren bij de Ranonkel; van de houten noodbouw tot tweejaar in het nieuwe gebouw aan de Dommel: de pioniers van de openbare school.
De reünie vindt plaats in De Ranonkel zelf op zaterdag 22 juni van 14.00 uur tot 17.00 uur.
De werkgroep wil voor een hapje en een drankje zorgen en daarom wordt aan iedere bezoeker een bijdrage gevraagd in de kosten van € 5.
Aanmelden kan tot 15 juni bij Loes Verbeten via e-mail [email protected].
De opgave wordt definitief na overmaking van het verschuldigde bedrag op rekeningnr: 0156403463 t.n.v. L. Verbeten";
$imText = new Imagick();
$imText->setBackgroundColor( "transparent" );
$imText->setFont( "Calibri.ttf" );
$imText->setpointsize( "23px" );
$imText->setOption( "fill", "#ff0000" );
$imText->newPseudoImage( $imTextWidth, $imTextHeight, "caption:" . $text );
$imText->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$imPageWidth = 40;
$imPageHeight = 40;
$imPage = new Imagick();
$imPage->setBackgroundColor( "transparent" );
$imPage->setFont( "Calibri.ttf" );
$imPage->setpointsize( "20px" );
$imPage->setOption( "fill", "#000000" );
$imPage->newPseudoImage( $imPageWidth, $imPageHeight, "caption:1|1" );
$imPage->setImageFormat( "png" ) ;
////////////////////////////////////////////////////////////////////////////////////
$image = new Imagick();
$image->readImage( 'nieuws_brandweer.png' );
$image->compositeImage( $imTitle, imagick::COMPOSITE_OVER, "216px", "28px" );
$image->compositeImage( $imText, imagick::COMPOSITE_OVER, 216, 131 );
$image->compositeImage( $imPage, imagick::COMPOSITE_OVER, 1219, 672 );
$image->writeImages( 'test-1.png', true );
header( "Content-Type: image/png" );
echo $image;
?>
Tom Swinkels op 10/04/2013 15:40:15:
Ik krijg dit niet voor elkaar en heb totaal geen idee hoe ik kan uitrekenen welke tekst op de volgende pagina moet komen.
je bedoelt op een nieuwe regel?
Dan zou je kunnen proberen met wordwrap.
Ik ben niet bekend met wordwrap of deze \n herkent als een nieuwe regel.
Dit zorgt er alleen niet voor dat je hele worden krijgt, maar om de 8 karakters gooit het een \n toe
Gewijzigd op 10/04/2013 15:53:41 door Dennis WhoCares
Ik moet dus op een of andere manier uitrekenen hoeveel tekens in het vak van 1000x530 passen, en op die manier uitrekenen. Alleen de ene keer zijn de letters groter dan de andere keer, dus hoe reken ik uit hoeveel tekens er op passen?
Dat is best lastig, je zou voor de grote van elke lettertypegrote moeten testen hoeveel er in het hele vak past
aantal regels en aantal karakters naast elkaar
Dit telt hoeveel regels je hebt in je tekst.
Daar zul je dan wat mee moeten doen
Ik weet niet of de bijv. 20px de hoogte is van je tekst.
Maar je zou ook de hoogte van het plaatje kunnen delen door 20px
en zoveel rijen kun er in het plaatje past.
Heeft je tekst meer regels, dan zul je je tekst moeten opdelen en voor ieder deel opnieuw plaatje / 'pagina' maken
Gewijzigd op 10/04/2013 16:17:05 door Dennis WhoCares
2. maak een lus waarmee je telkens één woord aan een zin toevoegd.
daarna gebruik je de queryFontMetrics functie om een array van fontafmetingen te krijgen
(je moet onderstaande code even proberen en kijken welk item uit de array van toepassing is)
zolang de zin niet te lang is blijf je woorden toevoegen.
Indien de zin wel te lang is haal je het laatste woord er weer af en begin je met een nieuwe zin.
leuke uitdaging!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/* Create a new Imagick object */
$im = new Imagick();
/* Create an ImagickDraw object */
$draw = new ImagickDraw();
/* Set the font */
$draw->setFont('/path/to/font.ttf');
/* Dump the font metrics, autodetect multiline */
var_dump($im->queryFontMetrics($draw, "Hello World!"));
?>
/* Create a new Imagick object */
$im = new Imagick();
/* Create an ImagickDraw object */
$draw = new ImagickDraw();
/* Set the font */
$draw->setFont('/path/to/font.ttf');
/* Dump the font metrics, autodetect multiline */
var_dump($im->queryFontMetrics($draw, "Hello World!"));
?>
Code (php)
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
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
<?php
$text = "Een werkgroep is bezig met het organiseren van een reünie van de eerste jaren van openbare basisschool De Ranonkel in Someren.
Daarvoor worden ouders, kinderen en leerkrachten uitgenodigd, die in de jaren 1990-1998 betrokken waren bij de Ranonkel; van de houten noodbouw tot tweejaar in het nieuwe gebouw aan de Dommel: de pioniers van de openbare school.
De reünie vindt plaats in De Ranonkel zelf op zaterdag 22 juni van 14.00 uur tot 17.00 uur.
De werkgroep wil voor een hapje en een drankje zorgen en daarom wordt aan iedere bezoeker een bijdrage gevraagd in de kosten van € 5.
Aanmelden kan tot 15 juni bij Loes Verbeten via e-mail [email protected].
De opgave wordt definitief na overmaking van het verschuldigde bedrag op rekeningnr: 0156403463 t.n.v. L. Verbeten";
$width = 600;
$height = 400;
$im = new Imagick();
$draw = new ImagickDraw();
$draw->setFont('Calibri.ttf');
$draw->setFontSize('20px');
$data = $im->queryFontMetrics( $draw, $text );
if( $data['textWidth'] < $width )
{
// woord toevoegen
}
else
{
// nieuwe zin.
}
?>
$text = "Een werkgroep is bezig met het organiseren van een reünie van de eerste jaren van openbare basisschool De Ranonkel in Someren.
Daarvoor worden ouders, kinderen en leerkrachten uitgenodigd, die in de jaren 1990-1998 betrokken waren bij de Ranonkel; van de houten noodbouw tot tweejaar in het nieuwe gebouw aan de Dommel: de pioniers van de openbare school.
De reünie vindt plaats in De Ranonkel zelf op zaterdag 22 juni van 14.00 uur tot 17.00 uur.
De werkgroep wil voor een hapje en een drankje zorgen en daarom wordt aan iedere bezoeker een bijdrage gevraagd in de kosten van € 5.
Aanmelden kan tot 15 juni bij Loes Verbeten via e-mail [email protected].
De opgave wordt definitief na overmaking van het verschuldigde bedrag op rekeningnr: 0156403463 t.n.v. L. Verbeten";
$width = 600;
$height = 400;
$im = new Imagick();
$draw = new ImagickDraw();
$draw->setFont('Calibri.ttf');
$draw->setFontSize('20px');
$data = $im->queryFontMetrics( $draw, $text );
if( $data['textWidth'] < $width )
{
// woord toevoegen
}
else
{
// nieuwe zin.
}
?>
Toevoeging op 11/04/2013 22:55:46:
Vandaag samen met een collega lopen knutselen, en met een hoop berekeningen is het gelukt.
Hij moet namelijk ook kijken naar de alinea's je kunt niet een halve alinea op een volgende pagina plaatsen, dus als de alinea niet past moet hij heel de alinea op de volgende pagina gooien. De nieuwe pagina mag dan ook weer niet beginnen met een enter, dus daar moet ook weer na gekeken worden.
Het bovenstaande heeft ons hierbij wel flink geholpen!
Het is nu bijna gelukt, het enigste probleem dat ik nu nog heb is dat wanneer er een enter staat (enkele) hij ook een dubbelen enter pakt...
Code (php)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?
$myString = 'Net als boven de grond is het in de bodem een ‘eten en gegeten worden’.
Bacteriën, schimmels, protozoa (eencellige diertjes), aaltjes, mijten, wormen en zelfs mollen zorgen hier voor een voedselketen.
Dit bodemleven zorgt er o.a. voor dat plantenresten worden afgebroken, het verzorgt de structuur van de bodem, verbetert het vochtvast-
houdend vermogen en beperkt de aantallen ziekteverwekkende organismen.
Op donderdag 19 december houdt Willy van de Vorst hierover een lezing in het Klok & Peel Museum aan de Ostaderstraat 23 in Asten.
Aanvang 20.00 uur.
De lezing is gratis voor leden van Groei & Bloei.
Niet-leden betalen € 2.';
//DE GROOTTE VAN HET VAK WAAR DE TEKST IN MOET KOMEN
$imTextWidth = 1024;
$imTextHeight = 582;
$im = new Imagick();
$draw = new ImagickDraw();
//JUISTE LETTERTYPEN AANGEZIEN HET FORMAAT PER LETTERTYPE ANDERS KAN ZIJN
$draw->setFont( 'segoe-wp.ttf' );
$draw->setFontSize( '32' );
//TEKST REPLACE
$myString = preg_replace( array( '/\r\n/', '/\r/' ), '#PH', $myString );
//MAAR PARAGRAFEN
$userParagraphs = explode('#PH', $myString);
//HAAL LEGEN ARRAYS WEG
$userParagraphs = array_filter( $userParagraphs );
if( $userParagraphs )
{
$systemParagraphs = ARRAY();
$systemParagraphNumber = 0;
foreach( $userParagraphs as $userParagraph )
{
//EXPLOSE WOORDEN UIT PARAGRAAF
$paragrapWords = explode( " ", $userParagraph );
//GOOI DE LEREN ARRAYS WEG
$paragrapWords = array_filter( $paragrapWords );
//TEL AANTAL WOORDEN IN DEZE PARAGRAAF
$paragrapTotalWords = count( $paragrapWords );
$wordNumber = 1;
foreach( $paragrapWords AS $paragrapWord )
{
//ZIJN WE BIJ HET EERSTE WOORD?
if( $wordNumber == 1 )
{
$newLine = $paragrapWord;
if( $wordNumber == $paragrapTotalWords )
{
$systemParagraphs[$systemParagraphNumber][] = $newLine;
}
}
else
{
$result = $im->queryFontMetrics( $draw, $newLine . ' ' . $paragrapWord );
//IS HET WOORD KLEINER DAN HET TEKST VAK? DAN MAG HIJ ER NOG EEN WOORD AAN TOEVOEGEN
if( $result['textWidth'] < $imTextWidth )
{
$newLine = $newLine . ' ' . $paragrapWord;
}
else
{
//DE ZIN WORDT TE LANG EN WE MAKEN EEN NIEUWE PARAGRAAF
$systemParagraphs[ $systemParagraphNumber ][] = $newLine;
//WE BEGINNEN OPNIEUW MET DE NEWLINE TE VULLEN
$newLine = $paragrapWord;
}
if( $wordNumber == $paragrapTotalWords )
{
//DE ZIN WORDT TE LANG EN WE MAKEN EEN NIEUWE PARAGRAAF
$systemParagraphs[ $systemParagraphNumber ][] = $newLine;
}
}
$wordNumber++;
}
$systemParagraphNumber++;
}
}
if( $systemParagraphs )
{
$pages = ARRAY();
$pagesNumber = 0;
$lineNumber = 1;
$aantal = 0;
$result = $im->queryFontMetrics( $draw, 'A' );
foreach( $systemParagraphs AS $systemParagraph )
{
$paraGrapText = null;
foreach( $systemParagraph AS $systemLine )
{
$paraGrapText .= $systemLine . '<br />';
//TEL AANTAL REGELS IN DEZE PARAGRAAF
$paragrapTotalLines = count( $systemParagraph )+1;
}
$aantal = $aantal + $paragrapTotalLines * $result['textHeight'];
if( $aantal >= $imTextHeight )
{
//BEGIN OPNIEUW
$aantal = $paragrapTotalLines * $result['textHeight'];
$pagesNumber++;
}
$pages[ $pagesNumber ][] = $paraGrapText;
}
}
if( $pages )
{
$number = 0;
$numberAllPages = count( $pages );
foreach( $pages AS $paragraps )
{
$number++;
$tekst = null;
foreach ( $paragraps AS $paragrap )
{
$tekst .= $paragrap . '<br />';
}
echo $tekst;
echo 'Pagina ' . $number . ' van ' . $numberAllPages;
echo '<br />';
}
}
?>
$myString = 'Net als boven de grond is het in de bodem een ‘eten en gegeten worden’.
Bacteriën, schimmels, protozoa (eencellige diertjes), aaltjes, mijten, wormen en zelfs mollen zorgen hier voor een voedselketen.
Dit bodemleven zorgt er o.a. voor dat plantenresten worden afgebroken, het verzorgt de structuur van de bodem, verbetert het vochtvast-
houdend vermogen en beperkt de aantallen ziekteverwekkende organismen.
Op donderdag 19 december houdt Willy van de Vorst hierover een lezing in het Klok & Peel Museum aan de Ostaderstraat 23 in Asten.
Aanvang 20.00 uur.
De lezing is gratis voor leden van Groei & Bloei.
Niet-leden betalen € 2.';
//DE GROOTTE VAN HET VAK WAAR DE TEKST IN MOET KOMEN
$imTextWidth = 1024;
$imTextHeight = 582;
$im = new Imagick();
$draw = new ImagickDraw();
//JUISTE LETTERTYPEN AANGEZIEN HET FORMAAT PER LETTERTYPE ANDERS KAN ZIJN
$draw->setFont( 'segoe-wp.ttf' );
$draw->setFontSize( '32' );
//TEKST REPLACE
$myString = preg_replace( array( '/\r\n/', '/\r/' ), '#PH', $myString );
//MAAR PARAGRAFEN
$userParagraphs = explode('#PH', $myString);
//HAAL LEGEN ARRAYS WEG
$userParagraphs = array_filter( $userParagraphs );
if( $userParagraphs )
{
$systemParagraphs = ARRAY();
$systemParagraphNumber = 0;
foreach( $userParagraphs as $userParagraph )
{
//EXPLOSE WOORDEN UIT PARAGRAAF
$paragrapWords = explode( " ", $userParagraph );
//GOOI DE LEREN ARRAYS WEG
$paragrapWords = array_filter( $paragrapWords );
//TEL AANTAL WOORDEN IN DEZE PARAGRAAF
$paragrapTotalWords = count( $paragrapWords );
$wordNumber = 1;
foreach( $paragrapWords AS $paragrapWord )
{
//ZIJN WE BIJ HET EERSTE WOORD?
if( $wordNumber == 1 )
{
$newLine = $paragrapWord;
if( $wordNumber == $paragrapTotalWords )
{
$systemParagraphs[$systemParagraphNumber][] = $newLine;
}
}
else
{
$result = $im->queryFontMetrics( $draw, $newLine . ' ' . $paragrapWord );
//IS HET WOORD KLEINER DAN HET TEKST VAK? DAN MAG HIJ ER NOG EEN WOORD AAN TOEVOEGEN
if( $result['textWidth'] < $imTextWidth )
{
$newLine = $newLine . ' ' . $paragrapWord;
}
else
{
//DE ZIN WORDT TE LANG EN WE MAKEN EEN NIEUWE PARAGRAAF
$systemParagraphs[ $systemParagraphNumber ][] = $newLine;
//WE BEGINNEN OPNIEUW MET DE NEWLINE TE VULLEN
$newLine = $paragrapWord;
}
if( $wordNumber == $paragrapTotalWords )
{
//DE ZIN WORDT TE LANG EN WE MAKEN EEN NIEUWE PARAGRAAF
$systemParagraphs[ $systemParagraphNumber ][] = $newLine;
}
}
$wordNumber++;
}
$systemParagraphNumber++;
}
}
if( $systemParagraphs )
{
$pages = ARRAY();
$pagesNumber = 0;
$lineNumber = 1;
$aantal = 0;
$result = $im->queryFontMetrics( $draw, 'A' );
foreach( $systemParagraphs AS $systemParagraph )
{
$paraGrapText = null;
foreach( $systemParagraph AS $systemLine )
{
$paraGrapText .= $systemLine . '<br />';
//TEL AANTAL REGELS IN DEZE PARAGRAAF
$paragrapTotalLines = count( $systemParagraph )+1;
}
$aantal = $aantal + $paragrapTotalLines * $result['textHeight'];
if( $aantal >= $imTextHeight )
{
//BEGIN OPNIEUW
$aantal = $paragrapTotalLines * $result['textHeight'];
$pagesNumber++;
}
$pages[ $pagesNumber ][] = $paraGrapText;
}
}
if( $pages )
{
$number = 0;
$numberAllPages = count( $pages );
foreach( $pages AS $paragraps )
{
$number++;
$tekst = null;
foreach ( $paragraps AS $paragrap )
{
$tekst .= $paragrap . '<br />';
}
echo $tekst;
echo 'Pagina ' . $number . ' van ' . $numberAllPages;
echo '<br />';
}
}
?>
Levert dit op (let niet op de special charters):
----
Net als boven de grond is het in de bodem een ‘eten en gegeten
worden’.
Bacteriën, schimmels, protozoa (eencellige diertjes), aaltjes, mijten,
wormen en zelfs mollen zorgen hier voor een voedselketen.
Dit bodemleven zorgt er o.a. voor dat plantenresten worden afgebroken,
het verzorgt de structuur van de bodem, verbetert het vochtvast-
houdend vermogen en beperkt de aantallen ziekteverwekkende
organismen.
Pagina 1 van 2
Op donderdag 19 december houdt Willy van de Vorst hierover een lezing
in het Klok & Peel Museum aan de Ostaderstraat 23 in Asten.
Aanvang 20.00 uur.
De lezing is gratis voor leden van Groei & Bloei.
Niet-leden betalen € 2.
Pagina 2 van 2
----
Hier gaat het fout:
--
Dit bodemleven zorgt er o.a. voor dat plantenresten worden afgebroken,
het verzorgt de structuur van de bodem, verbetert het vochtvast-
houdend vermogen en beperkt de aantallen ziekteverwekkende
organismen.
--
Die witte lege regel hoor daar dus niet thuis!
Iemand enig idee wat ik fout doe?
Gewijzigd op 19/12/2013 02:12:57 door Tom Swinkels
Je zou 137 tm 142 kunnen vervangen door onderstaande.