dynamic pdf για Προχωρημένους

Προβλήματα που αντιμετωπίζουμε χρησιμοποιώντας τα Windows και τα προγράμματά τους. Νέα & ειδήσεις.

Συντονιστές: Super-Moderators, Software & Hardware Moderators

Απάντηση
wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 00:38

Μου έχουν αναθέσει ένα αρκετά δύσκολο project στην δουλειά και δυστυχώς μέχρι σήμερα δεν έχω βρει ακόμα λύση. Έχω φτάσει όμως αρκετά κοντά και θα ήθελα να μοιραστώ τις έρευνες που έχω κάνει μέχρι στιγμής.

Το ζητούμενο είναι το εξής:

Να φτιάξω ένα πρόγραμμα που θα κάνει generate reports / αναφορές από dynamic data και να το μετατρέψω σε pdf.

Οι προϋποθέσεις είναι:
  1. Cover Page(s) / Introduction (Να έχω κάποιες σελίδες που να εξηγούν για την αναφορά και να μην έχουν header/footer)
  2. TOC (Table of Contents)
  3. Nα έχω δυναμικά δεδομένα από μεταβλητές (π.χ το όνομα του χρήστη για τον οποίο θα γραφτεί η αναφορά)
  4. Page break / pagination
  5. Widow-orphan protection (Να μπορώ να κάνω group μερικά στοιχεία στην σελίδα τα οποία δεν θα χωρίζουν αναμεταξύ τους, π.χ. Αν έχω διαφορά γραφήματα, δεν θα ήθελα η επικεφαλίδα από το γράφημα και το κείμενο που το συνοδεύει να είναι σε διαφορετική σελίδα, δηλαδή κάτι σαν το page-break-inside avoid στο CSS3)
  6. Header/footer για κάθε σελίδα και συγκεκριμένη αρίθμηση σελίδων (Μερικές σελίδες δεν θα πρέπει να έχουν αριθμούς όπως παράδειγμα αυτές στο TOC ή αυτές που θα είναι στα Cover Pages.
  7. Text wrapping ανάμεσα σε εικόνες και ανάμεσα σε dynamic text. (Κάτι σαν το CSS float ή το textbox στο Word.)
Για να καταφέρω τον σκοπό μου δοκίμασα 2 διαφορετικές μεθόδους και δυστυχώς και στις 2 βγήκα σε αδιέξοδο.
  1. Μετατροπή από html σε pdf μιας και οι αναφορές είχαν γραφτεί ήδη σε html/css
  2. Δημιουργία του pdf από την αρχή με την βοήθεια κάποιου εργαλείου, 3rd party software, php class κτλ)
Με την πρώτη μέθοδο δεν κατάφερα το (e) και το (f) από τις προϋποθέσεις. Και αυτό γιατί δεν υπάρχουν μέχρι σήμερα ούτε καν browsers που να υποστηρίζουν αυτές τις CSS ιδιότητες. Οι ιδιότητες αυτές έχουν γραφτεί και βρίσκονται στην σελίδα www.w3.org/TR/css3-page/ αλλά για παράδειγμα η τελευταία έκδοση του Firefox (3.0.6) ΙΕ7 και Safari δεν υποστηρίζουν το page-break-inside:avoid και page ιδιότητες για header/footer. Ο Opera υποστηρίζει το page-break-inside:avoid αλλά όχι ακόμα τα headers/footers.

Τα καλύτερα εργαλεία που βρήκα για αυτές τις μετατροπές είναι ένα firefox extension που μπορεί να μετατρέψει σε pdf από command line και το wkhtmltopdf το οποίο δουλεύει με το Webkit/Safari Engine. Επειδή με αυτόν τον τρόπο είχα σαν περιορισμό τις δυνατότητες του Browser (Firefox/Safari) δεν κατάφερα να έχω header/footers και σωστά page breaks.

Η καλύτερη λύση για τον δεύτερο τρόπο σύμφωνα με την έρευνα μου ήτανε το tcpdf class για php. Με αυτό κατάφερα να έχω σχεδόν όλες τις προϋποθέσεις εκτός από το (g). Δεν κατάφερα δηλαδή να έχω σωστό text/wrapping ανάμεσα σε εικόνες ή dynamic text. Κάτι σαν αυτό.. Θα πρέπει δηλαδή να κάνω κάτι παρόμοιο με το CSS float χωρίς την χρήση του CSS. Δεν έχω δει κάτι τέτοιο μέχρι στιγμής να γίνεται σε server-side παρά μόνο σε client-side (browsers).

