Textwasserzeichen zu einem PDF hinzufügen
Bringen Sie bis zu drei Textzeilen auf die Seiten eines PDF auf, mit Kontrolle über Vorlage, Farbe und Deckkraft.
Fügen Sie einem PDF-Dokument ein Textwasserzeichen hinzu. Geben Sie bis zu drei
Textzeilen an und steuern Sie Vorlage, Farbe, Transparenz und Rand.
Standardmäßig wird das Wasserzeichen auf jeder Seite aufgebracht. Verwenden Sie
den Parameter pages, um eine Teilmenge anzusprechen. Die
API ist stateless: Ihr Dokument wird in der Region verarbeitet und
niemals gespeichert.
Endpoint
/v1/add_text_watermarkIn allen Regionen verfügbar. Hinweise zu Routing und Datenresidenz finden Sie unter Regionen und Datenresidenz.
| Region | URL |
|---|---|
| Global | https://api.pdfblocks.com/v1/add_text_watermark |
| USA | https://us.api.pdfblocks.com/v1/add_text_watermark |
| HIPAA USA | https://hipaa.api.pdfblocks.com/v1/add_text_watermark |
| Europäische Union | https://eu.api.pdfblocks.com/v1/add_text_watermark |
| Vereinigtes Königreich | https://uk.api.pdfblocks.com/v1/add_text_watermark |
| Kanada | https://ca.api.pdfblocks.com/v1/add_text_watermark |
| Australien | https://au.api.pdfblocks.com/v1/add_text_watermark |
| Japan | https://jp.api.pdfblocks.com/v1/add_text_watermark |
| Indien | https://in.api.pdfblocks.com/v1/add_text_watermark |
| Brasilien | https://br.api.pdfblocks.com/v1/add_text_watermark |
Authentifizierung
Authentifizieren Sie jede Anfrage über HTTPS mit Ihrem geheimen API-Schlüssel
im Header X-API-Key. Schlüssel erstellen und verwalten Sie im
Dashboard. Einzelheiten finden Sie unter
Authentifizierung.
Anfrage
Der Endpoint akzeptiert einen Anfragetext im Format multipart/form-data.
filefilerequiredDas PDF-Eingabedokument.
line_1stringrequiredDie erste Zeile des Wasserzeichentexts. Maximal 32 Zeichen. Verwenden Sie lateinische Standardzeichen.
line_2stringDie zweite Zeile des Wasserzeichentexts. Maximal 32 Zeichen.
line_3stringDie dritte Zeile des Wasserzeichentexts. Maximal 32 Zeichen.
pagesstringDie Seiten, auf die das Wasserzeichen aufgebracht wird, geschrieben als
Seitenbereich wie 1..3,5. Wird der Parameter
weggelassen, wird das Wasserzeichen auf jede Seite angewendet. Maximal 1.000
Zeichen.
templateintegerdefault:1001Die Vorlage des Wasserzeichens, die den Stil (gefüllt oder Kontur) und die Ausrichtung festlegt.
colorstringdefault:GrayDie Farbe des Wasserzeichens. Eine von Red, Blue, Gray oder
Black.
transparencyintegerdefault:75Die Transparenzstufe, von 0 (vollständig deckend) bis 100 (vollständig
transparent).
margindecimaldefault:1.0Der Abstand in Zoll vom Seitenrand zum Wasserzeichen. 0 oder größer.
Wasserzeichenvorlagen
Jedes template kombiniert einen Stil (gefüllt oder Kontur) mit einer
Ausrichtung. Übergeben Sie die ID an den Parameter template.
| Vorlage | Stil | Ausrichtung |
|---|---|---|
1001 |
Gefüllt | Diagonal, von unten links nach oben rechts (Standard) |
1002 |
Gefüllt | Diagonal, von oben links nach unten rechts |
1003 |
Gefüllt | Horizontal |
1004 |
Gefüllt | Vertikal, von unten nach oben lesbar |
1005 |
Gefüllt | Vertikal, von oben nach unten lesbar |
1017 |
Kontur | Diagonal, von unten links nach oben rechts |
1018 |
Kontur | Diagonal, von oben links nach unten rechts |
1019 |
Kontur | Horizontal |
1020 |
Kontur | Vertikal, von unten nach oben lesbar |
1021 |
Kontur | Vertikal, von oben nach unten lesbar |
Im visuellen Vorlagenkatalog sehen Sie jede Vorlage auf einer Beispielseite gerendert.
Farben
| Wert | Farbmuster |
|---|---|
Red |
#C00000 |
Blue |
#005DFF |
Gray |
#545454 |
Black |
#000000 |
Seiten auswählen
Der Parameter pages nimmt eine durch Kommas getrennte Liste von Seitenzahlen
und Bereichen entgegen, beginnend bei 1. Er wird als Menge behandelt:
Reihenfolge und Duplikate werden ignoriert, und das Wasserzeichen wird immer in
der Reihenfolge des Dokuments aufgebracht.
| Muster | Wählt aus |
|---|---|
| (weglassen) | Jede Seite |
1 |
Nur die erste Seite |
1..3,5 |
Die Seiten 1, 2, 3 und 5 |
2.. |
Seite 2 bis zur letzten Seite |
..-2 |
Von der ersten bis zur vorletzten Seite |
-1 |
Die letzte Seite |
Siehe Seiten auswählen für die vollständige Referenz.
Beispiele
Bringen Sie ein zweizeiliges Wasserzeichen auf den Seiten 1–3 und 5 auf:
curl https://api.pdfblocks.com/v1/add_text_watermark \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F line_1='CONFIDENTIAL' \
-F line_2='ACME, Inc.' \
-F template=1001 \
-F color=Red \
-F pages='1..3,5' \
-o watermarked.pdf# pip install requests
import requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/add_text_watermark',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={
'line_1': 'CONFIDENTIAL',
'line_2': 'ACME, Inc.',
'template': 1001,
'color': 'Red',
'pages': '1..3,5',
},
)
response.raise_for_status()
with open('watermarked.pdf', 'wb') as output:
output.write(response.content)// Node.js 18+
import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('line_1', 'CONFIDENTIAL');
body.set('line_2', 'ACME, Inc.');
body.set('template', '1001');
body.set('color', 'Red');
body.set('pages', '1..3,5');
const response = await fetch('https://api.pdfblocks.com/v1/add_text_watermark', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('watermarked.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/add_text_watermark');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'line_1' => 'CONFIDENTIAL',
'line_2' => 'ACME, Inc.',
'template' => '1001',
'color' => 'Red',
'pages' => '1..3,5',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('watermarked.pdf', $pdf);
}# gem install http
require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/add_text_watermark', form: {
file: HTTP::FormData::File.new('input.pdf'),
line_1: 'CONFIDENTIAL',
line_2: 'ACME, Inc.',
template: '1001',
color: 'Red',
pages: '1..3,5',
})
File.write('watermarked.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("line_1", "CONFIDENTIAL")
form.WriteField("line_2", "ACME, Inc.")
form.WriteField("template", "1001")
form.WriteField("color", "Red")
form.WriteField("pages", "1..3,5")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/add_text_watermark", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("watermarked.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("CONFIDENTIAL"), "line_1" },
{ new StringContent("ACME, Inc."), "line_2" },
{ new StringContent("1001"), "template" },
{ new StringContent("Red"), "color" },
{ new StringContent("1..3,5"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/add_text_watermark", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"watermarked.pdf", await response.Content.ReadAsByteArrayAsync());Antwort
Bei Erfolg ist die Antwort 200 OK; der Antworttext ist das PDF mit dem
aufgebrachten Wasserzeichen:
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 48213Die Ausgabe behält Seitenzahl und Abmessungen der Eingabe bei: Nur das Wasserzeichen kommt hinzu. Schreiben Sie den Antworttext direkt in eine Datei, wie es die Beispiele oben tun; auf unserer Seite wird nichts gespeichert.
Fehler
Fehlgeschlagene Anfragen geben einen Antworttext vom Typ
application/problem+json zurück. Der häufigste Fehler bei diesem Endpoint ist
ein 400, der zurückgegeben wird, wenn ein Parameter ungültig ist oder file
kein lesbares PDF ist. Das Objekt errors nennt jedes Feld:
{
"type": "https://www.pdfblocks.com/docs/api/v1/error/400",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"line_1": ["The field line_1 must be a string with a maximum length of 32."]
}
}Ein fehlender oder ungültiger X-API-Key gibt einen 401 zurück. Alle
Statuscodes und die vollständige Form der Antwort finden Sie unter
Fehler.
Rezepte
Häufige Varianten. Klappen Sie eine auf, um sie in allen Sprachen zu sehen.
Ein kräftiges rotes DRAFT auf jeder Seite
curl https://api.pdfblocks.com/v1/add_text_watermark \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F line_1='DRAFT' \
-F color=Red \
-F template=1001 \
-F transparency=40 \
-o draft.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/add_text_watermark',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'line_1': 'DRAFT', 'color': 'Red', 'template': 1001, 'transparency': 40},
)
response.raise_for_status()
with open('draft.pdf', 'wb') as output:
output.write(response.content)import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('line_1', 'DRAFT');
body.set('color', 'Red');
body.set('template', '1001');
body.set('transparency', '40');
const response = await fetch('https://api.pdfblocks.com/v1/add_text_watermark', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('draft.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/add_text_watermark');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'line_1' => 'DRAFT',
'color' => 'Red',
'template' => '1001',
'transparency' => '40',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('draft.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/add_text_watermark', form: {
file: HTTP::FormData::File.new('input.pdf'),
line_1: 'DRAFT',
color: 'Red',
template: '1001',
transparency: '40',
})
File.write('draft.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("line_1", "DRAFT")
form.WriteField("color", "Red")
form.WriteField("template", "1001")
form.WriteField("transparency", "40")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/add_text_watermark", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("draft.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("DRAFT"), "line_1" },
{ new StringContent("Red"), "color" },
{ new StringContent("1001"), "template" },
{ new StringContent("40"), "transparency" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/add_text_watermark", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"draft.pdf", await response.Content.ReadAsByteArrayAsync());Ein CONFIDENTIAL in Kontur auf dem Deckblatt
curl https://api.pdfblocks.com/v1/add_text_watermark \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F line_1='CONFIDENTIAL' \
-F template=1017 \
-F pages='1' \
-o confidential.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/add_text_watermark',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={'line_1': 'CONFIDENTIAL', 'template': 1017, 'pages': '1'},
)
response.raise_for_status()
with open('confidential.pdf', 'wb') as output:
output.write(response.content)import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('line_1', 'CONFIDENTIAL');
body.set('template', '1017');
body.set('pages', '1');
const response = await fetch('https://api.pdfblocks.com/v1/add_text_watermark', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('confidential.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/add_text_watermark');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'line_1' => 'CONFIDENTIAL',
'template' => '1017',
'pages' => '1',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('confidential.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/add_text_watermark', form: {
file: HTTP::FormData::File.new('input.pdf'),
line_1: 'CONFIDENTIAL',
template: '1017',
pages: '1',
})
File.write('confidential.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("line_1", "CONFIDENTIAL")
form.WriteField("template", "1017")
form.WriteField("pages", "1")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/add_text_watermark", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("confidential.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("CONFIDENTIAL"), "line_1" },
{ new StringContent("1017"), "template" },
{ new StringContent("1"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/add_text_watermark", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"confidential.pdf", await response.Content.ReadAsByteArrayAsync());Ein dezenter grauer Hinweis auf jeder Seite außer der letzten
curl https://api.pdfblocks.com/v1/add_text_watermark \
-H 'X-API-Key: your_api_key' \
-F file=@input.pdf \
-F line_1='ACME, Inc.' \
-F line_2='Do not distribute' \
-F color=Gray \
-F transparency=88 \
-F pages='..-2' \
-o notice.pdfimport requests
with open('input.pdf', 'rb') as file:
response = requests.post(
'https://api.pdfblocks.com/v1/add_text_watermark',
headers={'X-API-Key': 'your_api_key'},
files={'file': file},
data={
'line_1': 'ACME, Inc.',
'line_2': 'Do not distribute',
'color': 'Gray',
'transparency': 88,
'pages': '..-2',
},
)
response.raise_for_status()
with open('notice.pdf', 'wb') as output:
output.write(response.content)import { readFile, writeFile } from 'node:fs/promises';
const body = new FormData();
body.set('file', new Blob([await readFile('input.pdf')]), 'input.pdf');
body.set('line_1', 'ACME, Inc.');
body.set('line_2', 'Do not distribute');
body.set('color', 'Gray');
body.set('transparency', '88');
body.set('pages', '..-2');
const response = await fetch('https://api.pdfblocks.com/v1/add_text_watermark', {
method: 'POST',
headers: { 'X-API-Key': 'your_api_key' },
body,
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('notice.pdf', Buffer.from(await response.arrayBuffer()));<?php
$ch = curl_init('https://api.pdfblocks.com/v1/add_text_watermark');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: your_api_key'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'line_1' => 'ACME, Inc.',
'line_2' => 'Do not distribute',
'color' => 'Gray',
'transparency' => '88',
'pages' => '..-2',
],
]);
$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
file_put_contents('notice.pdf', $pdf);
}require 'http'
response = HTTP
.headers('X-API-Key' => 'your_api_key')
.post('https://api.pdfblocks.com/v1/add_text_watermark', form: {
file: HTTP::FormData::File.new('input.pdf'),
line_1: 'ACME, Inc.',
line_2: 'Do not distribute',
color: 'Gray',
transparency: '88',
pages: '..-2',
})
File.write('notice.pdf', response.body) if response.status.success?package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
var buf bytes.Buffer
form := multipart.NewWriter(&buf)
file, _ := os.Open("input.pdf")
defer file.Close()
part, _ := form.CreateFormFile("file", "input.pdf")
io.Copy(part, file)
form.WriteField("line_1", "ACME, Inc.")
form.WriteField("line_2", "Do not distribute")
form.WriteField("color", "Gray")
form.WriteField("transparency", "88")
form.WriteField("pages", "..-2")
form.Close()
req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/add_text_watermark", &buf)
req.Header.Set("Content-Type", form.FormDataContentType())
req.Header.Set("X-API-Key", "your_api_key")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
out, _ := os.Create("notice.pdf")
defer out.Close()
io.Copy(out, res.Body)
}using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "your_api_key");
using var form = new MultipartFormDataContent
{
{ new ByteArrayContent(File.ReadAllBytes("input.pdf")), "file", "input.pdf" },
{ new StringContent("ACME, Inc."), "line_1" },
{ new StringContent("Do not distribute"), "line_2" },
{ new StringContent("Gray"), "color" },
{ new StringContent("88"), "transparency" },
{ new StringContent("..-2"), "pages" },
};
var response = await client.PostAsync(
"https://api.pdfblocks.com/v1/add_text_watermark", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
"notice.pdf", await response.Content.ReadAsByteArrayAsync());Verwandte Aktionen
Bringen Sie ein Logo oder Bild statt Text auf.
Verschlüsseln Sie das Dokument mit dem aufgebrachten Wasserzeichen.
Kombinieren Sie Dateien, bevor Sie das Wasserzeichen aufbringen.
Schränken Sie Drucken, Kopieren und Bearbeiten ein.