Html to pdf

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 5 volgende »

- Ariën -
Beheerder

- Ariën -

07/09/2018 17:49:27
Quote Anchor link
Wat heeft PHP te maken met een commandline-call via exec() ?
Zet de logging van wkhtmltopdf eens aan met --log-level <level>

Zie ook voor de uitleg ook: https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
 
PHP hulp

PHP hulp

15/11/2019 17:16:09
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 07:50:21
Quote Anchor link
@Ariën en waar wil je dat ik die op zet?
Set log level to: none, error, warn or info (default info)

De map verwijzing kan ik helaas niet vinden, wat ik gevonden heb werkt ook niet helaas.
 
- Ariën -
Beheerder

- Ariën -

08/09/2018 08:10:34
Quote Anchor link
Error lijkt mij het logische.
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 08:19:32
Quote Anchor link
Krijg het niet.
dit probeer ik.:
wkhtmltopdf --log-level error

Maar schijnbaar is dit niet goed
 
- Ariën -
Beheerder

- Ariën -

08/09/2018 09:33:43
Quote Anchor link
Probeer eens van de andere waardes, of probeer eens te kijken of die allerminst zijn versienummer uit kan werpen.

Toevoeging op 08/09/2018 09:33:45:

Probeer eens van de andere waardes, of probeer eens te kijken of die allerminst zijn versienummer uit kan werpen.
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 12:45:27
Quote Anchor link
Ik ben al zover dat hij via die exec command de pdf aanmaakt, maar helaas gaat het fout daarbij want die file is steeds beschadigd zegt die.
terijl de command promp het wel gaat.

Ga straks nog even verder kijken, jammer dat hier niet iemand is die mee test, dat was stukken makkelijker geweest.
 
- Ariën -
Beheerder

- Ariën -

08/09/2018 13:06:51
Quote Anchor link
Niet iedereen heeft hier een server natuurlijk.

Wat is de exacte melding die je krijgt? En hoe ziet je functie eruit?
 
Aad B

Aad B

08/09/2018 15:42:21
Quote Anchor link
Op de commandline heb je rechten die voor de exec heel anders of niet aanwezig zijn. Linux is veel strenger dan Windhoos. Waarschijnlijk eerst deze twee syntax/rechten problemen oplossen:

1. Het routeren van de error op exec (linux) level.
(overigens zou de tip van Ariën met het $output argument ook moeten werken)
2. Het schrijven van de pdf en de error daar waar het rechtens mag voor userproces www-data zie in de code hieronder /????/. Vervang de vraagtekens door de juiste dir

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
exec('/usr/local/bin/wkhtmltopdf --log-level error http://somesite.com /????/outfile.pdf 2>/????/wkhtmltopdf_error.log');
of
exec('/usr/local/bin/wkhtmltopdf --log-level error http://somesite.com /????/outfile.pdf 2>&1');

Verder kan je nog wel met een single/double quotes probleem geconfronteerd worden zodra je ook nog php variabelen gaat doorgeven.