Η γλώσσα προγραμματισμού ή ο τρόπος δεν με ενδιαφέρει και τόσο όσο το αποτέλεσμα. Δηλαδή αν υπάρχει κάτι που το κάνει σε html ή word ή postscript και από εκεί το μετατρέπω σε pdf. Επίσης δεν ψάχνω μόνο δωρεάν λύσεις αλλά και λύσεις που θα χρειαστεί να ξοδευτούν χρήματα. Κάτι σαν PDF API ή κάτι που να υποστηρίζει όλες τις προϋποθέσεις και ας κοστίσει.
Για μένα μέχρι στιγμής η δυσκολία αυτού του project είναι σχεδόν το ίδιο σαν να μου ζητάνε να γράψω δικό μου browser.

Εξωτερικοί σύνδεσμοι
TCPDF Examples Συγκεκριμένα το 20 είναι κοντά σε αυτό που θέλω αλλά δεν κάνει text-wrapping
Use PHP to Create Dynamic pdf Files
dompdf
HowtoGeneratePDFs with Rails

Άβαταρ μέλους
ksarm
Δημοσιεύσεις: 915
Εγγραφή: 22 Μάιος 2007 10:47

dynamic pdf για Προχωρημένους

Δημοσίευση από ksarm » 10 Φεβ 2009 10:40

Adobe Coldfusion

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από ThyClub » 10 Φεβ 2009 10:44

Το αρχείο που θα φτιάξεις θα πρέπει να περιέχει κείμενο? Γιατί αν δεν έχεις πρόβλημα μ αυτό τότε αν μετατρέψεις το κείμενο σε εικόνα και μετά τις πετάξεις στο pdf θα είναι πολύ πιο εύκολο και πιο αποδοτικό. ;)

Άβαταρ μέλους
Hermeia
Honorary Member
Δημοσιεύσεις: 987
Εγγραφή: 02 Αύγ 2004 00:14
Τοποθεσία: Αθήνα
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από Hermeia » 10 Φεβ 2009 13:17

Μια ιδέα.. δοκίμασε να έχεις σαν πρώτο στόχο word-doc.. μια που αυτό τα υποστηρίζει όλα όσα θέλεις..
μετά, αν χρειαστεί, το word το κάνει html..
κάνε ένα τέτοιο παράδειγμα : word .doc με όλες τις προϋποθέσεις σου και μετατροπή του σε html - δεν είναι το μικρότερο html που θα μπορούσες.. αλλα θα έχει τις προϋποθέσεις σου κληρονομημένες μέσα..
κι ίσως μετα να τις χρησιμοποιήσεις και αλλιώς..


καλη τυχη
Hermeia the InfoSharer
Η Γνώση είναι Δύναμη
Εικόνα

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 16:17

Ευχαριστώ για τις προτάσεις σας. Το να μετατρέψω το κείμενο σε εικόνα δεν με χαλάει και τόσο αλλά το πρόβλημα είναι οτί δεν ξέρω πόσο ακριβώς είναι το κείμενο, δηλαδή αν θα χωρέσει σε μια σελίδα ή αν θα χρειαστεί page break. Θα πρέπει να υπολογίζω τις διαστάσεις της κάθε εικόνας.

Και η ιδέα για το word καλή είναι, απλά δεν γνωρίζω ακόμα πως να γράψω αρχείο word δυναμικά. Νομίζω θα μπορούσε να γίνει με τα COM objects σε php, αλλά αυτά που θέλω είναι πολύ συγκεκριμένα και θα πρέπει να βρω καλό documentation για κάτι τέτοιο.

Άβαταρ μέλους
EneMe
Super Moderator
Δημοσιεύσεις: 13307
Εγγραφή: 09 Ιούλ 2002 13:29
Τοποθεσία: Στο κέντρο της Ελλάδας!
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από EneMe » 10 Φεβ 2009 16:34

Αν και δεν έχω σχέση με αυτά, την ιδέα την δημιουργίας εικόνας σκέφτηκα κι εγώ!.

Μια μπακάλικη ιδέα:

