Προς το περιεχόμενο

Μετατροπή αρχείου html σε pdf


doctorized

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Θέλω να προσθέσω σε ιστοσελίδα τη δυνατότητα να μετατρέπει ένα αρχείο html σε pdf (έχω τον κώδικα που θα φορτώσει τον html κώδικα και θα γίνουν κάποιες προσθήκες μέσω php) και ψάχνω να βρω τρόπο να το υλοποιήσω. Αρχικά δοκίμασα με dompdf 3.0.0. Έχει την απλότητα του phpmailer, κατεβάζεις το αρχείο zip από github, το ρίχνεις στον ιστοχώρο σου (έχω πρόσβαση μέσω plesk), αποσυμπιέζεις και το δουλεύεις. Χρησιμοποίησα τον παρακάτω κώδικα:

<?php
$html = file_get_contents('pdf.html');

// reference the Dompdf namespace
require_once 'dompdf/autoload.inc.php';
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html,'UTF-8');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'portraite');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
?>

αλλά οι ελληνικοί χαρακτήρες εμφανίζονται με ? παρόλο που στο head έχω βάλει:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

και οι εικόνες που έχω προσθέσει εμφανίζονται με ένα τετράγωνο που έχει ένα τεράστιο Χ μέσα.

Ύστερα είπα να δοκιμάσω το mpdf για το οποίο διάβασα ότι υποστηρίζει καλύτερα τα ελληνικά. Η επίσημη σελίδα αναφέρει ότι η εγκατάσταση πρέπει να γίνει με composer για να εγκατασταθούν όλα τα πακέτα που χρειάζεται για να τρέξει. Είδα να αναφέρεται ότι μπορείς να τρέξεις composer σε έναν υπολογιστή και να μεταφέρεις το φάκελο που θα εγκατασταθεί στον υπολογιστή που σε ενδιαφέρει. Δοκίμασα σε pc με win 10 να εγκαταστήσω composer αφού πρώτα κατέβασα php 8.3.13 γιατί μου ζητούσε το php.exe κατά την εγκατάσταση. Ανοίγω γραμμή εντολών, δίνω την εντολή

composer require mpdf/mpdf

και μου λέει:

Cannot use mpdf/mpdf's latest version v8.2.4 as it requires ext-gd * which is missing from your platform.
Cannot use mpdf/mpdf v8.2.0 as it requires php ^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 which is not satisfied by your platform.

Τελικά εγκαθιστά την έκδοση 6.1.0. Πήρα τον φάκελο mpdf που βρήκα στη διαδρομή C:\Users\User4\vendor\mpdf και τον έριξα στο plesk (συμπίεση σε zip και αποσυμπίεση). Δοκιμάζω με:

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

και μου εμφανίζει κενή, λευκή σελίδα. Τα φώτα σας παρακαλώ!

(Γενικά δεν είμαι εξοικειωμένος με τέτοια πρόσθετα και συνήθως προτιμώ αυτά που δεν θέλουν εγκατάσταση σαν το phpmailer, το ρίχνεις μέσα και τελείωσες.)

Επεξ/σία από doctorized
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χωρίς να μπορώ να σε βοηθήσω άμεσα θα σου συνιστουσα να αναβαθμίσεις την php του server(αλλά και του υπολογιστή σου) σε τουλάχιστον version 7.0 ή αν μπορείς και στην τελευταία.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

10 λεπτά πριν, Xvipes είπε

Χωρίς να μπορώ να σε βοηθήσω άμεσα θα σου συνιστουσα να αναβαθμίσεις την php του server(αλλά και του υπολογιστή σου) σε τουλάχιστον version 7.0 ή αν μπορείς και στην τελευταία.

O server έχει php 8.2 και είμαι πελάτης, όχι διαχειριστής. Στον προσωπικό μου υπολογιστή που δεν είναι server, κατέβασα την 8.3, απλώς αποσυμπίεσα το αρχείο zip, δεν έκανα κάποια άλλη ενέργεια και αυτή έδωσα στο composer όταν μου τη ζήτησε κατά την εγκατάσταση. Σε κάθε περίπτωση έχω μία έκδοση 6.1.0 του mpdf και δεν μου δουλεύει. Σίγουρα κάτι δεν έχω κάνει σωστά, αλλά τι;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

8 λεπτά πριν, Xvipes είπε

Με βάσει το error που πόσταρες δεν έχεις το GD extension, δες εδώ και ίσως θες και την τελευταία version του mpdf που βλέπω πως υποστηρίζει php 8.3

Όπως προανέφερα, η αρχική εγκατάσταση γίνεται σε υπολογιστή με Windows 10 και όχι Linux.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

49 minutes ago, doctorized said:

Θέλω να προσθέσω σε ιστοσελίδα τη δυνατότητα να μετατρέπει ένα αρχείο html σε pdf (έχω τον κώδικα που θα φορτώσει τον html κώδικα και θα γίνουν κάποιες προσθήκες μέσω php) και ψάχνω να βρω τρόπο να το υλοποιήσω. Αρχικά δοκίμασα με dompdf 3.0.0. Έχει την απλότητα του phpmailer, κατεβάζεις το αρχείο zip από github, το ρίχνεις στον ιστοχώρο σου (έχω πρόσβαση μέσω plesk), αποσυμπιέζεις και το δουλεύεις. Χρησιμοποίησα τον παρακάτω κώδικα:

