Πίνακας περιεχομένων

  1. Εισαγωγή

  2. Πώς λειτουργεί η τιμολόγηση PDF στο Dolibarr

  3. Βασικές μηχανές δημιουργίας PDF: TCPDF vs DOMPDF

  4. Συνήθη συμπτώματα σφαλμάτων εμφάνισης PDF

  5. Βασικές αιτίες πίσω από προβλήματα τιμολόγησης PDF

  6. Ροή εργασίας διαγνωστικών βήμα προς βήμα

  7. Επίλυση #1: Επιδιόρθωση σφαλμάτων προτύπου PDF

  8. Επίλυση #2: Διαχείριση συμβατότητας γραμματοσειρών

  9. Επίλυση #3: Προσαρμογή διαμόρφωσης PHP για δημιουργία PDF

  10. Επίλυση #4: Επίλυση προβλημάτων δικαιωμάτων και πρόσβασης αρχείων

  11. Επίλυση #5: Χρήση της σωστής μεθόδου εξόδου (Πρόγραμμα περιήγησης, Λήψη, Αποθήκευση)

  12. Προσαρμοσμένα πρότυπα: Βέλτιστες πρακτικές για την αποφυγή σπασίματος

  13. Συμβουλές για πολυγλωσσική και RTL (Αραβικά, Εβραϊκά) έξοδο PDF

  14. Τελικές Σκέψεις


1. Εισαγωγή

Το Dolibarr ERP & CRM είναι μια ευρέως διαδεδομένη επιχειρηματική πλατφόρμα ανοιχτού κώδικα που βελτιστοποιεί τις λειτουργίες, από την τιμολόγηση και τις πληρωμές έως τη διαχείριση αποθεμάτων, το CRM, τη λογιστική και την παρακολούθηση έργων. Ένα από τα πιο σημαντικά χαρακτηριστικά του -ειδικά για εμπορικές δραστηριότητες- είναι η δυνατότητα δημιουργίας... Τιμολόγια PDF και άλλα έγγραφα αυτόματα.

Ωστόσο, πολλοί χρήστες αντιμετωπίζουν ένα ενοχλητικό πρόβλημα: τα τιμολόγιά τους δεν εμφανίζονται σωστά, δεν δημιουργούνται καθόλου ή έχουν ως αποτέλεσμα κατεστραμμένα ή δυσανάγνωστα PDFΕίτε φιλοξενείτε τον διαχειριστή σας μόνοι σας είτε χρησιμοποιείτε μια παρουσία Dolibarr που βασίζεται στο cloud, αυτά τα προβλήματα μπορούν να διαταράξουν τις ροές εργασίας χρέωσης και να βλάψουν την επαγγελματική εικόνα της εταιρείας σας.

Αυτός ο οδηγός αναλύεται γιατί τα τιμολόγια PDF δεν αποδίδονται σωστά στο Dolibarr, πώς λειτουργεί η υποκείμενη δημιουργία PDF και πώς μπορείτε να διαγνώσετε και να διορθώσετε αυτά τα προβλήματα—γρήγορα και μόνιμα.


2. Πώς λειτουργεί η τιμολόγηση PDF στο Dolibarr

Όταν κάνετε κλικ στην επιλογή «Δημιουργία PDF» στο Dolibarr (για τιμολόγιο, πρόταση, παραγγελία κ.λπ.), το σύστημα:

  1. Χρησιμοποιεί α Πρότυπο βασισμένο σε PHP (γνωστό ως "μοντέλο PDF")

  2. Συμπληρώνει δυναμικές μεταβλητές (όνομα πελάτη, λεπτομέρειες είδους, συνολικό ποσό κ.λπ.)

  3. Στέλνει αυτό το περιεχόμενο σε ένα Μηχανή PDF (TCPDF ή DOMPDF)

  4. Εξάγει το αποτέλεσμα είτε για:

    • Άμεση λήψη

    • Εμφάνιση προγράμματος περιήγησης

    • Αποθήκευση αρχείων σε /documents/

Η δημιουργία PDF γίνεται εξ ολοκλήρου από την πλευρά του διακομιστή, πράγμα που σημαίνει ότι το περιβάλλον (έκδοση PHP, ρυθμίσεις μνήμης, υποστήριξη γραμματοσειρών) παίζει κρίσιμο ρόλο στην επιτυχία ή την αποτυχία.