In je eerdere testcode zit ook een foutje, je plakt een array achter de echo :(
Dit is een werkende oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  exec('whoami',$output);
  echo "Uitvoer: ";
  print_r($output);
?>

Je krijgt overigens de output wel in beeld in jouw test maar dat komt door de echo in:
echo exec('whoami',$output);
de rest van de regel gaat fout :(
Gewijzigd op 08/09/2018 16:41:39 door Aad B
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 16:48:09
Quote Anchor link
@Aad B:
ik krijg bij jou code in de log deze melding te zien in de log file.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
exec('wkhtmltopdf --log-level error http://www.google.nl outfile.pdf 2> wkhtmltopdf_error.log');    
Unknown long argument --log-level


@Ariën.:
Ik krijg geen melding, zie bv. wel de pdf maar als je die wil openen krijg je de melding dat hij beschadigd is.
de functie is o.a. al een flinke probeersel om diverse methodes te testen van die html naar pdf.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if (isset($_POST['button'])) {
   exec('wkhtmltopdf http://www.google.com > g2.pdf',$output);
 //echo exec("/usr/local/bin/wkhtmltox/bin/wkhtmltopdf http://www.google.com google2.pdf",$output);
 exec("/usr/local/bin/wkhtmltox/bin/wkhtmltopdf http://www.google.com > google2.pdf");
exec('wkhtmltopdf http://www.google.nl > file.pdf 2>&1');
   echo "Uitvoer: ".$output."<br>";
   echo exec('wkhtmltopdf -V');
  // echo exec('wkhtmltopdf http://www.google.com > g3.pdf');
  exec('wkhtmltopdf --log-level error http://www.google.nl > outfile.pdf 2>&1');
  exec('wkhtmltopdf --log-level error http://www.google.nl outfile.pdf 2> wkhtmltopdf_error.log');
   //echo exec('uptime');
}
?>

<form action="" method="post">
    <button type="submit" name="button">Run pdf maker</button>
</form>
 
Aad B

Aad B

08/09/2018 17:01:50
Quote Anchor link
Laat de --log-level error dan maar even weg. Zie niet direct een oplossing.
Waar schrijf je de pdf? Zijn de rechten daar correct?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
exec('wkhtmltopdf --log-level error http://www.google.nl > outfile.pdf 2>&1');

De eerste > moet in ieder geval weg, dat klopt niet met de syntax van wkhtmltopdf
Gewijzigd op 08/09/2018 17:12:24 door Aad B
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 17:26:03
Quote Anchor link
De pdf's schrijf ik gewoon in de html map weg.
De rechten staan in mijn ogen goed
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
sudo chmod -R 777 /var/www/html


Ik heb die error regel eens aangepast op jullie advies nar het volgende in mijn php test pagina.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
exec('/usr/bin/wkhtmltopdf error http://www.google.nl outfile.pdf 2> wkhtmltopdf_error2.log');


Dan lees ik in die log file de volgende melding.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
QXcbConnection: Could not connect to display


Hier op verder gezocht en het schijnt een of andere service te zijn die op de achtergrond mee moet draaien, echter vind ik niet 1-2-3 hoe ik die zou moeten installeren, ben wel nog aan het zoeken, maar als iemand het eerder weet zie ik uiteraard de hulp graag komen.


Toevoeging op 08/09/2018 17:42:09:

[UPDATE]

Aan de hand van jullie tip dus verder gaan zoeken op die fout melding wat ik net vermeld had.
Wat ik dus aan de hand van die fout melding gedaan heb is het volgende.
Ik heb die xvfb geïnstalleerd met .:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
sudo apt-get install xvfb


Door nu in de php code dit te plaatsen.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  exec("xvfb-run /usr/bin/wkhtmltopdf http://www.google.com google2.pdf");  

Krijg ik nu mooi een pdf met de pagina van google erin.
[link]https://ibb.co/c43YC9[/link]

Thx aan jullie om mee te denken.

Toevoeging op 08/09/2018 18:02:39:

Alleen een vraagje op een idee van mij.
Omdat het enkele sec duurt voor dat om te zetten, is er via php geen progressbar te zien die de voortgang ervsan kan tonen?
Gewijzigd op 08/09/2018 17:42:43 door Pascal Schuffelers
 
- Ariën -
Beheerder

- Ariën -

08/09/2018 18:33:48
Quote Anchor link
Je zou met ajax wel wat kunnen doen.

Maar ik heb het idee dat wkhtmltopdf ook enige ondersteuning moet bieden hoe ver die al is. Geen idee of dat kan.

Maar een 'oneindig' draaiwieltje is met AJAX geen enkel probleem.
Gewijzigd op 08/09/2018 18:36:08 door - Ariën -
 
Pascal Schuffelers

Pascal Schuffelers

08/09/2018 19:44:29
Quote Anchor link
Tja anders laat ik het zo, het doet nu wat hij moet doen :D
 
Aad B

Aad B

09/09/2018 11:38:00
Quote Anchor link
Mooi dat het opgelost is!!
Hier ook nog een andere uitwerking met xvfb
https://github.com/JazzCore/python-pdfkit/wiki/Using-wkhtmltopdf-without-X-server
 
Pascal Schuffelers

Pascal Schuffelers

09/09/2018 12:09:13
Quote Anchor link
Oke thx @Aad B zal die meenemen als ik de server her indeel achteraf.
Ik zit alleen met een klein min puntje.

Ik laad een pagina die briefjes invult aan de hand van gegevens die hij ontvang van te voren wat iemand invuld.
Als hij het ingevuld briefje laat zien krijg je de mogelijk deze af te drukken.
Na afdrukken of annuleren blijft de pagina van die briefjes nog even open en sluit zich van zelf af na x seconde.
Echter op het einde van het briefje weergave voor hij zich afsluit laat ik die opslaan zoals hierboven verholpen is.
Het min puntje is nu dat hij die briefjes opslaat zonder iets ingevuld.

Nu is mijn vraag is er een commando of iets dergelijks die voor het afsluiten alle waarde meeneemt in dat opslaan zodat de opgeslagen waarde wel in die pdf erbij staat?

ik had als test toch eens php in het script gedeelte gezet maar dan slaat hij die waarde alsnog niet mee op.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<script type="text/javascript">

 setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500);
  <?php
exec("xvfb-run /usr/bin/wkhtmltopdf http://192.168.0.105/totalbriefjes.php Briefjes/Totalebriefjes_".date('m-d-Y_hia').".pdf 2> Briefjes/wkhtmltopdf_error_".date('m-d-Y_hia').".log" );
?>

 }
 </script>


