Ένας άλλος τρόπος δημιουργίας PDF. Δωρεάν PDF Generator από το PDF24 στον υπολογιστή σας ή στο διαδίκτυο Δημιουργήστε ένα υποσέλιδο σελίδας και ένα εισαγωγικό κείμενο

11.03.2024

Ένα από τα σημαντικά μέρη οποιουδήποτε συστήματος διαχείρισης έργου είναι η ικανότητα αναφοράς για την τρέχουσα κατάσταση των πραγμάτων. Αυτό σας επιτρέπει να αξιολογήσετε με μεγαλύτερη ακρίβεια την τρέχουσα κατάσταση. Για τους χρήστες, μια τέτοια αναφορά μπορεί να είναι όχι μόνο απαραίτητα αναλυτικά στοιχεία για την εργασία, αλλά και μια μοναδική μορφή αναφοράς. Επομένως, η Revizto δίνει μεγάλη προσοχή στην τεχνική πλευρά της δημιουργίας αναφορών.

Για ορισμένους πελάτες, οι αναφορές είναι μεγάλα pdf με δεκάδες χιλιάδες σελίδες. Φυσικά, τέτοιες αναφορές ζυγίζουν gigabyte και η παραγωγή τους διαρκεί πολύ. Αντιμέτωποι με μια άλλη αύξηση στο μέγεθος της αναφοράς, αποφασίσαμε να αναλύσουμε την αρχιτεκτονική παραγωγής pdf.

