Επεξήγηση Μορφής Αρχείου PDF: Ανατομία, Επίπεδα και Πρότυπα
Τι υπάρχει πραγματικά μέσα σε ένα PDF; Ένα επισημασμένο διάγραμμα και γλωσσάρι που καλύπτει τις τέσσερις φυσικές ενότητες (κεφαλίδα, σώμα, xref, trailer), τα έξι επίπεδα περιεχομένου (κείμενο, εικόνες, γραμματοσειρές, σχόλια, διανύσματα, υπογραφές), μεταδεδομένα και τα πρότυπα ISO (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) που βασίζονται σε αυτά.
Ένα PDF δεν είναι ένα μοναδικό πράγμα. Είναι ένας δυαδικός περιέκτης με συγκεκριμένη δομή στον δίσκο, ένα σύνολο επιπέδων περιεχομένου στοιβαγμένων μέσα σε αυτόν τον περιέκτη, και μια οικογένεια προτύπων ISO που βασίζονται στην αρχική προδιαγραφή. Ανοίξτε ένα σε έναν δεκαεξαδικό επεξεργαστή και η δομή είναι ορατή σε απλό κείμενο στις πρώτες γραμμές. Ανοίξτε ένα σε έναν προβολέα και τα επίπεδα αποδίδονται μαζί ως μία σελίδα.
Αυτός ο οδηγός είναι μια επισημασμένη αναφορά: η φυσική δομή του αρχείου, τα επίπεδα περιεχομένου που περιέχει ένα σώμα, τα μεταδεδομένα που περιβάλλουν τα πάντα, και τα πρότυπα (PDF/A, PDF/X, PDF/UA, PDF/E, PDF/VT) που το περιορίζουν για συγκεκριμένες περιπτώσεις χρήσης.

