PDF genereren uit FORM, opslaan en 1x laten openen door user

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig een form te maken doormiddel van een FDF te maken van een FORM.

Hier treed eigenlijk direct al het probleem op wat mij een serieus probleem lijkt.

De gebruiker in kwestie maakt dus een PDF aan door het foirm te submitten. Eigenlijk maakt hij een FDF file aan welke in een map www.domeincom/fdf (of wat dan ook) staat en waar in verwezen wordt naar een www.domein.com/template.pdf.

Deze manier werkt prima alleen niet goed genoeg.

Het probleem is dat iedere persoon de directory /fdf kan lezen en wanneer deze een bestandsnaam weet van een eerder gegenereerde FDF kan hij zo zien wat een ander erion heeft gezet, en dat is natuurlijk niet de bedoeling.

Ik wil dus eigenlijk een soort van tempory file (pdf) genereren die automatisch geopend wordt of door het klikken van een hyperlink, en ook direct op een andere plaats weggeschreven wordt.

Dit zou ik op een aantal manieren kunnen doen, ik dacht aan de volgende:

1: De FDF-naam laten genereren aan de hand van een herkenningspunt uit het form, achternaam bijvoorbeeld en hier een hash achter laten zetten die random is. Bijvoorbeeld: naam_678hkjh7yuiyui.fdf

Deze door de gebruiker te late openen via een link en automatisch we ge laten schrijven naar een bepaalde directory (niet publiek) via een cronjob iedere 5 minuten.

2: De FDF aan laten maken in een niet publieke directory en tevens ook als tempfile die automatisch opent bij de gebruiker na submit, of via een link. Het zou alleen handig zijn wanneer de tempfile helemaal als hash bestaat (78678cdscd786) en het niet publieke bestand als naam of iets dergelijks wat ik uit het form pluk.

Beide zijn goede opties denk ik, maar het kan beter.

Wat is een gebruikelijke manier hiervoor ?

Ik kan ook nog de form in een DB opslaan voor eigen gebruik en de gebruiker alleen een downloadable versie aanbieden welke ik gewoon verwijder met een cron. Ik kan hem in dat geval altijd weel makkelijk aan laten maken op een of andere manier.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het wegschrijven van de FDF files naar een map die vanaf het net gezien kan worden is geen optie. Na een test met Teleport Pro lees ik gewoon die hele map uit en dat is dus niet de bedoeling.

Ik zou iets met een sessie en een one-time-PDF moeten fabriceren en de data verder opslaan in een database denk ik ?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Waarom moeten de fdf bestanden perse weggeschreven worden op de harde schijf? Aangezien ze eenmalig zijn kun je ze toch ook gewoon in het geheugen genereren en rechtstreeks naar de client sturen zonder tussenkomst van een bestand?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat klopt, ik kan alelen niet uitvinden hoe ik dat ga doen.

Ik ben bang dat ik dan met een pop-up moet gaan werken, of zou je dit ook via een link kunnen doen ?

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:26

momania

iPhone 30! Bam!

Verwijderd schreef op donderdag 03 mei 2007 @ 11:03:
Ik ben bang dat ik dan met een pop-up moet gaan werken, of zou je dit ook via een link kunnen doen ?
Je kan de gegeneerde pfd in je session zetten en dan een link maken om deze door de gebruiker 'op te laten halen' :) Dit kan je alleen veel ruime aan sessie data gaan kosten.

Makkelijkste is natuurlijk direct aanbieden als download. Mocht de gebruiker annuleren, moet je wel een linkje maken om de pdf opnieuw te kunnen genereren en aan te bieden. :)

[ Voor 26% gewijzigd door momania op 03-05-2007 11:06 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
momania schreef op donderdag 03 mei 2007 @ 11:04:
[...]

Je kan de gegeneerde pfd in je session zetten en dan een link maken om deze door de gebruiker 'op te laten halen' :) Dit kan je alleen veel ruime aan sessie data gaan kosten.

Makkelijkste is natuurlijk direct aanbieden als download. Mocht de gebruiker annuleren, moet je wel een linkje maken om de pdf opnieuw te kunnen genereren en aan te bieden. :)
Hier kom je alleen weer op het probleem uit dat iedereen het kan "grabben".

Dus stel 10 mensen vullen het in en 1 persoon denkt dit even leuk te grabben, dan heb je een probleem.

Ik heb wat gevonden bij Zend en bij PDFlib. Hier lijk ik ook wel wat mee te kunnen.

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:26

momania

iPhone 30! Bam!

Verwijderd schreef op donderdag 03 mei 2007 @ 11:13:
[...]


Hier kom je alleen weer op het probleem uit dat iedereen het kan "grabben".

