Manipulation de contenu PDF avec la nouvelle API de l’éditeur PDF ONLYOFFICE: trois exemples de macros illustrant les fonctionnalités offertes par cette APIONLYOFFICE est une suite logicielle de productivité. La suite comprend des applications pour le traitement de texte (Document Editor), les feuilles de calcul (Spreadsheet Editor), les présentations (Presentation Editor), la visualisation et l'édition de fichiers PDF (PDF Viewer and Editor), la création de formulaires et la visualisation de diagrammes. Elle prend en charge nativement les formats Office Open XML (.docx, .xlsx, .pptx, etc.).
ONLYOFFICE est disponible à la fois sous forme de service cloud et de logiciel auto-hébergé, avec des options de déploiement pour les serveurs Linux et Windows, ainsi que des clients de bureau pour Windows, macOS et Linux, et des applications mobiles pour iOS et Android. La suite s'intègre également à des plateformes telles que Nextcloud, ownCloud, Seafile et Confluence.
ONLYOFFICE a récemment publié une nouvelle API pour son éditeur PDF, qui permet désormais l’utilisation de macros dans les fichiers PDF. Cette API offre la possibilité d’interagir avec des documents PDF par programmation, automatisant ainsi des tâches qui nécessitaient auparavant une intervention manuelle. Cet article présente trois exemples de macros illustrant les fonctionnalités offertes par cette API.
Nouvelles méthodes de l’API PDF
La version 9.3 de l’API PDF introduit plusieurs méthodes permettant de manipuler le contenu des documents. Parmi les principales :
- GetPagesCount() — renvoie le nombre total de pages du document.
- GetPage(index) — récupère un objet de page spécifique.
- GetAllAnnots() — retourne un tableau de toutes les annotations d’une page.
- GetContents() — récupère le texte d’une annotation.
- GetAllDrawings() — renvoie tous les objets de dessin (formes, images, graphiques).
- SetPosition(x, y) — positionne un objet sur la page avec des coordonnées absolues.
- AddObject(object) — ajoute un objet de dessin à une page spécifique.
- Delete() — supprime un objet du document.
Ces méthodes font partie des classes ApiDocument, ApiPage, ApiBaseAnnotation et ApiDrawing et peuvent être combinées avec les méthodes existantes de l’API Office.
Exemple 1 : suppression d’annotations par mot-clé
Cette macro supprime toutes les annotations contenant un mot-clé spécifique. Elle parcourt toutes les pages du document, récupère les annotations et supprime celles correspondant au critère défini.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | (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);
})(); |
Une fois la macro exécutée, toutes les annotations contenant le mot-clé spécifié sont supprimées du document. Pour cibler un autre mot, il suffit de modifier la variable KEYWORD en haut du code.
Une autre macro permet de supprimer tous les objets graphiques d’un document, ou uniquement un type précis (forme, image ou graphique). La méthode GetAllDrawings() récupère tous les éléments visuels d’une page, et GetClassType() permet de vérifier leur type avant suppression.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | (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).");
})(); |
Cette macro permet d’automatiser la suppression de graphiques obsolètes avant redistribution ou impression.
Que vous prépariez un document pour l’impression, supprimiez des schémas obsolètes ou effaciez des images avant de le redistribuer, cette macro s’en charge. En modifiant la variable targetType, vous pouvez passer d’un nettoyage complet à un nettoyage sélectif sans avoir à modifier aucune autre partie du code.
La dernière macro montre comment ajouter un filigrane personnalisable sur toutes les pages d’un document. La position, la taille, la couleur et l’angle de rotation du filigrane sont entièrement paramétrables.
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | (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);
}
})(); |
Le filigrane est créé à partir d’une forme standard accompagnée d’un texte, ce qui vous permet de contrôler entièrement son apparence, qu’il s’agisse d’une discrète inscription en arrière-plan ou d’un tampon en gras occupant toute la page. Vous pouvez également tester différentes tailles de forme, styles de police ou angles de rotation afin de trouver le rendu qui convient le mieux à vos documents.
Liens utiles
Nouveautés d’ONLYOFFICE Docs 9.3
Exemples de macros PDF ONLYOFFICE
Premiers pas avec les macros
Débogage des macros
ONLYOFFICE sur GitHub
Vous avez lu gratuitement 169 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.