Θέλετε να χρησιμοποιήσετε αυτό το διάγραμμα στο blog σας; Αντιγράψτε αυτόν τον κώδικα ενσωμάτωσης:
Οι Τέσσερις Φυσικές Ενότητες
Κάθε PDF στον δίσκο έχει την ίδια τετραμερή δομή, με αυτή τη σειρά:
1. Κεφαλίδα (Header)
Η πρώτη γραμμή του αρχείου. Ξεκινά πάντα με %PDF- ακολουθούμενο από έναν αριθμό έκδοσης:
%PDF-1.7Οι εκδόσεις κυμαίνονται από 1.0 (που κυκλοφόρησε το 1993) έως 2.0 (που κυκλοφόρησε το 2017, τρέχουσα). Η κεφαλίδα ακολουθείται από μια γραμμή σχολίου με δυαδικά bytes που σηματοδοτούν σε FTP και άλλα εργαλεία μεταφοράς ότι πρόκειται για δυαδικό αρχείο.
2. Σώμα (Body) - Έμμεσα Αντικείμενα (Indirect Objects)
Ο κύριος όγκος του αρχείου. Κάθε σελίδα, γραμματοσειρά, εικόνα, σχόλιο και πεδίο φόρμας είναι ένα αριθμημένο έμμεσο αντικείμενο:
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Type /Page /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobjΚάθε αντικείμενο έχει ένα ID (ο αριθμός πριν από το 0 obj), έναν αριθμό γενιάς (0, που χρησιμοποιείται για επαυξητικές ενημερώσεις), και ένα ωφέλιμο φορτίο μεταξύ << και >> για λεξικά ή stream και endstream για δυαδικά streams (δεδομένα εικόνας, δεδομένα γραμματοσειράς, συμπιεσμένο περιεχόμενο).
Τα αντικείμενα αναφέρονται μεταξύ τους με τη σύνταξη <id> <gen> R (π.χ., 3 0 R σημαίνει "αντικείμενο 3, γενιά 0"). Έτσι μια σελίδα αναφέρεται στη γραμματοσειρά που χρησιμοποιεί, ή ένας κατάλογος αναφέρεται στη ρίζα του δέντρου σελίδων.
3. Πίνακας Διασταυρούμενων Αναφορών (Cross-Reference Table - xref)
Ένας πίνακας αναζήτησης με μετατοπίσεις byte. Για κάθε αντικείμενο στο σώμα, το xref καταγράφει την απόλυτη θέση του σε byte μέσα στο αρχείο:
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nΑυτό καθιστά τα PDF τυχαίας προσπέλασης. Ένας προβολέας μπορεί να διαβάσει το xref, να μεταβεί απευθείας στη μετατόπιση byte του αντικειμένου 3, και να αποδώσει αυτήν τη σελίδα χωρίς να αναλύσει το υπόλοιπο αρχείο. Γι' αυτό τα PDF ενός μόνο κεφαλαίου ανοίγουν αμέσως ακόμα κι αν το αρχικό αρχείο έχει 500 σελίδες.
4. Trailer
Η τελευταία ενότητα. Λέει στον αναλυτή πού να βρει το xref και ποιο αντικείμενο είναι η ρίζα:
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFΗ τιμή startxref είναι η μετατόπιση byte του πίνακα xref. Ο δείκτης %%EOF είναι το κυριολεκτικό τέλος του αρχείου. Τα trailers είναι αυτά που καθιστούν δυνατές τις επαυξητικές ενημερώσεις: η προσθήκη ενός νέου xref + trailer στο τέλος σας επιτρέπει να προσθέσετε αντικείμενα χωρίς να ξαναγράψετε ολόκληρο το αρχείο.
Τα Έξι Επίπεδα Περιεχομένου
Μέσα στο σώμα, το περιεχόμενο αποθηκεύεται σε έξι τύπους επιπέδων. Κάθε αποδοσμένη σελίδα PDF είναι ένα σύνθετο αποτέλεσμα αυτών των επιπέδων:
1. Κείμενο (Text)
Εντολές θέσης γλυφών και αναφορές γραμματοσειρών, όχι συμβολοσειρές κειμένου. Ένα PDF αποθηκεύει οδηγίες όπως "σχεδίασε τη γλύφα 42 από τη γραμματοσειρά F3 στη θέση (120, 540)" αντί για "σχεδίασε το γράμμα Α εδώ". Γι' αυτό το κείμενο είναι επιλέξιμο και αναζητήσιμο: ο προβολέας αντιστοιχίζει αντίστροφα τα αναγνωριστικά γλυφών σε κωδικοποιημένα σημεία Unicode μέσω ενός χάρτη ToUnicode (ή ενός CMap για γραμματοσειρές CJK).
Όταν σε ένα κείμενο λείπει ένας χάρτης ToUnicode, έχετε το κλασικό πρόβλημα "PDF με επιλέξιμο κείμενο που αντιγράφεται ως σκουπίδια". Το κείμενο είναι ορατό, αλλά ο χάρτης γλύφας-σε-Unicode είναι σπασμένος ή λείπει.
2. Εικόνες (Images)
Αποθηκεύονται ως ενσωματωμένα streams σε μία από τις διάφορες μορφές:
- JPEG (φίλτρο DCTDecode): φωτογραφίες, πιο συνηθισμένο
- JPEG2000 (JPXDecode): υψηλότερη συμπίεση, λιγότερο συνηθισμένο
- Ισοδύναμο PNG (φίλτρο FlateDecode + Predictor): στιγμιότυπα οθόνης, γραμμές σχεδίου
- CCITT Group 4 (CCITTFaxDecode): ασπρόμαυρο σαρωμένο κείμενο, χρησιμοποιείται σε αρχειακές σαρώσεις
- JBIG2 (JBIG2Decode): διμερείς εικόνες, συνηθισμένο σε έγγραφα με OCR
Οι εικόνες μπορούν να υποδειγματοληφθούν, να συμπιεστούν εκ νέου ή να αντικατασταθούν χωρίς να επηρεαστεί το υπόλοιπο περιεχόμενο.
3. Γραμματοσειρές (Fonts)
Ενσωματωμένες ως πλήρη προγράμματα γραμματοσειρών, υποσύνολα (μόνο οι χρησιμοποιούμενες γλύφες περιλαμβάνονται), ή αναφερόμενες με όνομα (πρέπει να είναι εγκατεστημένες στο σύστημα του προβολέα). Η υποσύνολη είναι η προεπιλογή - μειώνει δραματικά το μέγεθος του αρχείου. Υποστηριζόμενες μορφές γραμματοσειρών: Type1, TrueType, OpenType και CIDFont (για CJK).
Όταν μια γραμματοσειρά αναφέρεται αλλά δεν είναι ενσωματωμένη και δεν είναι εγκατεστημένη στο σύστημα του προβολέα, ο προβολέας την αντικαθιστά με μια παρόμοια γραμματοσειρά - η οποία συνήθως φαίνεται λάθος. Το PDF/A απαιτεί την ενσωμάτωση όλων των γραμματοσειρών για να αποφευχθεί αυτό.
4. Σχόλια (Annotations)
Επισημάνσεις, σχόλια, συνδέσεις, σφραγίδες, υδατογραφήματα και πεδία φόρμας είναι όλα σχόλια. Τοποθετούνται πάνω από το περιεχόμενο της σελίδας και μπορούν να προστεθούν, να επεξεργαστούν ή να αφαιρεθούν χωρίς να αλλάξει η υποκείμενη σελίδα.
Τα πεδία φόρμας είναι μια ειδική περίπτωση: ένα διαδραστικό σχόλιο widget (το ορατό μέρος) συν ένα λεξικό πεδίου (το μέρος των δεδομένων). Όταν συμπληρώνετε μια φόρμα και αποθηκεύετε, μόνο τα λεξικά πεδίων αλλάζουν - η ίδια η σελίδα παραμένει αμετάβλητη.
5. Γραφικά Διανυσμάτων (Vector Graphics)
Γραμμές, σχήματα, καμπύλες και διαδρομές που σχεδιάζονται με τελεστές τύπου PostScript (moveto, lineto, curveto). Κλιμακώνονται άπειρα χωρίς απώλεια ποιότητας. Οι περισσότερες εξαγωγές CAD, διαγράμματα και σχέδια σε PDF είναι γραφικά διανυσμάτων.
6. Ψηφιακές Υπογραφές (Digital Signatures)
Υπογραφές βασισμένες σε PKI συνδεδεμένες με εύρη byte του αρχείου. Το λεξικό υπογραφής καθορίζει "τα bytes 0 έως 12.547 και 14.200 έως το τέλος του αρχείου υπογράφονται" - ένα μικρό εύρος στη μέση είναι δεσμευμένο για την ίδια την τιμή της υπογραφής. Οποιαδήποτε αλλαγή στα υπογεγραμμένα εύρη byte καθιστά την υπογραφή άκυρη, πράγμα που δείχνει πώς το PDF ανιχνεύει παραποίηση μετά την υπογραφή.
Ορισμένα PDF έχουν πολλαπλές υπογραφές, στοιβαγμένες ως επαυξητικές ενημερώσεις - κάθε υπογράφων υπογράφει το αρχείο όπως υπήρχε όταν το έλαβε, διατηρώντας την αλυσίδα.
Μεταδεδομένα: Δύο Παράλληλα Συστήματα
Το PDF έχει δύο συστήματα μεταδεδομένων που συχνά διαφωνούν:
Τυπικό Λεξικό /Info
Αποθηκεύεται στο trailer. Πεδία: Title, Author, Subject, Keywords, Creator (η εφαρμογή με την οποία ο χρήστης δημιούργησε το έγγραφο), Producer (η εφαρμογή που δημιούργησε το PDF), CreationDate, ModDate. Απλές συμβολοσειρές κειμένου, εύκολες στην ανάγνωση με οποιοδήποτε εργαλείο PDF.
Ροή Μεταδεδομένων XMP
Μια ξεχωριστή ροή XML (Adobe XMP, βασισμένη σε RDF/XML) που υποστηρίζει πλουσιότερα σχήματα: Dublin Core, IPTC, προσαρμοσμένα σχήματα συγκεκριμένου τομέα (προφίλ χρωμάτων, εγγραφές πνευματικών δικαιωμάτων, εκδόσεις χειρογράφων).
Οι σύγχρονοι δημιουργοί PDF γράφουν και στα δύο. Παλιά PDF έχουν μόνο /Info. Ορισμένα PDF έχουν παλιά /Info από προηγούμενη έκδοση και ακριβή XMP από πρόσφατη επεξεργασία - ή το αντίστροφο. Κατά τον έλεγχο PDF για συμμόρφωση ή εγκληματολογική ανάλυση, ελέγξτε και τα δύο.
Πρότυπα ISO Βασισμένα στο PDF
Η βασική προδιαγραφή PDF είναι το ISO 32000. Αρκετά παράγωγα πρότυπα περιορίζουν το PDF για συγκεκριμένες περιπτώσεις χρήσης:
| Πρότυπο | Χρήση | Περιορισμοί |
|---|---|---|
| PDF/A | Μακροχρόνια αρχειοθέτηση | Όλες οι γραμματοσειρές ενσωματωμένες, χωρίς JavaScript, χωρίς ήχο/βίντεο, ανεξάρτητοι από συσκευή χρωματικοί χώροι. Επίπεδα συμμόρφωσης: PDF/A-1, A-2, A-3 (επιτρέπει συνημμένα αρχεία) |
| PDF/X | Παραγωγή εκτύπωσης | Χρώμα CMYK, ενσωματωμένες γραμματοσειρές και χρωματικά προφίλ, χωρίς διαφάνεια (PDF/X-1a) ή ελεγχόμενη διαφάνεια (PDF/X-4) |
| PDF/UA | Προσβασιμότητα | Δομή ετικετών, μεταδεδομένα γλώσσας, εναλλακτικό κείμενο για εικόνες, λογική σειρά ανάγνωσης |
| PDF/E | Μηχανική | 3D μοντέλα (μορφές U3D, PRC), μεταδεδομένα ειδικά για CAD |
| PDF/VT | Μεταβλητή συναλλακτική εκτύπωση | Βελτιστοποιημένο για μαζικές εξατομικευμένες ταχυδρομικές αποστολές |
Ένα PDF μπορεί να συμμορφώνεται με πολλαπλά πρότυπα ταυτόχρονα - το PDF/A-2u (αρχειοθέτηση με χαρτογράφηση Unicode) συν το PDF/UA (προσβασιμότητα) είναι συνηθισμένο για κυβερνητικά και νομικά αρχεία.
Γραμμικοποιημένα PDF (Βελτιστοποιημένα για Web)
Ένα "γραμμικοποιημένο" ή "βελτιστοποιημένο για web" PDF αναδιατάσσει το σώμα έτσι ώστε τα αντικείμενα της πρώτης σελίδας να εμφανίζονται νωρίς στο αρχείο. Ένας προβολέας web μπορεί να αποδώσει τη σελίδα 1 μετά τη λήψη μόνο των πρώτων ~50 KB αντί να περιμένει ολόκληρο το αρχείο. Το trailer διπλασιάζεται στην αρχή, συν έναν πίνακα υποδείξεων που λέει στον προβολέα πού ξεκινά κάθε σελίδα.
Οι περισσότεροι σύγχρονοι δημιουργοί PDF υποστηρίζουν τη γραμμικοποίηση ως επιλογή "Αποθήκευση για Web". Η μορφή προσθέτει 2-5% στο μέγεθος του αρχείου με αντάλλαγμα γρήγορη απόδοση της πρώτης σελίδας σε αργές συνδέσεις.
Κρυπτογράφηση και Δικαιώματα
Τα PDF μπορούν να κρυπτογραφηθούν με κωδικό πρόσβασης (ή πιστοποιητικά) και να τους δοθούν λεπτομερή δικαιώματα: εκτύπωση, αντιγραφή κειμένου, τροποποίηση, συμπλήρωση φορμών, εξαγωγή για προσβασιμότητα. Η κρυπτογράφηση αποθηκεύεται στο λεξικό /Encrypt του trailer.
Οι ισχύς της κρυπτογράφησης έχει εξελιχθεί: RC4 40-bit (πρώιμα PDF, σήμερα εύκολα σπασμένη), RC4 128-bit (ακόμα αδύναμη), AES-128, AES-256. Η αρχική υλοποίηση RC4 του Acrobat 5 έσπασε δημόσια το 2001. η σύγχρονη κρυπτογράφηση PDF (AES-256, PDF 2.0) είναι ισχυρή όταν χρησιμοποιείται με ισχυρούς κωδικούς πρόσβασης.
Σημείωση: τα "δικαιώματα" είναι συμβουλευτικά. Ένας προβολέας που τα σέβεται θα τα επιβάλει. Ένας προβολέας που τα αγνοεί (ή ένα εργαλείο που αφαιρεί την κρυπτογράφηση) δεν το κάνει.
Πώς το PDFSub Διαβάζει τα PDF
Το PDFSub επεξεργάζεται τα PDF χρησιμοποιώντας τη σύνδεση PDFium της Rust (την ίδια μηχανή που τροφοδοτεί τον προβολέα PDF του Chromium) συν το PaddleOCR για σαρωμένα έγγραφα. Για λεπτομέρειες πλήρους αρχιτεκτονικής και σύγκριση με εργαλεία cloud, δείτε Ασφάλεια PDF Browser vs Cloud.
Για τη μετατροπή PDF σε άλλες μορφές διατηρώντας τη δομή που περιγράφεται παραπάνω:
- PDF σε Excel - εξάγει κείμενο + πίνακες, διατηρεί συντεταγμένες
- OCR PDF - προσθέτει ένα επίπεδο αναζητήσιμου κειμένου σε σαρωμένα PDF
- PDF σε Word - αναδιατάσσει το κείμενο σε επεξεργάσιμες παραγράφους
- Συμπίεση PDF - υποδειγματοληπτεί εικόνες, υποσύνολα γραμματοσειρών
Για ροές εργασίας αρχειοθέτησης ειδικά, δείτε Πώς να Μετατρέψετε PDF σε PDF/A.
Περισσότερη Ανάγνωση
- ISO 32000-2 (προδιαγραφή PDF 2.0) - έγκυρη αναφορά, επί πληρωμή
- Αρχεία Αναφοράς Adobe PDF - δωρεάν αναφορά για PDF 1.7
- PDF Association - βιομηχανική ομάδα εργασίας, δωρεάν άρθρα και αρχεία δοκιμών συμμόρφωσης
Για θέματα ειδικά για PDF: Οδηγός Συμμόρφωσης PDF για Δικηγόρους, Οδηγός Μετατροπής PDF/A.