PDF‑Inhalte mit der neuen ONLYOFFICE PDF‑Editor‑API bearbeiten
ONLYOFFICE hat vor Kurzem eine neue PDF API eingeführt, die Makro‑Support für PDF‑Dokumente bringt. Mit diesen neuen Methoden können Sie PDF‑Dateien programmatisch bearbeiten und so Aufgaben automatisieren, die sonst manuell erledigt werden müssten. In diesem Blogbeitrag stellen wir drei praktische Makros vor, die zeigen, was mit der neuen API möglich ist.

Neue PDF‑API‑Methoden
Hier ist ein Überblick über die neuen Methoden, die in den drei Makro‑Beispielen verwendet werden:
- GetPagesCount() — gibt die Gesamtzahl der Seiten im PDF‑Dokument zurück.
- GetPage(index) — ruft ein bestimmtes Seitenobjekt anhand seines Indexes ab und liefert ein ApiPage‑Objekt.
- GetAllAnnots() — gibt ein Array aller Anmerkungsobjekte auf einer Seite zurück.
- GetContents() — liest den Textinhalt einer Anmerkung aus.
- GetAllDrawings() — gibt ein Array aller Zeichnungsobjekte (Formen, Diagramme, Bilder) zurück.
- SetPosition(x, y) — positioniert ein Zeichnungsobjekt über absolute Koordinaten direkt auf der Seite.
- AddObject(object) — fügt ein Zeichnungsobjekt (Form, Diagramm, Bild) zu einer bestimmten Seite hinzu.
- Delete() — entfernt das angegebene Objekt aus dem Dokument.
Diese Methoden gehören zu den Klassen ApiDocument, ApiPage, ApiBaseAnnotation, und ApiDrawing. Sie lassen sich mit den bestehenden Office‑API‑Methoden kombinieren, die Sie möglicherweise bereits kennen.
Beispiel 1: Anmerkungen anhand eines Schlüsselworts entfernen
In unserem ersten Makro werden alle Anmerkungen gefunden und gelöscht, die ein bestimmtes Schlüsselwort enthalten. Schauen wir uns den Ablauf Schritt für Schritt an.
Schlüsselwort und Dokument vorbereiten
const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;
Zuerst definieren wir das Ziel‑Schlüsselwort – jede Anmerkung, deren Inhalt dieses Wort enthält, wird entfernt. Dann holen wir das aktuelle Dokument ab und ermitteln mit GetPagesCount() die Gesamtzahl der Seiten. Die Variable deletedCount zählt, wie viele Anmerkungen gelöscht werden.
for (let i = 0; i < pagesCount; i++) {
const page = doc.GetPage(i);
const annots = page.GetAllAnnots();
if (!annots || annots.length === 0) continue;
Eine for‑Schleife iteriert über alle Seiten. Für jede Seite rufen wir mit GetPage() das ApiPage‑Objekt ab und mit GetAllAnnots() alle Anmerkungen auf dieser Seite. Hat eine Seite keine Anmerkungen, wird sie übersprungen.
Anmerkungen abgleichen und löschen
for (let j = annots.length - 1; j >= 0; j--) {
const annot = annots[j];
const contents = (annot.GetContents() || "").toLowerCase();
Innerhalb jeder Seite durchlaufen wir die Anmerkungen in umgekehrter Reihenfolge. Rückwärts zu iterieren ist wichtig, weil das Löschen von Einträgen in einer vorwärts laufenden Schleife zu verschobenen Indizes und ausgelassenen Elementen führen kann. Für jede Anmerkung lesen wir den Text über GetContents() aus und wandeln ihn für einen nicht‑groß/klein‑schreibungsabhängigen Vergleich in Kleinbuchstaben um.
if (contents.includes(KEYWORD.toLowerCase())) {
annot.Delete();
deletedCount++;
}
Enthält der Anmerkungstext das definierte Schlüsselwort, rufen wir Delete() auf, um die Anmerkung zu löschen, und erhöhen den Zähler.
console.log("Deleted annotations containing keyword:", KEYWORD);
console.log("Total deleted:", deletedCount);
Am Ende protokolliert das Makro in der Konsole, nach welchem Schlüsselwort gesucht wurde und wie viele Anmerkungen entfernt wurden.
Vollständiger Makro‑Code:
(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);
})();
Sobald das Makro ausgeführt wurde, werden alle Anmerkungen, die das definierte Schlüsselwort enthalten, aus dem Dokument entfernt. Um ein anderes Wort zu suchen, passen Sie einfach die KEYWORD‑Variable am Anfang des Codes an.

Beispiel 2: Alle Zeichnungen entfernen
Dieses Makro durchsucht jede Seite und löscht alle Zeichnungsobjekte – oder nur einen bestimmten Typ. Es verwendet GetAllDrawings(), um alle visuellen Elemente der Seite abzurufen, und GetClassType(), um ihren Typ vor dem Löschen zu prüfen.
Die Variable targetType am Anfang steuert, was entfernt wird. Setzen Sie sie auf “all”, um alle Objekte zu löschen, oder verwenden Sie “shape”, “image” oder “chart”, um nur einen bestimmten Zeichnungstyp zu entfernen.
(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).");
})();
Ob Sie ein Dokument für den Druck vorbereiten, veraltete Diagramme entfernen oder Bilder vor der Weitergabe ausblenden möchten – dieses Makro übernimmt die Bereinigung. Durch Anpassen der targetType‑Variable können Sie bequem zwischen kompletter und selektiver Säuberung wechseln, ohne den restlichen Code ändern zu müssen.

Beispiel 3: Wasserzeichen auf allen Seiten hinzufügen
In unserem letzten Makro wird eine anpassbare Wasserzeichen‑Form erstellt und auf jeder Seite des Dokuments platziert. Dabei kommt SetPosition() zum Einsatz, um die Form an exakten Koordinaten zu positionieren, und AddObject(), um sie jeder Seite hinzuzufügen.
Alle wichtigen Eigenschaften sind als Variablen am Anfang definiert, sodass sich Wasserzeichen‑Text, Farben, Schriftgröße, Position und Rotationswinkel leicht anpassen lassen.
(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);
}
})();
Das Wasserzeichen basiert auf einer Standardform mit Textinhalt, wodurch Sie das Erscheinungsbild flexibel steuern können – von dezenten Hintergrundhinweisen bis hin zu auffälligen Stempeln über die ganze Seite. Sie können zudem mit verschiedenen Formgrößen, Schriftstilen oder Rotationswinkeln experimentieren, bis das Layout zu Ihren Dokumenten passt.

Diese drei Makros sind nur ein Einstieg – die neue PDF‑API eröffnet viele weitere Möglichkeiten zur Automatisierung Ihrer PDF‑Workflows. Sie können die gezeigten Methoden kombinieren, um komplexere Makros zu erstellen, die genau auf Ihre Anforderungen zugeschnitten sind. Werfen Sie für weitere Beispiele einen Blick in die API‑Dokumentation und die verlinkten Makro‑Samples unten. Wenn Sie Fragen haben oder zeigen möchten, was Sie gebaut haben, melden Sie sich gerne bei uns!
Erstellen Sie Ihr kostenloses ONLYOFFICE-Konto
Öffnen und bearbeiten Sie gemeinsam Dokumente, Tabellen, Folien, Formulare und PDF-Dateien online.