Παραδοσιακά, η δημιουργία pdf στον Ιστό αποτελείται από δύο στάδια:

  • Δημιουργία σελίδας html, η οποία αργότερα θα γίνει pdf
  • Μετάφραση html σε pdf
  • Το πρώτο στάδιο στην περίπτωσή μας πήρε αρκετό χρόνο, αλλά το δεύτερο θα μπορούσε να διαρκέσει περισσότερο από μία ώρα. Επομένως, κάναμε μια μικρή σύγκριση των ευκαιριών ανοιχτού κώδικα που υπάρχουν για τη δημιουργία pdf:

    Εντολή που χρονομετρείται: "phantomjs --ssl-protocol=any ./capture.js 1.html 1.pdf" Χρόνος χρήστη (δευτερόλεπτα): 2240,56 Χρόνος συστήματος (δευτερόλεπτα): 6,96 Τοις εκατό της CPU που έλαβε αυτή η εργασία: 83% Παρήλθε ( ρολόι τοίχου) ώρα (ω:λλ:δδ ή μ:δ): 44:35,89 Μέσο μέγεθος κοινόχρηστου κειμένου (kbyte): 0 Μέσο μέγεθος μη κοινόχρηστων δεδομένων (kbyte): 0 Μέσο μέγεθος στοίβας (kbyte): 0 Μέσο συνολικό μέγεθος (kbyte ) ): 0 Μέγιστο μέγεθος συνόλου κατοίκου (kbyte): 1821840 Μέσο μέγεθος συνόλου κατοίκου (kbytes): 0 Μείζονα (απαιτεί I/O) σφάλματα σελίδας: 28 Μικρά (ανάκτηση ενός πλαισίου) σφάλματα σελίδας: 489364 Εθελοντικοί διακόπτες περιβάλλοντος: 53462 διακόπτες: 31797 Εναλλαγές: 0 Είσοδοι συστήματος αρχείων: 4576 Έξοδοι συστήματος αρχείων: 233848 Αποστέλλονται μηνύματα υποδοχής: 0 Λήφθηκαν μηνύματα υποδοχής: 0 παραδόθηκαν σήματα: 0 Μέγεθος σελίδας (bytes): 4096 Κατάσταση εξόδου: 0

    Εντολή που χρονομετρείται: "/usr/bin/google-chrome-stable --headless --disable-gpu --print-to-pdf 1.html" Χρόνος χρήστη (δευτερόλεπτα): 54,22 Χρόνος συστήματος (δευτερόλεπτα): 7,32 τοις εκατό του CPU αυτή η εργασία έλαβε: 5% Χρόνος που πέρασε (ρολόι τοίχου) (ω:λλ:δδ ή μ:δ): 18:49,74 Μέσο μέγεθος κοινόχρηστου κειμένου (kbyte): 0 Μέσο μέγεθος μη κοινοποιημένων δεδομένων (kbyte): 0 Μέσο μέγεθος στοίβας ( kbyte): 0 Μέσο συνολικό μέγεθος (kbyte): 0 Μέγιστο μέγεθος συνόλου κατοίκου (kbytes): 951796 Μέσο μέγεθος συνόλου κατοίκου (kbytes): 0 Μείζονα (απαιτείται I/O) σφάλματα σελίδας: 2 Μικρά (ανάκτηση πλαισίου) σφάλματα σελίδας: 938614 Εθελούσιοι διακόπτες περιβάλλοντος: 184497 Ακούσιοι διακόπτες περιβάλλοντος: 37463 Εναλλαγές: 0 Είσοδοι συστήματος αρχείων: 368 Έξοδοι συστήματος αρχείων: 174352 Αποστέλλονται μηνύματα υποδοχής: 0 Λήφθηκαν μηνύματα υποδοχής: 0 Παραδοθέντα σήματα: 0 Μέγεθος σελίδας: 09 bytes

  • Έγινε έξοδος της εντολής Wkhtmltopdf με μη μηδενική κατάσταση 1 Εντολή σε χρονομέτρηση: "wkhtmltopdf 1.html 1.pdf" Χρόνος χρήστη (δευτερόλεπτα): 3356,13 Χρόνος συστήματος (δευτερόλεπτα): 7,12 Τοις εκατό της CPU που έλαβε αυτή η εργασία: 99% Παρήλθε (ρολόι τοίχου) χρόνος (ω:λλ:δδ ή μ:δ): 56:21,54 Μέσο μέγεθος κοινόχρηστου κειμένου (kbyte): 0 Μέσο μέγεθος μη κοινόχρηστων δεδομένων (kbytes): 0 Μέσο μέγεθος στοίβας (kbytes): 0 Μέσο συνολικό μέγεθος (kbytes): 0 Μέγιστο μέγεθος συνόλου κατοίκου (kbytes): 3457744 Μέσο μέγεθος συνόλου κατοίκου (kbytes): 0 Μείζονα (απαιτείται I/O) σφάλματα σελίδας: 8 Μικρά (ανάκτηση ενός πλαισίου) σφάλματα σελίδας: 977440 Εθελούσιοι διακόπτες περιβάλλοντος: 38567 Ακούσιοι διακόπτες περιβάλλοντος: 38567 Ακούσιοι διακόπτες 7 Swap4: : 0 Είσοδοι συστήματος αρχείων: 1240 Έξοδοι συστήματος αρχείων: 197480 Αποστέλλονται μηνύματα υποδοχής: 0 Λήφθηκαν μηνύματα υποδοχής: 0 παραδόθηκαν σήματα: 0 Μέγεθος σελίδας (bytes): 4096 Κατάσταση εξόδου: 1
  • Από την παραπάνω δοκιμή είναι σαφές ότι το καλύτερο αποτέλεσμα επιτυγχάνεται από το χρώμιο, τότε το phantomJs είναι δύο φορές πιο κακό και τότε το Wkhtmltopdf είναι ακόμη χειρότερο. Αυτό το αποτέλεσμα απηχεί προβλήματα με την ανάπτυξη phantomJs

    Από την άλλη πλευρά, το chrome εξαρτάται από το X11, επομένως θα υπάρχουν σημαντικά περισσότερα προβλήματα με αυτό στον διακομιστή παρά με τα phantomJs.

    Εάν βγάλουμε ένα μικρό συμπέρασμα, τότε για τη δοκιμή ενός μηχανήματος με επιφάνεια εργασίας χρωμίου είναι ο αδιαμφισβήτητος νικητής. Είναι λογικό να το χρησιμοποιήσετε σε διακομιστή εάν δεν φοβάστε να βάλετε το X11 εκεί, διαφορετικά τα phantomJs θα είναι η καλύτερη επιλογή

    Για να δημιουργήσουμε ένα αρχείο PDF από HTML, θα χρησιμοποιήσουμε τη βιβλιοθήκη DomPDF για PHP. Και με αυτό θα μπορούμε να λαμβάνουμε υψηλής ποιότητας δημιουργημένα αρχεία PDF με ρωσικούς χαρακτήρες.

    Ας ξεκινήσουμε λοιπόν. Πρώτα πρέπει να κατεβάσετε την ίδια τη βιβλιοθήκη στη διεύθυνση:

    Ή εγκαταστήστε το μέσω του συνθέτη:

    Ο συνθέτης απαιτεί dompdf/dompdf

    Ωστόσο, αξίζει να σημειωθεί ότι η τυπική έκδοση ΔΕΝ υποστηρίζει χαρακτήρες ρωσικής γλώσσας. Επομένως, πρέπει να σκάβετε γύρω από το Διαδίκτυο για μεγάλο χρονικό διάστημα και να προσπαθήσετε, να προσπαθήσετε, να δοκιμάσετε. Για να μειώσετε το χρόνο σας, έχουμε ήδη συλλέξει τα πάντα. Παρακάτω, μπορείτε να κάνετε λήψη μιας βιβλιοθήκης με υποστήριξη για χαρακτήρες ρωσικής γλώσσας.

    Εάν θέλετε να χρησιμοποιήσετε την τυπική έκδοση, τότε απλώς αντικαταστήστε τα αρχεία από αυτό το αρχείο (916 KB).

    Θα χρειαστεί να αντικαταστήσετε τα αρχεία στον φάκελο:

    ../dompdf/lib/fonts

    Με αυτό το σενάριο θα μπορείτε να δημιουργήσετε σύνθετα αρχεία PDF με πίνακες, εικόνες, τα οποία θα ενσωματωθούν από HTML στο αρχείο PDF.

    Χρησιμοποιούμε αυτή τη βιβλιοθήκη για να δημιουργήσουμε PDF με αίτημα ajax. Στο αρχείο που κατεβάσατε θα βρείτε το αρχείο index.php, το οποίο επεξεργάζεται τα εισερχόμενα δεδομένα και συνδέει το πρότυπο, το οποίο έχει ήδη ενσωματωμένες εικόνες. Ανεβάσαμε για εσάς μια πλήρως λειτουργική και χρησιμοποιημένη έκδοση (5 MB).

    Λήψη ενός παραδείγματος του αρχείου PDF που δημιουργήθηκε (580 KB)

    Εάν κατεβάσατε τη βιβλιοθήκη, συνδέστε την στο αρχείο PHP χρησιμοποιώντας τη σύνδεση αυτόματης φόρτωσης:

    Require_once "dompdf/autoload.inc.php";

    Ή χρησιμοποιήστε το GIT:

    Κλώνος Git https://github.com/dompdf/dompdf.git
    cd dompdf
    κλώνος git https://github.com/PhenX/php-font-lib.git lib/php-font-lib
    cd lib/php-font-lib
    git checkout 0.5.1
    CD..
    κλώνος git https://github.com/PhenX/php-svg-lib.git php-svg-lib
    cd php-svg-lib
    git checkout v0.3

    Ο ίδιος ο χειριστής μοιάζει με αυτό:

    //Σύνδεση του προγράμματος αυτόματης φόρτωσης include_once "autoload.inc.php"; //συνάρτηση για καθαρισμό κώδικα από κακόβουλη συνάρτηση δεδομένων challsrt($data)( $array1=array("\"","*","%","0x","&","\0","\n ","\r","\s", "\t", "\\","`","^", "$","(")","[","]", " (",")", "wss", "blob", "localhost", "–","