Θα μπορούσες να ορίσεις μέγιστο αριθμό χαρακτήρων ανά γραμμή, ώστε έτσι να παράγονται χωριστές γραμμές κειμένου.
Το ζητούμενο είναι να ορίσεις να δημιουργείται μια εικόνα για κάθε γραμμή κειμένου [γνωστού ύψους σε pixels - ίσως και με κάποιο justify για να είναι κι όμορφο], άρα ελέγχεις τις σελίδες με την έννοια ότι κάθε πχ 25 γραμμές-εικόνες θα εισάγεται pagebreak.

Τελοσπάντων, πολύ κουλό αυτό που σκέφτηκα, απλά είπα να την πετάξω την χαζομάρα μου κι εγώ! :P

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από ThyClub » 10 Φεβ 2009 16:43

@Eneme

Καθόλου κουφό. Αυτό ακριβώς κάνω και έχω αρκετά καλά αποτελέσματα ακόμη και με ελληνικούς χαρακτήρες.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από ThyClub » 10 Φεβ 2009 16:44

με μια εικόνα όμως και όχι 25 ;)

Άβαταρ μέλους
Hermeia
Honorary Member
Δημοσιεύσεις: 987
Εγγραφή: 02 Αύγ 2004 00:14
Τοποθεσία: Αθήνα
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από Hermeia » 10 Φεβ 2009 17:12

wabbit έγραψε:Και η ιδέα για το word καλή είναι, απλά δεν γνωρίζω ακόμα πως να γράψω αρχείο word δυναμικά. Νομίζω θα μπορούσε να γίνει με τα COM objects σε php, αλλά αυτά που θέλω είναι πολύ συγκεκριμένα και θα πρέπει να βρω καλό documentation για κάτι τέτοιο.
ξαναλέω, και θα προσπαθήσω να το εξηγήσω καλύτερα..

ειπα:
κάνε ένα τέτοιο παράδειγμα : word .doc
(και όχι παραμετρικό για όλα, ΕΝΑ παράδειγμα μόνο)

με όλες τις προϋποθέσεις σου
και
μετατροπή του σε html

[το html που θα προκύψει..], θα έχει τις προϋποθέσεις σου κληρονομημένες μέσα..
κι ίσως μετα να τις χρησιμοποιήσεις και αλλιώς..

Πάει να πεί:
έτσι θα δεις πώς γίνονται html tags οι απαιτήσεις σου όλες
- νομίζω και το Page break το ορίζει κάπως το word.. με μηκος σελίδας (και συγκεκριμενο μεγεθος γραμμης σε μμ)


Καταλαβαίνω ότι μπορεί να μην σε ενδιαφέρει καθόλου αυτή η δοκιμή, αλλα παρακαλώ μην μου απαντάς σε άλλο θέμα (πχ δυναμικό word αρχείο, που δεν πρότεινα)


Ευχαριστώ πολύ
και λυπαμαι, αλλα δεν μπορώ να βοηθήσω άλλο στο θέμα αυτό.
Hermeia the InfoSharer
Η Γνώση είναι Δύναμη
Εικόνα

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 17:27

Είναι λίγο πιο πολύπλοκο όμως. Αν δεις αυτό το παράδειγμα και υπολόγισε οτί τέρμα πάνω αριστερά θα έχω μια εικόνα και το floating text που βρίσκεται στην μέση δεξιά δεν έχει συγκεκριμένο αριθμό σειρών. Θα πρέπει να υπολογίσω δηλαδή το πλάτος από αυτές τις 2 εικόνες για να το αφαιρέσω από τον μέγιστο αριθμό χαρακτήρων ανά γραμμή και το ύψος για να ξέρω πότε τελειώνει. Και πάλι είναι μπέρδεμα γιατί φαντάσου την λέξη "δημιουργείται" με 13 χαρακτήρες να σου τύχει 2 φορές ανάμεσα σε 5 σειρές και να σου απομένουν μόνο 10 χαρακτήρες στην σειρά. Οπότε οι 5 σειρές θα γίνουν αυτόματα 7.

Επίσης δεν θα έχω μόνο κείμενο. Θα έχω επικεφαλίδες πριν από παραγράφους που θα έχουν μεγαλύτερες γραμματοσειρές. Θα έχω bullets π.χ. για Quick Tips που δεν θα γνωρίζω τον αριθμό. Θα μπορούσα δηλαδή να έχω από 3 listing bullets μέχρι και 15. Θα μπορούσα να έχω quotes από εφημερίδες, ποιήματα κτλ δεξιά και αριστερά σε οποιοδήποτε σημείο τις σελίδας και θα πρέπει να κάνω το κυρίως κείμενο να πηγαίνει ανάμεσα.

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 17:42