Dus stel 10 mensen vullen het in en 1 persoon denkt dit even leuk te grabben, dan heb je een probleem.
Ik zie het probleem niet als je per request de pdf genereerd en direct aanbied aan de gebruiker zonder deze op te slaan. :?

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
momania schreef op donderdag 03 mei 2007 @ 11:19:
[...]

Ik zie het probleem niet als je per request de pdf genereerd en direct aanbied aan de gebruiker zonder deze op te slaan. :?
Mijn excuus, ik las het begin van jouw laatste zin verkeerd.

De vraag is dus hoe ik dit ga bakken. Zal vast wel ergens te googelen zijn.

Ik zou ze natuurlijk voor eigen gebruik wel ergens lokaal op kunnen slaan, niet in een webroot ofzo.

Acties:
  • 0 Henk 'm!

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
waarom een web-accessible folder? je kunt toch een filesocket gebruiken om de file vanuit een secure area via een downloadscript aan de client te streamen? dan is fysieke toegang tot de opslagfolder niet nodig imho.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MissingDog schreef op donderdag 03 mei 2007 @ 11:32:
waarom een web-accessible folder? je kunt toch een filesocket gebruiken om de file vanuit een secure area via een downloadscript aan de client te streamen? dan is fysieke toegang tot de opslagfolder niet nodig imho.
Dat is een heel goed idee, absoluut niet aan gedacht.

Ik ga eens kijken of ik zoiets kan vinden om me een goed beeld te vormen.

Dank je.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zoals ik het nu doe is dat ik een fdf file laat genereren en met een PDF template de gegevens invul.

Dit werkt opcih prima, je kut namelijk altijd makkelijk een layout aanpassen en de PDF her-genereren.

Wat zou in zo'n geval de beste oplossing kunnen zijn om de PDF te genereren met iets van fopen() vanuit een remote locatie ?

Dit aangezien de FDF-file de template aanroept en niet andersom.

Ik zou dus iets van domein.tld/template.pdf moeten zien te downloaden en dan de FDF file laden in plaats van de FDF de template laten laden.

Anders wordt het snel insecure denk ik.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een heel eind aan de hand van een script dat ik tegen kwam.

Dit script maakt aan de hand van een form een fdf file en biedt deze direct aan als pdf.

Nu wil ik alleen de PDF laten opslaan met een variabele uit de form. Deze variabele moet ik er wel uit kunnen vissen, deze staat namelijk in $fdf wat eigenlijk een array is denk ik en daar zou ik hem ook uit kunnen halen.

Dit is het stuk code dat de download maakt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$fdf_fn= tempnam( '.', 'fdf' );
$fp= fopen( $fdf_fn, 'w' );
if( $fp ) {
fwrite( $fp, $fdf );
  fclose( $fp );

  header( 'Content-type: application/pdf' );
  header( 'Content-disposition: attachment; filename=test.pdf' ); // prompt to save to disk

  passthru( 'pdftk formtx.5.pdf fill_form '. $fdf_fn. ' output - flatten' );

  unlink( $fdf_fn ); // delete temp file
}
else { // error
  echo 'Error: unable to open temp file for writing fdf data: '. $fdf_fn;
}


Nu dacht ik dit te doen aan de hand van een stukje:

PHP:
1
fwrite($fp,$fdf,strlen($fdf));


in $fp in het script, ik kom alleen nog niet helemaal verder.

Maar de vraag is eigenlijk of ik de $fdf makkelijk naar een naam_achternaam.fdf zou kunnen schrijven doormiddel van de namen uit de $fdf te halen en deze dan weg te schrijven voorda t ik hem ter download aanbiedt.

Mailen wordt dan ook vrij simpel trouwens.

edit:


Geen kick, wordt anders erg on-overzichtelijk hoever ik ben.

[ Voor 3% gewijzigd door Verwijderd op 03-05-2007 15:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat zou de beste manier zijn om dit via een download-link te doen ?

Ik zal een .php pagina aan moeten roepen welke het bestand via een filesocket download zoals MissingDog al aangeeft.

Wat is de beste methode om als herkenningspunt te gebruiken ?

Het lijkt mij hoe dan ook het veiligste om het bestand te laten beginnen met de naam en hier achter een timestamp te plaatsen:

naam_timestamp.pdf

Hier komt alleen het lastige stuk:

Om het veilig te houden vind je het niet erg om de naam in de download-link te zetten, de timestamp niet. De timestamp zou geen veiligheids-risico moeten zijn maar men weet in dat geval wel direct je 2e selectie-punt van de filenaam.

Ik vraag me echt sterk af hoe ik dit in kan bouwen. De security komt niet vreselijk in gevaar wanneer men beide weet, maar je zou het toch zo veilig en "onbekend" mogelijk willen houden.
Pagina: 1