3. Βασικές μηχανές δημιουργίας PDF: TCPDF vs DOMPDF

Το Dolibarr υποστηρίζει δύο κύριες μηχανές απόδοσης PDF:

TCPDF (προεπιλεγμένη μηχανή σε παλαιότερες εκδόσεις)

  • Χρησιμοποιείται ευρέως σε παλαιότερες εκδόσεις Dolibarr

  • Γρήγορο και ελαφρύ

  • Υποστηρίζει UTF-8 και βασική απόδοση εικόνας

  • Κακή υποστήριξη για CSS ή προηγμένες διατάξεις

DOMPDF (εισήχθη σε νεότερες εκδόσεις)

  • Πιο σύγχρονο και ευέλικτο

  • Υποστηρίζει διάταξη HTML5/CSS3

  • Απαιτεί περισσότερη μνήμη και βαρύτερους πόρους συστήματος

  • Καλύτερο για προσαρμοσμένα σχέδια και σύνθετα έγγραφα

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


4. Συνήθη συμπτώματα σφαλμάτων εμφάνισης PDF

Οι χρήστες συνήθως αναφέρουν τα ακόλουθα προβλήματα κατά τη δημιουργία τιμολογίων:

  • Κενό PDF χωρίς περιεχόμενο

  • Ελλιπής απόδοση (λείπουν πίνακες, τιμές, πληροφορίες πελάτη)

  • Κείμενο με λανθασμένη ευθυγράμμιση ή μετατοπίσεις διάταξης

  • Λήψεις PDF αλλά δεν ανοίγουν

  • Μηνύματα σφάλματος όπως:

    • TCPDF ERROR: Some data has already been output

    • DOMPDF Fatal error: Uncaught exception

  • Το PDF φαίνεται σωστό αλλά εμφανίζει λάθος γλώσσα ή κατεστραμμένους χαρακτήρες.

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


5. Βασικές αιτίες πίσω από προβλήματα τιμολόγησης σε μορφή PDF

Ακολουθούν οι πιο συνηθισμένες αιτίες για αποτυχίες PDF τιμολογίων στο Dolibarr:

Αιτία Περιγραφή
Κατεστραμμένο ή μη ενημερωμένο πρότυπο PDF Συντακτικά προβλήματα ή λογικά σφάλματα σε προσαρμοσμένα μοντέλα PDF
Μη συμβατή έκδοση PHP Τα DOMPDF και TCPDF έχουν αυστηρές απαιτήσεις PHP.
Λείπουν γραμματοσειρές ή υποστήριξη Unicode Οι μη λατινικοί χαρακτήρες διακόπτουν την έξοδο
Χαμηλά όρια μνήμης ή εκτέλεσης PHP Τα μεγάλα τιμολόγια δεν αποδίδονται λόγω εξάντλησης πόρων
Λανθασμένες άδειες Ο Dolibarr δεν μπορεί να γράψει σε /documents/ ή πρόσβαση σε πρότυπα
Οι κεφαλίδες εξόδου έχουν ήδη σταλεί Αποτρέπει τη σωστή δημιουργία αρχείων λόγω πρόωρης ηχούς ή κενού χώρου
Λάθος διαμόρφωση διαδρομής αρχείου Υποδεικνύει ανύπαρκτους ή παρωχημένους φακέλους
Ακατάλληλη κωδικοποίηση διακομιστή ή ρυθμίσεις τοπικών ρυθμίσεων Σπάει την πολυγλωσσική απόδοση PDF

Κάθε ένα από αυτά τα προβλήματα απαιτεί διαφορετική προσέγγιση για την επίλυσή τους.


6. Ροή εργασίας διαγνωστικής βήμα προς βήμα

Πριν από την εφαρμογή διορθώσεων, ακολουθήστε αυτήν τη δομημένη διαγνωστική ρουτίνα:

Βήμα 1: Ενεργοποιήστε τη λειτουργία προγραμματιστή

In conf.php, ενεργοποίηση λειτουργίας προγραμματιστή:

php

define('DOL_DEVELOPER_MODE', 1);

Αυτό εμφανίζει το αποτέλεσμα εντοπισμού σφαλμάτων δημιουργίας PDF.

