Χειριστείτε το περιεχόμενο PDF με το νέο ONLYOFFICE PDF Editor API
Η ONLYOFFICE παρουσίασε πρόσφατα ένα νέο PDF API, φέρνοντας υποστήριξη μακροεντολών στο PDF. Με αυτές τις νέες μεθόδους, μπορείτε να αλληλεπιδράτε με έγγραφα PDF μέσω προγραμματισμού — αυτοματοποιώντας εργασίες που διαφορετικά θα απαιτούσαν χειρωνακτική εργασία. Σε αυτήν την ανάρτηση ιστολογίου, θα εξερευνήσουμε τρεις πρακτικές μακροεντολές που δείχνουν τι μπορείτε να κάνετε με το νέο API.

Νέες μέθοδοι PDF API
Ακολουθεί μια επισκόπηση των νέων μεθόδων που χρησιμοποιούνται σε τρία παραδείγματα μακροεντολών:
- GetPagesCount() — επιστρέφει τον συνολικό αριθμό σελίδων στο έγγραφο PDF.
- GetPage(index) — ανακτά ένα συγκεκριμένο αντικείμενο σελίδας με βάση τον δείκτη της, επιστρέφοντας ένα αντικείμενο ApiPage.
- GetAllAnnots() — επιστρέφει μια σειρά από όλα τα αντικείμενα σχολιασμού σε μια δεδομένη σελίδα.
- GetContents() — ανακτά το περιεχόμενο κειμένου ενός σχολιασμού.
- GetAllDrawings() — επιστρέφει μια σειρά από όλα τα αντικείμενα σχεδίασης (σχήματα, γραφήματα, εικόνες).
- SetPosition(x, y) — τοποθετεί ένα αντικείμενο σχεδίασης απευθείας στη σελίδα χρησιμοποιώντας απόλυτες συντεταγμένες.
- AddObject(object) — προσθέτει ένα αντικείμενο σχεδίασης (σχήμα, γράφημα, εικόνα) σε μια συγκεκριμένη σελίδα
- Delete() — αφαιρεί το καθορισμένο αντικείμενο από το έγγραφο.
Αυτές οι μέθοδοι ανήκουν στις κλάσεις ApiDocument, ApiPage, ApiBaseAnnotation και ApiDrawing. Μπορούν να συνδυαστούν με τις υπάρχουσες μεθόδους του Office API που μπορεί να γνωρίζετε ήδη.
Παράδειγμα 1: Κατάργηση σχολιασμών με λέξη-κλειδί
Η πρώτη μας μακροεντολή βρίσκει και διαγράφει όλους τους σχολιασμούς που περιέχουν μια συγκεκριμένη λέξη-κλειδί. Ας την εξετάσουμε βήμα προς βήμα.
Ρύθμιση της λέξης-κλειδιού και του εγγράφου
const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;
Αρχικά, ορίζουμε τη λέξη-κλειδί-στόχο — οποιοσδήποτε σχολιασμός της οποίας το περιεχόμενο περιλαμβάνει αυτήν τη λέξη θα αφαιρεθεί. Στη συνέχεια, ανακτούμε το τρέχον έγγραφο και λαμβάνουμε τον συνολικό αριθμό σελίδων με την GetPagesCount(). Η μεταβλητή deletedCount θα παρακολουθεί πόσους σχολιασμούς διαγράφουμε.
for (let i = 0; i < pagesCount; i++) {
const page = doc.GetPage(i);
const annots = page.GetAllAnnots();
if (!annots || annots.length === 0) continue;
Ένας βρόχος for επαναλαμβάνεται σε κάθε σελίδα. Για κάθε σελίδα, χρησιμοποιούμε την GetPage() για να λάβουμε το αντικείμενο ApiPage και την GetAllAnnots() για να ανακτήσουμε όλους τους σχολιασμούς σε αυτήν τη σελίδα. Αν μια σελίδα δεν έχει σχολιασμούς, την παραλείπουμε και συνεχίζουμε.
Ταύτιση και διαγραφή σχολιασμών
for (let j = annots.length - 1; j >= 0; j--) {
const annot = annots[j];
const contents = (annot.GetContents() || "").toLowerCase();
Μέσα σε κάθε σελίδα, επαναλαμβανόμαστε στους σχολιασμούς με αντίστροφη σειρά. Η επανάληψη προς τα πίσω είναι σημαντική επειδή η διαγραφή στοιχείων από έναν πίνακα ενώ κινούμαστε προς τα εμπρός μπορεί να προκαλέσει μετατοπίσεις δεικτών και παράλειψη στοιχείων. Για κάθε σχολιασμό, εξάγουμε το κείμενό του χρησιμοποιώντας την GetContents() και το μετατρέπουμε σε πεζούς χαρακτήρες για σύγκριση χωρίς διάκριση πεζών/κεφαλαίων.
if (contents.includes(KEYWORD.toLowerCase())) {
annot.Delete();
deletedCount++;
}
Αν το κείμενο του σχολιασμού περιλαμβάνει τη λέξη-κλειδί-στόχο, καλούμε την Delete() για να την αφαιρέσουμε από το έγγραφο και αυξάνουμε τον μετρητή.
console.log("Deleted annotations containing keyword:", KEYWORD);
console.log("Total deleted:", deletedCount);
Στο τέλος, η μακροεντολή καταγράφει στην κονσόλα τη λέξη-κλειδί που αναζητήθηκε και τον συνολικό αριθμό των διαγεγραμμένων σχολιασμών.
Ο πλήρης κώδικας της μακροεντολής:
(function () {
const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;
for (let i = 0; i < pagesCount; i++) {
const page = doc.GetPage(i);
const annots = page.GetAllAnnots();
if (!annots || annots.length === 0) continue;
for (let j = annots.length - 1; j >= 0; j--) {
const annot = annots[j];
const contents = (annot.GetContents() || "").toLowerCase();
if (contents.includes(KEYWORD.toLowerCase())) {
annot.Delete();
deletedCount++;
}
}
}
console.log("Deleted annotations containing keyword:", KEYWORD);
console.log("Total deleted:", deletedCount);
})();
Μόλις εκτελεστεί η μακροεντολή, κάθε σχολιασμός που περιέχει την καθορισμένη λέξη-κλειδί αφαιρείται από το έγγραφο. Για να στοχεύσετε μια διαφορετική λέξη, απλώς ενημερώστε τη μεταβλητή KEYWORD στην αρχή του κώδικα.

Παράδειγμα 2: Κατάργηση όλων των σχεδίων
Αυτή η μακροεντολή σαρώνει κάθε σελίδα και διαγράφει όλα τα αντικείμενα σχεδίασης — ή μόνο έναν συγκεκριμένο τύπο. Χρησιμοποιεί την GetAllDrawings() για να ανακτήσει όλα τα οπτικά στοιχεία σε κάθε σελίδα, και την GetClassType() για να ελέγξει τον τύπο τους πριν τη διαγραφή.
Η μεταβλητή targetType στην κορυφή ελέγχει τι αφαιρείται. Ορίστε την σε “all” για να αφαιρέσετε τα πάντα, ή χρησιμοποιήστε “shape”, “image” ή “chart” για να στοχεύσετε έναν συγκεκριμένο τύπο σχεδίων.
(function () {
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let totalDeleted = 0;
const targetType = "all";
for (let i = 0; i < pagesCount; i++) {
const page = doc.GetPage(i);
const drawings = page.GetAllDrawings();
for (let j = 0; j < drawings.length; j++) {
if (targetType === "all" || drawings[j].GetClassType() === targetType) {
drawings[j].Delete();
totalDeleted++;
}
}
}
console.log("Deleted " + totalDeleted + " drawing(s) from " + pagesCount + " page(s).");
})();
Είτε προετοιμάζετε ένα έγγραφο για εκτύπωση, είτε αφαιρείτε ξεπερασμένα διαγράμματα, είτε αφαιρείτε εικόνες πριν από την αναδιανομή — αυτή η μακροεντολή το φροντίζει. Ρυθμίζοντας τη μεταβλητή targetType, μπορείτε να εναλλάσσεστε μεταξύ πλήρους και επιλεκτικής εκκαθάρισης χωρίς να τροποποιείτε οποιοδήποτε άλλο μέρος του κώδικα.

Παράδειγμα 3: Προσθήκη υδατογραφήματος σε κάθε σελίδα
Η τελευταία μας μακροεντολή δημιουργεί ένα προσαρμόσιμο σχήμα υδατογραφήματος και το τοποθετεί σε κάθε σελίδα του εγγράφου. Χρησιμοποιεί την SetPosition() για να τοποθετήσει το σχήμα σε ακριβείς συντεταγμένες στη σελίδα και την AddObject() για να το προσθέσει σε κάθε σελίδα.
Όλες οι βασικές ιδιότητες ορίζονται ως μεταβλητές στην κορυφή, καθιστώντας εύκολη την προσαρμογή του κειμένου υδατογραφήματος, των χρωμάτων, του μεγέθους γραμματοσειράς, της θέσης και της γωνίας περιστροφής.
(function () {
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
const watermarkText = "DRAFT";
const bgColor = Api.CreateRGBColor(200, 200, 200);
const textColor = Api.CreateRGBColor(255, 255, 255);
const fontSize = 72;
const positionX = 1200000;
const positionY = 4000000;
const rotation = -45;
for (let i = 0; i < pagesCount; i++) {
const page = doc.GetPage(i);
const fill = Api.CreateSolidFill(bgColor);
const stroke = Api.CreateStroke(0, Api.CreateNoFill());
const watermark = Api.CreateShape("rect", 160 * 36000, 20 * 36000, fill, stroke);
watermark.SetPosition(positionX, positionY);
watermark.SetRotation(rotation);
const content = watermark.GetContent();
const para = content.GetElement(0);
para.SetJc("center");
const run = para.AddText(watermarkText);
run.SetFontSize(fontSize);
run.SetBold(true);
run.SetFill(Api.CreateSolidFill(textColor));
page.AddObject(watermark);
}
})();
Το υδατογράφημα δημιουργείται από ένα τυπικό σχήμα με περιεχόμενο κειμένου, δίνοντάς σας πλήρη έλεγχο της εμφάνισής του — από διακριτικές ετικέτες φόντου έως έντονες σφραγίδες πλήρους σελίδας. Μπορείτε επίσης να πειραματιστείτε με διαφορετικά μεγέθη σχημάτων, στυλ γραμματοσειράς ή γωνίες περιστροφής για να βρείτε την εμφάνιση που ταιριάζει καλύτερα στα έγγραφά σας.

Αυτές οι τρεις μακροεντολές είναι μόνο ένα σημείο εκκίνησης — το νέο PDF API ανοίγει πολλές περισσότερες δυνατότητες για αυτοματοποίηση των ροών εργασίας σας με PDF. Μπορείτε να συνδυάσετε αυτές τις μεθόδους για να δημιουργήσετε πιο προηγμένες μακροεντολές προσαρμοσμένες στις συγκεκριμένες ανάγκες σας. Εξερευνήστε την τεκμηρίωση API και τα δείγματα μακροεντολών που συνδέονται παρακάτω για περισσότερες ιδέες. Εάν έχετε οποιεσδήποτε ερωτήσεις ή θέλετε να μοιραστείτε αυτό που έχετε δημιουργήσει, μη διστάσετε να επικοινωνήσετε μαζί μας!
Δημιουργήστε τον δωρεάν λογαριασμό ONLYOFFICE σας
Online προβολή, επεξεργασία και συνεργασία σε έγγραφα, υπολογιστικά φύλλα, παρουσιάσεις, φόρμες και αρχεία PDF.

