[php] genereer pdf bestand op de server

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb de volgende vraag:

Ik moet met php (4) een pdf bestand aanmaken met een bepaalde tabel opbouw. Het komt er op neer dat ik in een php bestand html en data uit de database samenvoeg en hiervan dus een pdf bestand moet worden gemaakt. Ik vind voldoende functies en classes om een pdf aan te maken met php. Het is wel een beetje een gedoe om tabellen aan te maken geloof ik , maar ok.

Het lukt me echter alleen om het pdf bestand te genereren waarna het direct in de browser wordt getoond.

Ik wil echter het pdf bestand direct mailen zonder dat het in de browser wordt getoond. Volgens mij moet het dus worden opgeslagen op de server, vervolgens als attachment gemaild en dan weer gedelete van de server (met unlink()) om ruimte te sparen.

Ik heb echter geen idee hoe ik dit voor elkaar moet krijgen.

Hoe sla ik het bestand op op de server ?

En hoe zorg ik dat het niet zichtbaar wordt in de browser ?


Alvast bedankt voor de moeite !

Acties:
  • 0 Henk 'm!

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 16:37

Basszje

Reisvaap!]

Je kan de output alvorens je deze naar scherm gooit ook afvangen en bijvoorbeeld een bestand openen ( fopen ) en dan schrijven (fwrite).

Dat bestand mail je vervolgens als attachment naar wie je wilt.

Overigens wat gebruik je voor je PDF? Eventueel kan je ook HTMLdoc gebruiken, dat parst HTML -> PDF. Ook een beetje gefruts, maar wellicht minder.

[ Voor 28% gewijzigd door Basszje op 16-08-2004 11:32 ]

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor je reactie Basszje,

Het zou geweldig zijn als ik een html bestand zou kunnen maken op de server en dat dit dan automatisch zou worden omgezet naar een pdf bestand inclusief tabel opmaak.

Het programma echter dat je noemt (HTMLdoc) is 495.00 $, en dat is een beetje boven mijn budget.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Als je nou je source post.

Ik moet namelijk altijd (volgens de standaard functies van PHP) zelf de output naar de browser toesturen. Diezelfde output kan ik ook simpelweg gewoon naar de server wegschrijven en een eigen berichtje laten zien in de browser.

Acties:
  • 0 Henk 'm!

  • avoid
  • Registratie: November 2002
  • Laatst online: 15:53
HTMLdoc is toch echt gratis hoor...
http://www.easysw.com/htmldoc/software.php

Time flies like an arrow, fruit flies like a banana.


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:12

The Eagle

I wear my sunglasses at night

Aangenomen dat het maken van de PDF je sowiso wel lukt, zou ik het volgende doen:

Maak de PDF, en sla die op de webserver op een vaste locatie op (ik noem het bij deze een report-repository). Geef er een uniek ID aan me, bijvoorbeeld een procesnummer. Dat zul je dan wel ergens op moeten slaan (dan weet je welke proces-id's je al gebruikt hebt enzo). Laat vervolgens je PHP-script een link genereren naar die specifieke output op de server. Die link kun je dan mailen :) Dan weet je tevens wie een bepaald rapport ophaalt :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:33
Verwijderd schreef op 16 augustus 2004 @ 11:23:

Ik wil echter het pdf bestand direct mailen zonder dat het in de browser wordt getoond. Volgens mij moet het dus worden opgeslagen op de server, vervolgens als attachment gemaild en dan weer gedelete van de server (met unlink()) om ruimte te sparen.
!
Volgens mij is het het handigst om de html om te zetten naar pdf, dan de pdf in een variabele bewaren, uriencoden en dan in je mail concatten... dan heb je helemaal geen files nodig toch? Je moet alleen zorgen dat de juiste headers in je mail zitten. Maar als je al zover bent dat je de pdf kunt genereren dan heb je het moeilijkste gehad.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Ben ik zelf ook eens mee bezig geweest: [rml][ PHP] Mail Header PDF[/rml]

Je kunt ook het PDF bestand op de server zetten, het mailen met bijvoorbeeld deze class en het weer van de server verwijderen. Tabellen in PDF kan ook met deze class.

Edit: je probleem zit dus vooral in het opslaan van je file op de server. Als ik weer thuis ben zal ik het wel even posten, weet het zo niet uit mijn hoofd.

[ Voor 19% gewijzigd door X-Lars op 16-08-2004 12:16 ]


Acties:
  • 0 Henk 'm!

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 16:37

Basszje

Reisvaap!]

borft schreef op 16 augustus 2004 @ 11:58:
[...]

Volgens mij is het het handigst om de html om te zetten naar pdf, dan de pdf in een variabele bewaren, uriencoden en dan in je mail concatten... dan heb je helemaal geen files nodig toch? Je moet alleen zorgen dat de juiste headers in je mail zitten. Maar als je al zover bent dat je de pdf kunt genereren dan heb je het moeilijkste gehad.
Wou je de PDF dan inline via je email versturen? Dat lijkt mij niet handig ( kan het eigenlijk? ), aangezien PDF'jes nog wel eens groot willen zijn en je ze ws wilt opslaan ( de ontvanger dus ). Dan kan je het beter in een attachment meesturen.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Allereerst: gebruik bestaande classes. Ga niet op dit gebied het wiel opnieuw uitvinden want er zijn erg veel zaken waar je rekening mee moet houden. Dit is al vaak gedaan en netjes in classes beschikbaar.

Ik heb gisteren een systeem in elkaar gezet wat orders samenstelt, in de database zet, pdf's genereert die al ingevult zijn (contracten waar adres/naam enzovoorts al voor de klant worden ingevuld) en uiteindelijk gemailt met een persoonlijke mail.

Wat heb ik gebruikt:
-expdf -> kan zeer eenvoudig tabellen aanamken zoals in de readme te lezen is.
-phpmailer -> verstuurt je email inclusief bijlagen zonder problemen

Mijn aanpak:
• PDF formulieren genereren en opslaan in de map generated met als bestandsnaam bij mij het orderregelnummer.
• De bestandsnamen van je pdf's in een array opslaan.
• de mail in elkaar zetten
• alle attachements uit de array aan de mail hangen
• mailen
• controle op goede verzending en vervolgens bestanden verwijderen met behulp van je array met bestandsnamen.

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Een aantal opties :

- Via de PHP functies
- EZPdf

Via google zijn nog meer soortgelijke libs te vinden, en allemaal bieden ze de mogelijkeid om uitvoer bv te mailen.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Zie ook mijn post ;)


@ts: met expdf kan je zo de output in een file zetten:
PHP:
1
2
3
4
5
//dit is dus na het opstellen van de PDF hè
    $pdfcode = $pdf->ezOutput();
    $fp=fopen($destfile,'wb');
    fwrite($fp,$pdfcode);
    fclose($fp);

Acties:
  • 0 Henk 'm!

  • humi
  • Registratie: April 2000
  • Laatst online: 01-09 09:47
Ik kwam laast het volgende project tegen :
http://pdml.sourceforge.net/index.php

't voordeel hiervan vind ik dat je vrij makkelijk met een template systeem pdf's kan genereren. Andere classes vond ik over 't algemeen niet lekker in gebruik, maar dat is vrij persoonlijk denk ik.

Acties:
  • 0 Henk 'm!

  • Xenon
  • Registratie: Januari 2001
  • Laatst online: 21-08 09:12
http://www.fpdf.org (ook met nederlandse handleiding)

Veel beter dan al de rest imho (ben er redelijk veel mee bezig geweest en veel scripts getest)

ProtocoLAN.be: De beste LAN van de Maaskant


Acties:
  • 0 Henk 'm!

  • albiez
  • Registratie: September 2000
  • Laatst online: 18-09 19:57
Ja fpdf is the way to go.
Kijk maar naar de functie output
http://www.fpdf.org/nl/doc/output.htm

Acties:
  • 0 Henk 'm!

Verwijderd

En als je wat meer wilt doen met PDF kun je eens kijken naar ActivePDF. Die gebruik ik persoonlijk omdat die de browser engine ook kan gebruiken om te renderen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal,

Wat een respons en manieren om het probleem te tackelen.

Ik had zelf ook al die EZPdf class gevonden. Ik kan hiernee tabellen genereren en ik blijf deze gewoon gebruiken.

Eigenlijk was mijn stuikelblok precies het stukje code dat djluc opgaf. Ik had iets wat er vreselijk op leek waar ik sprak klaarblijkelijk een minder geschikte functie aan.

Voor de volledigheid als naslag werk voor mensen die ooit hetzelfde probleem hebben zal ik hier mijn code geven:

<?php

include ('class.ezpdf.php');
$pdf =& new Cezpdf();
$pdf->selectFont('./fonts/Helvetica.afm');

$data = array(
array('num'=>1,'name'=>'gandalf','type'=>'wizard')
,array('num'=>2,'name'=>'bilbo','type'=>'hobbit','url'=>'http://www.ros.co.nz/pdf/')
,array('num'=>3,'name'=>'frodo','type'=>'hobbit')
,array('num'=>4,'name'=>'saruman','type'=>'bad dude','url'=>'http://sourceforge.net/projects/pdf-php')
,array('num'=>5,'name'=>'sauron','type'=>'really bad dude')
);

$pdf->ezTable($data);

//$pdf->ezStream();

$destfile = "C:\apache\htdocs\pdf_creator\file.pdf";

$pdfcode = $pdf->ezOutput();
$fp=fopen($destfile,'wb');
fwrite($fp,$pdfcode);
fclose($fp);

print("de pdf is aangemaakt");

?>

Verder zal ik gaan kijken op welke manier ik de mail inclusief pdf attachment zal gaan versturen. Ik heb de indruk dat sommige posters zeer tevreden zijn over hun mail class dus misschien moet ik er daar ook maar 1 van gaan gebruiken.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Eigenlijk was mijn stuikelblok precies het stukje code dat djluc opgaf. Ik had iets wat er vreselijk op leek waar ik sprak klaarblijkelijk een minder geschikte functie aan.
Je mag wel gewoon zeggen dat je de FAQ niet gelezen hebt ;)
How can I write the PDF file to a static file on the webserver?
Simplicity itself, just use the same functions that are used to extract the raw code for debugging:
$pdfcode = $pdf->output();
$fp=fopen('<filename>','wb');
fwrite($fp,$pdfcode);
fclose($fp);
Note that if you are using the ezPdf class, then you will need to modify this slightly as shown below
to get it to work (the most obvios symptom of forgetting this will be missing page numbers).
$pdfcode = $pdf->ezOutput();
$fp=fopen('<filename>','wb');
fwrite($fp,$pdfcode);
fclose($fp);
Verder is het gebruik van een mailclass imo onmisbaar tenzij je gewoon tijd over hebt om dit soort dingen nog een keer zelf te ontwikkelen. PHPmailer is erg eenvoudig in gebruik, veelgebruikt en vooral goed gedocumenteerd, mocht je het lezen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi

Ik kan echter niet uit de (verder zeer interessante ;) ) handleiding opmaken hoe ik eem image in een tabelcell moet stoppen met deze class.

Heeft iemand dat al eens gedaan ?

Acties:
  • 0 Henk 'm!

Verwijderd

beimkirche,

Hieronder de code waar je een eind mee uit de voeten zou moeten komen, helemaal gebaseerd op de EZPdf

//Create PDF
$pdf_code = genPDF($data);
$f = fopen($cfg['document_dir'].'/document/filename.pdf', 'w');
fwrite($f, $pdf_code);
fclose($f);
$mail->to = 'jeemailadres';
$mail->from = 'deafzender';
$mail->body = 'de body';
$mail->subject = 'subject';
$mail->add_attachment($pdf_code, 'bestandsnaam.pdf', 'application/pdf');
$mail->send();

$mail is een instantie van een standaard mail class waar mails met attachements kunnen worden verstuurd, maar ik denk dat je daar zelf ook wel uit kunt komen :9 .

Acties:
  • 0 Henk 'm!

Verwijderd

Sorry beimkirche,

Je vroeg natuurlijk om hoe een je een plaatje in je pdf kon bakken, had weer niet goed gelezen, in EZPfd kan dat op de volgende manier:

$pdf->addJpegFromFile('plaatje.jpg', 530, 745, 30, 26);

En het klopt dat EZPdf alleen maar jpg's ondersteunt, gifjes kunnen er niet in, maar ook dat staat in de handleiding ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Pagina 27 van de handleiding die te vinden is op:

http://www.ros.co.nz/pdf/readme.pdf

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt,

Maar het schijnt met deze class niet mogelijk te zijn om een jpg te plaatsen in een bepaalde tabelcell.

Jammer, ben ik er net 2 dagen mee bezig, blijkt het toch niet te werken zoals ik wil !

zucht ;(
Pagina: 1