<?php
$html = file_get_contents('pdf.html');

// reference the Dompdf namespace
require_once 'dompdf/autoload.inc.php';
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html,'UTF-8');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'portraite');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
?>

αλλά οι ελληνικοί χαρακτήρες εμφανίζονται με ? παρόλο που στο head έχω βάλει:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

και οι εικόνες που έχω προσθέσει εμφανίζονται με ένα τετράγωνο που έχει ένα τεράστιο Χ μέσα.

Ύστερα είπα να δοκιμάσω το mpdf για το οποίο διάβασα ότι υποστηρίζει καλύτερα τα ελληνικά. Η επίσημη σελίδα αναφέρει ότι η εγκατάσταση πρέπει να γίνει με composer για να εγκατασταθούν όλα τα πακέτα που χρειάζεται για να τρέξει. Είδα να αναφέρεται ότι μπορείς να τρέξεις composer σε έναν υπολογιστή και να μεταφέρεις το φάκελο που θα εγκατασταθεί στον υπολογιστή που σε ενδιαφέρει. Δοκίμασα σε pc με win 10 να εγκαταστήσω composer αφού πρώτα κατέβασα php 8.3.13 γιατί μου ζητούσε το php.exe κατά την εγκατάσταση. Ανοίγω γραμμή εντολών, δίνω την εντολή

composer require mpdf/mpdf

και μου λέει:

Cannot use mpdf/mpdf's latest version v8.2.4 as it requires ext-gd * which is missing from your platform.
Cannot use mpdf/mpdf v8.2.0 as it requires php ^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 which is not satisfied by your platform.

Τελικά εγκαθιστά την έκδοση 6.1.0. Πήρα τον φάκελο mpdf που βρήκα στη διαδρομή C:\Users\User4\vendor\mpdf και τον έριξα στο plesk (συμπίεση σε zip και αποσυμπίεση). Δοκιμάζω με:

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

και μου εμφανίζει κενή, λευκή σελίδα. Τα φώτα σας παρακαλώ!

(Γενικά δεν είμαι εξοικειωμένος με τέτοια πρόσθετα και συνήθως προτιμώ αυτά που δεν θέλουν εγκατάσταση σαν το phpmailer, το ρίχνεις μέσα και τελείωσες.)

Τα μηνύματα λάθους που παίρνεις δείχνουν ότι δεν αναγνωρίζεται η PHP που έχει ο server. Επίσης, σωστά κατά τη γνώμη μου, σου επισημαίνει ο/η Xvipes ότι χρειάζεται να ενεργοποιήσεις το module gd μέσω του php.ini.

Τρέξε τον composer με παράμετρο -vvv για να σου δώσει μεγαλύτερη ανάλυση στα σφάλματα. Τσέκαρε αυτό το post.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

25 minutes ago, doctorized said:

Όπως προανέφερα, η αρχική εγκατάσταση γίνεται σε υπολογιστή με Windows 10 και όχι Linux.

Μα η απάντηση που έκανα link είναι για Windows με xampp.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε στο html -> $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');

Επισης (ασχετο) αυτο θα βοηθησει στο file size:

            $options->setIsHtml5ParserEnabled(true); //auto gia html5 ean grafeis
            $options->setIsFontSubsettingEnabled(true); //reduce file size
            $dompdf = new Dompdf($options);

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Ακολούθησα τη συμβουλή σας. Αρχικά, ακολουθώντας τα βήματα εδώ, μετέφερα τον φάκελο της php από την επιφάνεια εργασίας στο C:\Program Files και έκανα τη σχετική προσθήκη στο path των μεταβλητών περιβάλλοντος. Στο php.ini έδιωξα το ; από τη γραμμή του GD ώστε να χρησιμοποιηθεί. Έτρεξα πάλι την εντολή

composer require mpdf/mpdf

και αυτή τη φορά εγκαταστάθηκε η τελευταία έκδοση του mpdf χωρίς πρόβλημα. Μετά, μετέφερα όλο το φάκελο vendor από το C:\Windows\System32 στην ιστοχώρο και επιτέλους είδα το Hello World! Με το mpdf δεν έχω κανένα πρόβλημα με τα ελληνικά ούτε με τις εικόνες που είχα στο dompdf. 1 απορία έχω τώρα. Πώς ορίζω γραμματοσειρά την Times New Roman; Ό,τι και να έκανα δεν λειτουργεί. Κατέβασα τα αρχεία της γραμματοσειράς (4 αρχεία, η κανονική, η bold, η italic και η bold italic) και τα έριξα στον φάκελο ttfonts του mpdf, πρόσθεσα στον κώδικά μου:

$mpdf = new \Mpdf\Mpdf([
	'format' => 'A4',
	'default_font_size' => 16,
	'default_font' => 'timesnewroman'
]);

δοκίμασα με timesnewroman, times new roman, Times New Roman και άλλα τέτοια, αλλά τίποτα δε βοήθησε. Τι πρέπει να κάνω;

Επιπλέον, πώς μπορώ να έχω διαφορετικό μέγεθος γραμματοσειράς σε κάποιες παραγράφους;

Επεξ/σία από doctorized
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...