Deze code staat op het einde van het briefje pagina.
Ik heb ook de php code buiten het script gedaan onder in de pagina, maar dan doet hij hetzelfde.
 
- Ariën -
Beheerder

- Ariën -

09/09/2018 12:25:33
Quote Anchor link
Je moet dan AJAX gebruiken. Want Javascript heeft geen weet van PHP en daarom wordt je per PHP-Script ook direct uitgevoerd.
Gewijzigd op 09/09/2018 13:02:13 door - Ariën -
 
Pascal Schuffelers

Pascal Schuffelers

09/09/2018 20:56:12
Quote Anchor link
Hulp hoe zet ik dat dan in ajax?
 
- Ariën -
Beheerder

- Ariën -

09/09/2018 21:00:07
Quote Anchor link
Ajax is een techniek van JavaScript om pagina's en scripts asynchroon in te laden. Er zijn een hoop tutorials over te vinden. Zowel in het 'platte' JavaScript als in de veelgebruikte jQuery functions-library.

https://www.w3schools.com/xml/ajax_intro.asp
https://www.w3schools.com/jquery/jquery_ajax_intro.asp
Gewijzigd op 09/09/2018 21:01:44 door - Ariën -
 
Pascal Schuffelers

Pascal Schuffelers

09/09/2018 21:07:11
Quote Anchor link
Zoiets dan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<script>
    $(window).unload(function(){exec("xvfb-run /usr/bin/wkhtmltopdf http://192.168.0.105/totalbriefjes.php Briefjes/Totalebriefjes_".date('m-d-Y_hia').".pdf 2> Briefjes/wkhtmltopdf_error_".date('m-d-Y_hia').".log" );
})
</script>


Ik heb totaal geen idee hoe dit exact moet als die commando uitgevoerd moet worden voor hij de pagina afsluit.
 
- Ariën -
Beheerder

- Ariën -

09/09/2018 21:12:20
Quote Anchor link
Je gebruikt dus de jQuery bibliotheek.
Je moet dus het PHP-script als bestandsnaam aanroepen met de $.ajax() functie. Of via $.get() om het simpel te houden.

$.load() kan ook nog eens. Lees de manual maar eens. :-)
Gewijzigd op 09/09/2018 21:14:11 door - Ariën -
 

Pagina: « vorige 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.