Βήμα 2: Αναπαραγωγή του προβλήματος

  • Δοκιμάστε διαφορετικά μοντέλα τιμολογίων (π.χ. crabe, azur, rouget)

  • Δημιουργήστε PDF για μικρά και μεγάλα τιμολόγια

  • Δοκιμάστε και τις δύο ενέργειες λήψης και προεπισκόπησης

Βήμα 3: Έλεγχος αρχείων καταγραφής

  • Αρχεία καταγραφής PHP (/var/log/php/error.log)

  • Αρχεία καταγραφής Apache/Nginx (/var/log/apache2/error.log)

  • Εσωτερικό αρχείο καταγραφής του Dolibarr (εάν έχει ρυθμιστεί)

Βήμα 4: Έλεγχος πηγαίου κώδικα προτύπου

  • Πηγαίνετε στο /dolibarr/core/modules/facture/doc/

  • Ελέγξτε τον κώδικα PHP για προβλήματα σύνταξης, μη κλειστές ετικέτες ή παρωχημένες συναρτήσεις


7. Επίλυση #1: Επιδιόρθωση σφαλμάτων προτύπου PDF

Μοντέλα PDF (π.χ., pdf_crabe.modules.php) είναι γραμμένα σε PHP. Ένας μόνο χαρακτήρας που δεν έχει τοποθετηθεί σωστά μπορεί να διακόψει την έξοδο.

Λίστα ελέγχου:

  • Βεβαιωθείτε <?php οι ετικέτες δεν ακολουθούνται από κενά

  • Δεν υπάρχει έξοδος HTML ή κειμένου πριν οι κεφαλίδες έχουν οριστεί

  • Καθόλου τυχαίο echo or print κλήσεις σε λογικές ενότητες

  • Μεταβλητές όπως $this->emetteur πρέπει να αρχικοποιηθεί σωστά

Συμβουλή: Δοκιμάστε πρώτα με τα προεπιλεγμένα πρότυπα

Μετάβαση στην προεπιλογή του Dolibarr crabe μοντέλο. Εάν αυτό λειτουργεί, το πρόβλημα είναι το προσαρμοσμένο πρότυπό σας.


8. Επίλυση #2: Διαχείριση συμβατότητας γραμματοσειρών

Οι μηχανές PDF απαιτούν την κατάλληλη γραμματοσειρά για να εμφανίζουν σωστά τους χαρακτήρες.

Συμπτώματα προβλημάτων γραμματοσειράς:

  • Δεν αποδίδεται κείμενο στα Αραβικά, τα Κινέζικα ή τα Κυριλλικά

  • Κενά κενά όπου θα έπρεπε να αναγράφονται ονόματα ή διευθύνσεις

  • Το PDF εμφανίζει «????» αντί για γράμματα

Λύσεις:

  • Αλλαγή σε Γραμματοσειρές με δυνατότητα UTF-8 όπως DejaVu Sans ή FreeSerif

  • Για το DOMPDF, φορτώστε χειροκίνητα τις γραμματοσειρές χρησιμοποιώντας load_font.php χρησιμότητα

  • Αποφύγετε τις γραμματοσειρές συστήματος που δεν είναι ενσωματωμένες στο PDF που προκύπτει

Στο Dolibarr, μπορείτε να προσαρμόσετε τις ρυθμίσεις γραμματοσειράς ανά πρότυπο.


9. Επίλυση #3: Προσαρμογή διαμόρφωσης PHP για δημιουργία PDF

Το DOMPDF απαιτεί ιδιαίτερα επαρκείς πόρους διακομιστή.

Ενημέρωση php.ini:

ini

memory_limit = 512M max_execution_time = 120 upload_max_filesize = 20M post_max_size = 25M

Επανεκκινήστε το Apache/Nginx ή το PHP-FPM μετά τις αλλαγές.

Επαλήθευση επεκτάσεων

Βεβαιωθείτε ότι οι ακόλουθες επεκτάσεις PHP είναι ενεργές:

  • mbstring

  • gd

  • dom

  • fileinfo

  • intl (για υποστήριξη γλώσσας/τοπικών ρυθμίσεων)

Χρήση:

βίαιο χτύπημα

php -m | grep gd

10. Επίλυση #4: Επίλυση προβλημάτων δικαιωμάτων και πρόσβασης αρχείων

Αν ο Ντόλιμπαρ δεν μπορεί γράψε στον/στην /documents/ φάκελο, Η δημιουργία PDF αποτυγχάνει σιωπηλά.

Εντολές για τη διόρθωση δικαιωμάτων:

βίαιο χτύπημα

chown -R www-data:www-data /var/www/dolibarr/documents chmod -R 755 /var/www/dolibarr/documents

Αντικαταστήστε www-data με τον χρήστη του διακομιστή ιστού σας.

Εξασφαλίστε υποκαταλόγους για τιμολόγια (/documents/facture/) είναι παρόντα.

11. Επίλυση #5: Χρήση της σωστής μεθόδου εξόδου (Πρόγραμμα περιήγησης, Λήψη, Αποθήκευση)

Το Dolibarr επιτρέπει διαφορετικές συμπεριφορές εξόδου κατά τη δημιουργία τιμολογίων PDF:

  • Εμφάνιση στο πρόγραμμα περιήγησης (ενσωματωμένο)

  • Προτροπή για λήψη

  • Αποθήκευση απευθείας σε /documents/ κατάλογο

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

Συστάσεις:

  • Δοκιμή όλων των μεθόδων εξόδου από τη σελίδα τιμολογίου

  • Αποφύγετε την αποστολή οποιουδήποτε αποτελέσματος HTML (όπως πληροφορίες εντοπισμού σφαλμάτων) πριν από τις κεφαλίδες

  • Έλεγχος για τυχόν διένεξη Content-Type or Content-Disposition κεφαλίδες

  • Απενεργοποιήστε τις επεκτάσεις του προγράμματος περιήγησης που ενδέχεται να εμποδίζουν την απόδοση PDF

Σε ορισμένες περιπτώσεις, η εναλλαγή από την ενσωματωμένη προβολή στη λήψη λύνει προβλήματα «κενής οθόνης».


12. Προσαρμοσμένα πρότυπα: Βέλτιστες πρακτικές για την αποφυγή σπασίματος

Η δημιουργία ενός προσαρμοσμένου μοντέλου PDF για τιμολόγια είναι συνηθισμένη στο Dolibarr, αλλά εισάγει πιθανούς κινδύνους συμβατότητας με:

  • Αναβαθμίσεις έκδοσης PHP

  • Αλλαγές στη μηχανή PDF

  • Ενημερώσεις πυρήνα Dolibarr

Για να αποφύγετε μελλοντικά προβλήματα:

12.1 Χρησιμοποιήστε το Επίσημο Πρότυπο Skeleton

Χρησιμοποιήστε ένα υπάρχον πρότυπο (π.χ. crabe) ως σημείο εκκίνησης. Μείνετε πιστοί στην εσωτερική δομή του Dolibarr:

  • Καθορίζω $object σωστά (συνήθως ένα Facture παράδειγμα κλάσης)

  • Χρήση εσωτερικών βοηθητικών μεθόδων για τη δημιουργία πινάκων

  • Αποφύγετε τις θέσεις διάταξης με ενσωματωμένο κώδικα—χρησιμοποιήστε σχετική τοποθέτηση

12.2 Απολύμανση όλων των εξόδων

Συμβολοσειρές διαφυγής που ενδέχεται να περιέχουν ειδικούς χαρακτήρες ή να αλλάζουν την κωδικοποίηση:

php

$this->pdf->MultiCell(..., dol_htmlentities($line->description), ...)

12.3 Επικύρωση με Εργαλεία Προγραμματιστή

Εάν χρησιμοποιείτε προσαρμοσμένη λογική (π.χ. σύνολα, εκπτώσεις), επικυρώστε τα αποτελέσματα σε σχέση με το ενσωματωμένο PDF του Dolibarr και την προβολή στην οθόνη.

12.4 Διατήρηση προτύπων με ελεγχόμενη έκδοση

Αποθηκεύστε προσαρμοσμένα πρότυπα στο Git. Αυτό σας επιτρέπει να:

  • Επαναφορά σπασμένων εκδόσεων

  • Παρακολούθηση αλλαγών συμβατότητας με την πάροδο του χρόνου

  • Συγχωνεύστε εύκολα τις αλλαγές σε όλες τις αναβαθμίσεις του Dolibarr


13. Συμβουλές για πολυγλωσσική και RTL (Αραβικά, Εβραϊκά) έξοδο PDF

Η δημιουργία πολύγλωσσων ή PDF με γραφή από δεξιά προς τα αριστερά απαιτεί πρόσθετη προσοχή.

13.1 Ορισμός της σωστής τοπικής ρύθμισης

Βεβαιωθείτε ότι το Dolibarr έχει οριστεί στη γλώσσα χρήστη/πελάτη πριν από τη δημιουργία PDF:

php

$langs->setDefaultLang('ar_EG');

Σε ορισμένες περιπτώσεις, ίσως χρειαστεί να επιβάλετε το σύνολο χαρακτήρων:

php

header('Content-Type: application/pdf; charset=UTF-8');

13.2 Χρήση γραμματοσειρών συμβατών με RTL

Γραμματοσειρές όπως Αμίρι, Νότο Νάσχ Αραβικά, ή DejaVu Sans υποστήριξη σεναρίων RTL.

13.3 Ενεργοποίηση RTL στο DOMPDF

Το DOMPDF υποστηρίζει την RTL μόνο όταν έχει ρυθμιστεί ρητά:

php

$this->pdf->setRTL(true);

Ωστόσο, η υποστήριξη ενδέχεται να διαφέρει. Το TCPDF είναι γενικά πιο αξιόπιστο για σενάρια RTL, αλλά λιγότερο ευέλικτο ως προς τον σχεδιασμό.

13.4 Αποφύγετε την ανάμειξη LTR/RTL χωρίς ρυθμίσεις ευθυγράμμισης

Σε πίνακες, να ορίζετε πάντα ρητά τις ιδιότητες στοίχισης. Παράδειγμα:

php

$this->pdf->MultiCell(..., 'Client Name:', 0, 'R'); $this->pdf->MultiCell(..., $client_name, 0, 'L');

14. Τελικές σκέψεις

Η δημιουργία επαγγελματικών τιμολογίων PDF στο Dolibarr θα πρέπει να είναι μια απρόσκοπτη εμπειρία, αλλά μπορεί εύκολα να γίνει σημείο απογοήτευσης όταν τα πρότυπα παρουσιάζουν προβλήματα, οι ρυθμίσεις του διακομιστή έρχονται σε διένεξη ή το περιεχόμενο δεν αποδίδεται.

Ακολουθεί μια τελική λίστα ελέγχου για να διασφαλίσετε μια αξιόπιστη έξοδο PDF:

✅ Χρήση επίσημα πρότυπα ως βάση για προσαρμοσμένες εργασίες
Διατηρήστε τις εκδόσεις PHP και Dolibarr ευθυγραμμισμένες με συμβατότητα μονάδων
✅ Εξασφαλίστε κάλυψη γραμματοσειράς για κάθε γλώσσα που χρησιμοποιείτε
✅ Ορίστε σωστά δικαιώματα σχετικά με την /documents/ κατάλογο
✅ Επικύρωση σύνταξη προτύπου, αποφύγετε την πρόωρη έξοδο
✅ Τακτικά δοκιμή προσαρμοσμένων προτύπων μετά τις αναβαθμίσεις του Dolibarr
✅ Εάν είναι πολύγλωσσο ή RTL: επαληθεύστε τη συμπεριφορά γραμματοσειράς + διάταξης σε πραγματικά δεδομένα.
✅ Χρήση αρχεία καταγραφής και λειτουργία προγραμματιστή για την ανίχνευση σιωπηλών σφαλμάτων

Μια μικρή παράλειψη διαμόρφωσης ή ένα παρωχημένο πρότυπο μπορεί να διαταράξει ολόκληρη τη ροή εργασίας τιμολόγησης. Ωστόσο, με το διαγνωστικό πλαίσιο και τις διορθώσεις που περιγράφονται λεπτομερώς σε αυτόν τον οδηγό, θα έχετε όλα όσα χρειάζεστε για να αντιμετωπίσετε — και να αποτρέψετε — προβλήματα που σχετίζονται με PDF στο Dolibarr.

Εφαρμόζοντας αυτές τις βέλτιστες πρακτικές, διασφαλίζετε ότι τα PDF των τιμολογίων σας είναι σαφής, αξιόπιστη, επαγγελματική και πλήρως λειτουργική—ανεξάρτητα από την έκδοση του Dolibarr ή της PHP που χρησιμοποιείτε.