Η RecolorDocument μετακινεί ένα ολόκληρο PDF σε έναν χρωματικό χώρο, και η RecolorPage κάνει το ίδιο για μια μεμονωμένη σελίδα. Και οι δύο δέχονται 1 για γκρι, 2 για RGB και 3 για CMYK, και επιστρέφουν πόσα χρώματα μετατράπηκαν. Γεωμετρία, κείμενο και εικόνες παραμένουν ακριβώς εκεί που ήταν· μόνο το χρώμα αλλάζει
Αυτή είναι η λειτουργία που θέλετε πριν στείλετε δουλειά σε ένα τυπογραφείο που περιμένει έναν χώρο, ή όταν ένα έγγραφο χρώματος πρέπει να γίνει γκρι χωρίς να αναγεννηθεί. Η εναλλακτική — ανοικοδόμηση του εγγράφου από τα δεδομένα πηγής του στον χώρο προορισμού — είναι διαθέσιμη μόνο όταν έχετε ακόμα τα δεδομένα πηγής, που για οτιδήποτε παραλαμβάνεται από έξω δεν ισχύει
Τι μετατρέπεται, και με ποια σειρά
Πρώτα οι χρωματικοί τελεστές: τα γεμίσματα και περιγράμματα που ορίζει μια σελίδα κατά τη σχεδίαση. Ένα χρώμα ήδη στον χώρο προορισμού αφήνεται όπως είναι, οπότε μια σελίδα της οποίας τα χρώματα δεν χρειάζονται αλλαγή κρατά τα αρχικά της bytes αντί να ξαναγραφτεί σε πανομοιότυπες τιμές. Αυτή η ιδιότητα έχει μεγαλύτερη σημασία από όσο ακούγεται σε ένα μεγάλο έγγραφο, επειδή τα ανέπαφα αντικείμενα παραμένουν ανέπαφα στο αρχείο
Ακολουθούν οι εικόνες, και είναι το κομμάτι που έλειπε παλιά. Ένα έγγραφο που μετατρεπόταν σε γκρι με μόνο τους τελεστές του μετατρεπόμενους εξακολουθούσε να δείχνει έγχρωμες εικόνες σε γκρι σελίδες, που είναι χειρότερο από οποιονδήποτε από τους δύο άκρους. Μια εικόνα μετατρέπεται όταν φέρει οκτώ bit ανά συνιστώσα, έναν χρωματικό χώρο device, και είτε καθόλου συμπίεση είτε απλό Flate
Οι indexed εικόνες μετατρέπονται μέσω του χρωματικού τους πίνακα: η παλέτα μετατρέπεται και κάθε δειγματοληψία κρατά το ευρετήριο που ήδη κατείχε. Αυτό καλύπτει τις παλετωτές εικόνες στις οποίες συνήθως αποθηκεύεται ένα στιγμιότυπο οθόνης ή ένα γράφημα, και τις μετατρέπει όποια packing ή συμπίεση και αν έχουν τα δείγματά τους, επειδή τα δείγματα δεν αλλάζουν ποτέ
var
Lib: TPDFlib;
Converted: Integer;
begin
Lib := TPDFlib.Create;
try
Lib.LoadFromFile('brochure.pdf', '');
Converted := Lib.RecolorDocument(1); // 1 grey, 2 RGB, 3 CMYK
Log(Format('%d colours converted', [Converted]));
Lib.SaveToFile('brochure-grey.pdf');
finally
Lib.Free;
end;
end;
Γιατί ένα JPEG αφήνεται όπως είναι;
Επειδή η μετατροπή των χρωμάτων του θα σήμαινε επανακωδικοποίησή του, και η επανακωδικοποίηση είναι μια διαφορετική λειτουργία με διαφορετικές συνέπειες. Μια εικόνα JPEG ή fax κρατά τα δικά της bytes: αποκωδικοποίηση, μετατροπή και επανασυμπίεση θα άλλαζαν τα ίδια τα δεδομένα εικόνας, θα εισήγαγαν μια δεύτερη γενιά artifacts με απώλειες, και θα άλλαζαν το μέγεθος του αρχείου με τρόπους που δεν ζήτησε ο καλών
Οι απαλοί μάρσκες (soft masks) και οι μάρσκες stencil αφήνονται ασχολίαστες για διαφορετικό λόγο. Και οι δύο διαβάζονται ως κάλυψη παρά ως χρώμα, και η μετατροπή μίας θα άφηνε τη σελίδα να δείχνει τη μάσκα ως εικόνα — μια μάσκα διαφάνειας παρασταμένη ως γκρι artwork πάνω από το περιεχόμενο που υποτίθεται ότι διαμόρφωνε. Το να αφήνονται δεν είναι περιορισμός προς παράκαμψη· είναι το σωστό αποτέλεσμα
Τα χρώματα που ορίζονται μέσω χώρου ICCBased, Separation, Indexed ή Pattern επίσης αφήνονται όπως βρίσκονται στο επίπεδο του τελεστή. Η μετατροπή τους χωρίς ανάγνωση του προφίλ τους θα άλλαζε πώς φαίνεται η σελίδα αντί να τη διατηρήσει, και ένα πέρασμα επαναχρωματισμού του οποίου ολόκληρη η υπόσχεση είναι διατήρηση δεν μπορεί να αρχίσει να μαντεύει προφίλ
Οι διαβαθμίσεις μετατρέπονται μαζί με τις διακοπές πίσω τους
Μια διαβάθμιση είναι ένας χρωματικός χώρος συν μια συνάρτηση που παράγει χρώματα μέσα σε αυτόν, και η μετατροπή του ενός χωρίς το άλλο παράγει ασυναρτησίες — μια μετατρεπόμενη διαβάθμιση της οποίας οι διακοπές έμειναν πίσω διαβάζεται ως κανάλι που εκλαμβάνεται ως επίπεδο γκρι, που σε μια σελίδα μοιάζει με μια ζώνη εντελώς λάθος χρώματος. Ο χρωματικός χώρος της διαβάθμισης και οι διακοπές πίσω του μετακινούνται μαζί
Οι διαβαθμίσεις εντοπίζονται όπου κι αν βρίσκονται: ως δεδομένα αντικείμενο δικό τους, γραμμένες μέσα στο pattern που τις σχεδιάζει, ή καθισμένες στους πόρους shading μιας σελίδας. Αυτή η κάλυψη έχει σημασία επειδή τα εργαλεία σχεδιασμού τις διανέμουν διαφορετικά, και ένας μετατροπέας που χειριζόταν μόνο μια τοποθέτηση θα άφηνε ένα έγγραφο μισομετατρεπόμενο χωρίς προφανές μοτίβο στις αποτυχίες
Δύο είδη αφήνονται σκόπιμα όπως βρίσκονται. Μια διαβάθμιση χτισμένη από sampled ή PostScript συνάρτηση κρατά τον δικό της ορισμό, και το ίδιο κάνουν οι τύποι mesh, που φέρουν τα χρώματά τους σε stream παρά σε συνάρτηση. Η επανεγγραφή οποιουδήποτε από αυτά είναι μια διαφορετική λειτουργία από τη μετατροπή ενός χρώματος, και η σιωπηλή εκτέλεσή της μέσα σε ένα πέρασμα επαναχρωματισμού θα ήταν μια έκπληξη
// Convert a single page - useful when only the cover needs to change
Lib.SelectPage(1);
Lib.RecolorPage(3); // this page to CMYK
Lib.SaveToFile('cover-cmyk.pdf');
Πού χωράει ο επαναχρωματισμός πριν την υποβολή σε τυπογραφείο
Χρησιμοποιήστε τον ως βήμα κανονικοποίησης, όχι ως διαχείριση χρώματος. Ο επαναχρωματισμός μετατρέπει τιμές μεταξύ device χώρων· δεν εφαρμόζει ICC προφίλ, δεν σέβεται rendering intent και δεν προσομοιώνει συνθήκη τυπογραφείου. Για μια δουλειά που πρέπει να πιάσει contract proof, η ροή εργασίας βάσει προφίλ είναι η απάντηση και ο επαναχρωματισμός είναι το πολύ το βήμα που φέρνει τα πάντα σε έναν χώρο πρώτα
Εκεί που κερδίζει τη θέση του είναι το κοινό πρόβλημα παραγωγής: μια υποβολή που πρέπει να είναι γκρι και φτάνει με ένα RGB λογότυπο, ένα εσωτερικό έγγραφο που δεν πρέπει να τυπωθεί έγχρωμα, μια παρτίδα αρχείων που πρέπει να είναι σε έναν χώρο πριν ένα βήμα preflight τα δεχτεί. Συνδυάστε το με έναν έλεγχο — οι σημειώσεις για το preflight PDF/A και PDF/UA και για το εργαστήριο συμμόρφωσης και υπογραφής καλύπτουν την εκτέλεση της ετυμηγορίας ως μέρος της ίδιας δουλειάς
Αν το έγγραφο χρειάζεται επίσης εξέταση του διανυσματικού artwork παρά μετατροπή του, η ανάλυση των διανυσματικών γραφικών, shaders και διαβαθμίσεων καλύπτει πώς χτίζονται αυτά τα αντικείμενα εξ αρχής, που είναι χρήσιμο πλαίσιο για να κατανοήσετε τι μπορεί και τι δεν μπορεί να φτάσει ένα πέρασμα επαναχρωματισμού
Το PDFlibPas είναι μια native Pascal βιβλιοθήκη PDF για Delphi, C++Builder και Lazarus χωρίς εξωτερικό runtime, οπότε ένα βήμα κανονικοποίησης χρώματος τρέχει μέσα στη δική σας υπηρεσία αντί να κάνει shell-out σε έναν μετατροπέα — δείτε τη σελίδα προϊόντος PDFlibPas για το πλήρες API επεξεργασίας εγγράφων