Hermeia σε ευχαριστώ για την βοήθεια αλλά η επικεφαλίδα αυτού του project είναι dynamic pdf. Δεν γνωρίζω δηλαδή την ποσότητα από το κείμενο που θα έχω στο Output, θα μπορούσε να είναι απο 3 μέχρι 10 σελίδες. Και όλη η δουλεία πρέπει να γίνει σε server-side να υπάρχει δηλαδή ένα πρόγραμμα η script που θα κάνει generate το report. Αν δεν γνωρίζω πως θα το γράψω στο word δυναμικά και να έχω μέσα στο κείμενο όλα αυτά τα περίεργα, π.χ. εικόνες, παραγράφους, bullet listing, αποσπάσματα δεξιά και αριστερά στο κείμενο κάτι σαν tables στο Word δηλαδή που θα είναι ανάμεσα στο κείμενο δεξιά και αριστερά, γραφήματα (οριζόντια, pie), headers/footers σε συγκεκριμένες σελίδες κτλ. πως θα καταφέρω μετά να το μετατρέψω σε pdf;

Θα πρέπει πρώτα να δημιουργήσω το αρχείο στο Word με κάποιο τρόπο.

Άβαταρ μέλους
unreal
Δημοσιεύσεις: 49
Εγγραφή: 04 Ιουν 2004 16:12
Τοποθεσία: Inside My Brain!

dynamic pdf για Προχωρημένους

Δημοσίευση από unreal » 10 Φεβ 2009 18:52

ίσως λέω βλακεία.. αλλα έχεις checkarei καθόλου το LaTeX?

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 19:39

unreal Η ιδέα είναι πολύ καλή. Αν θα μπορούσα να το κάνω σε κάποιο format που θα μπορούσε να μετατραπεί σε pdf αργότερα είναι μια λύση.

Θα το ερευνήσω περισσότερο το θέμα. Δυστυχώς δεν γνωρίζω και τόσα πολλά από LaTeX

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

dynamic pdf για Προχωρημένους

Δημοσίευση από dva_dev » 10 Φεβ 2009 21:29

Αν δεν απορρίπτεις την ιδέα της hermeia να δημιουργήσεις word document, μπορείς να χρησιμοποιήσεις 2-3 βασικές τεχνικές για να γίνει η δουλειά σου πιο εύκολα.

1) Δημιουργείς template (dot). Δεν χρειάζεται να ξεκινάς από άδειο έγγραφο κάθε φορά. Μερικά βασικά πράγματα, όπως έτοιμη μορφοποίηαη ή κάποιο standard κείμενο θα μπορούσε να είναι εκεί μέσα.
2) Αν γνωρίζεις (ή μπορείς να καταλάβεις vba κώδικα), το word, μπορεί να σου δείξει τι κώδικα χρειάζεσαι για να δημιουργήσεις οτιδήποτε μπορεί να κάνει το word. Δες το "record new macro".
3) Αφού φτιάξεις το word document, το στέλνεις για εκτύπωση όπως είναι σε οποιονδήποτε pdf printer για να πάρεις το pdf.

Δοκιμάζεις εναλλακτικά να δημιουργήσεις word έγγραφο από ότι έχεις διαθέσιμο σε html (αφού λες ότι κάτι έχεις έτοιμο), και προσθέτεις πίνακα περιεχομένων, και μετά εκτύπωση σε pdf printer.

wabbit
Δημοσιεύσεις: 52
Εγγραφή: 24 Αύγ 2006 22:55

dynamic pdf για Προχωρημένους

Δημοσίευση από wabbit » 10 Φεβ 2009 22:21

Πολύ καλή η ιδέα σου dva_dev, αυτό όντως μου ακούγεται σαν κάτι που θα μπορούσε να πραγματοποιηθεί με λίγη δουλειά.

Επίσης ήθελα να ευχαριστήσω και τον ksarm για την ιδέα για το ColdFusion.

Επιτέλους νιώθω ότι βλέπω λίγο φως στο τούνελ.

Σας ευχαριστώ όλους και δεν απορρίπτω την ιδέα κανενός

Απάντηση

Επιστροφή στο “Windows Software Guide”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες