[PHP] PDF's 'on the fly' zippen.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een facturatie systeem aan het maken waarmee achterstallende betalingen uit een database gehaald worden. Met deze gegevens vul ik vervolgens een html template, die ik vervolgens omzet in PDF met behulp van DOMPDF. Dit gaat goed.

Nu wilt mijn baas graag alle achterstallende betalingen in één zip kunnen downloaden. Hoe zou ik dit kunnen doen? In dit geval gaat het om een kleine tweehonderdtal aan PDF's die on the fly gemaakt moeten worden en vervolgens in een zip moeten worden gebundeld. Is dit realistisch? Gaat een webserver hier niet enorm van over de zeik?

Graag zou ik tips van de meer ervaren programmeur ontvangen m.b.t. dit probleem.

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
wat ik doe is al die files genereren en in een temp folder plaatsen. Vervolgens kan je met het system commando van PHP een zip kunnen uitvoeren van die map en die zip naar de browser sturen.

Je kan nadien uiteraard die temp folder weer verwijderen

[ Voor 19% gewijzigd door webinn op 09-02-2009 18:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe genereer je die files dan? 1 keer een while loop van 200 herhalingen en de PDF's aanmaken? :S

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
tja, ik veronderstel dat elk bestand anders zal zijn net zoals bij mij. Ik moet dus al die pdf's appart genereren. Overigens vereist mijn applicatie dat alle pdf's bewaard blijven voor de administratie en dus moet ik gewoon de pdf's selecteren die ik nodig heb en die zippen

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Het probleem zal meer gaan zitten in het on-the-fly aanmaken van 200 pdf'jes dan het zippen van 200 kleine bestanden.

Eigenlijk wil je geen enkel pdf-bestand dubbel aanmaken, dus in principe zou je die éénmalig moeten genereren en updaten als er iets wijzigt of eventueel verwijderen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
Je kunt die facturen ook opslaan als ze eenmaal gegenereerd zijn, natuurlijk. Dat lijkt mij voor het factureren eigenlijk wel zo handig. Ik zou het raar vinden als oude facturen veranderen als je later eens je PDF template aanpast.

Als je die facturen als bestanden hebt is het on-the-fly genereren van een zipje probleem twee. Ik had verwacht dat PHP daar wel een module voor zou hebben, en die is er ook wel, maar die lijkt niet on-the-fly the kunnen inpakken. Als je dat wel wil, moet je het misschien zelf schrijven. Zend heeft er wel een aardige tutorial over:Overigens hoef je van de compressie niet veel te verwachten van PDF files zijn al gecomprimeerd, maar het kan natuurlijk wel handig zijn om ze bundelen in een zip archive.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat eigenlijk om herinneringen. We houden op dit moment alle betalingen bij in een database, waarin het klant id staat, wat factuur info en de datum wanneer het geld ontvangen is. Als dit veld leeg is, betekend dit dus dat er een herinnering de deur uit moet. Deze herinneringen hoeven niet opgeslagen te worden, ik wil ze 1 keer genereren, gemakkelijk downloaden en alles printen, zodat het de deur uit kan.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Verwijderd schreef op maandag 09 februari 2009 @ 20:52: ik wil ze 1 keer genereren, gemakkelijk downloaden en alles printen, zodat het de deur uit kan.
Juist. Maar dat is juist zo moeilijk. Je moet al die dingen zomaar in één keer aanmaken. Dat zorgt voor een hoge load en veel wachttijd. Stel dat iemand nu tweemaal een herinnering krijgt? Dan doe je misschien dubbel werk. Misschien ook niet omdat een tweede herinnering er anders uitziet.

Misschien kun je beter een cronjob 's nachts laten bekijken welke facturen nog niet betaald zijn en die dan alvast de pdf'jes aan laten maken. Moet je op het moment dat je om de uitvoer vraagt alleen even te kijken of er eventueel nog facturen zijn betaald, die weglaten en de overigen in een zipje stoppen.

Ik heb zelf wel gewerkt met het on-the-fly aanmaken van een zip-bestand met een groot aantal foto's erin, dat zorgde wel voor een (beperkte) wachttijd, maar was niet echt problematisch. Je zult zelf even moeten benchmarken of die load en de wachttijd acceptabel zijn. Het is inderdaad jammer dat je moet wachten tot de volledige inhoud van het zipje in de buffer staat en dan pas kunt downloaden.

Mede omdat de compressie waarschijnlijk niet zo'n hoge prioriteit heeft in jouw geval, kun je die heel laag zetten en daarmee de snelheid vergroten. Je zou eventueel zelfs kunnen overwegen om geen zip te gebruiken, maar een formaat dat slechts bestanden bundelt en niet comprimeert. (iets alla .tar)

[ Voor 11% gewijzigd door doeternietoe op 09-02-2009 21:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe zou je dan aanraden om de eerste 200 entries op een zo'n efficiente manier 'weg te werken'? Als het nu bijgewerkt wordt, hoef ik idd alleen nog maar een cronjob elke dag (oid) te laten checken. Dat zullen er nooit zoveel zijn. Maar om die eerste stapel weg te krijgen... niemand heeft natuurlijk zin handmatig er 200 te maken.

Acties:
  • 0 Henk 'm!

  • T_E_O
  • Registratie: Oktober 1999
  • Laatst online: 17-09 12:18
Het hangt er vanaf hoe je je PDF's genereert en of dat zwaar is. Zelf maak ik mijn facturen/herinneringen met FPDF. Een losse file is zo'n 250kB. Als ik dan tien facturen wil downloaden, dan zou dat 2,5MB zijn. Wat ik echter doe, is er 1 PDF van maken die op iedere pagina een factuur of herinnering heeft. Het genereren is heel snel voor elkaar en de file is alsnog minder dan 300kB. Dat komt doordat de meeste ruimte in het bestand gebruikt wordt door afbeeldingen en lettertype(s). Bovendien gaat het printen ook nog eens makkelijker.

Wellicht ook voor jouw situatie 'n handige methode ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zal idd is kijken of ik met DOMPDF niet alles in 1 PDF kan proppen, dat idd elke herinnering op een nieuwe pagina komt. De PDF's op zich stellen niks voor, 't is 1 pagina met wat tekst, 2kb groot zie ik net. Dat is wel heel klein, dus dat zou goed moeten gaan :) Ik probeer het morgen en laat even weten of het gelukt is, zodat andere mensen hier eventueel ook nog iets aan hebben.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Verwijderd schreef op maandag 09 februari 2009 @ 21:20:
Hoe zou je dan aanraden om de eerste 200 entries op een zo'n efficiente manier 'weg te werken'? Als het nu bijgewerkt wordt, hoef ik idd alleen nog maar een cronjob elke dag (oid) te laten checken. Dat zullen er nooit zoveel zijn. Maar om die eerste stapel weg te krijgen... niemand heeft natuurlijk zin handmatig er 200 te maken.
Ach... dat duw je d'r in één nachtje met alle gemak door. Zet de execution_time op 0, doe het desnoods in groepen.

Alles in één pdf-bestand kan wel, maar dan verlies je het voordeel van het geleidelijk aanmaken van de files. Alles in één wil ook zeggen: alle 200 tegelijk. Dat losse bestanden groter zijn is geen punt: zip-compressie werkt dat wel weer weg, al zet je die op "laag".
Pagina: 1