# Die Signaturen aus einem PDF entfernen

Entfernen Sie die kryptografischen Signaturen und Zeitstempel aus einem PDF-Dokument.

Entfernen Sie die kryptografischen Signaturen und Zeitstempel aus einem
PDF-Dokument. Eine digitale Signatur versiegelt ein Dokument und bescheinigt,
wer es signiert hat und dass sich seither nichts geändert hat; jede weitere
Bearbeitung, etwa Zusammenführen, Aufbringen eines Wasserzeichens oder erneutes
Paginieren, würde dieses Siegel brechen und die Signatur ungültig machen.
Entfernen Sie zuerst die Signaturen und Zeitstempel, dann lässt sich ein
signiertes Dokument sauber erneut verarbeiten; der Seiteninhalt bleibt
unangetastet. Die API ist *stateless*: Ihr Dokument wird in der Region
verarbeitet und niemals gespeichert.

## Endpoint

<Endpoint method="POST" path="/v1/remove_signatures" />

In allen Regionen verfügbar. Hinweise zu Routing und Datenresidenz finden Sie
unter [Regionen und Datenresidenz](/docs/api/regions-and-data-residency).

| Region                 | URL                                                    |
| ---------------------- | ------------------------------------------------------ |
| Global                 | `https://api.pdfblocks.com/v1/remove_signatures`       |
| USA                    | `https://us.api.pdfblocks.com/v1/remove_signatures`    |
| HIPAA USA              | `https://hipaa.api.pdfblocks.com/v1/remove_signatures` |
| Europäische Union      | `https://eu.api.pdfblocks.com/v1/remove_signatures`    |
| Vereinigtes Königreich | `https://uk.api.pdfblocks.com/v1/remove_signatures`    |
| Kanada                 | `https://ca.api.pdfblocks.com/v1/remove_signatures`    |
| Australien             | `https://au.api.pdfblocks.com/v1/remove_signatures`    |
| Japan                  | `https://jp.api.pdfblocks.com/v1/remove_signatures`    |
| Indien                 | `https://in.api.pdfblocks.com/v1/remove_signatures`    |
| Brasilien              | `https://br.api.pdfblocks.com/v1/remove_signatures`    |

## Authentifizierung

Authentifizieren Sie jede Anfrage mit Ihrem geheimen API-Schlüssel im Header
`X-API-Key`, über HTTPS. Schlüssel erstellen und verwalten Sie im
[Dashboard](https://dashboard.pdfblocks.com). Einzelheiten finden Sie unter
[Authentifizierung](/docs/api/authentication).

## Anfrage

Der Endpoint nimmt einen Anfragetext vom Typ `multipart/form-data` entgegen.

<ParamField name="file" type="file" required>
  Das PDF-Eingabedokument.
</ParamField>

## Beispiele

Entfernen Sie die Signaturen und Zeitstempel aus einem signierten PDF:

<CodeGroup>

```bash title="cURL"
curl https://api.pdfblocks.com/v1/remove_signatures \
  -H 'X-API-Key: your_api_key' \
  -F file=@input.pdf \
  -o unsigned.pdf
```

```python title="Python"
# pip install requests
import requests

with open('input.pdf', 'rb') as file:
    response = requests.post(
        'https://api.pdfblocks.com/v1/remove_signatures',
        headers={'X-API-Key': 'your_api_key'},
        files={'file': file},
    )

response.raise_for_status()
with open('unsigned.pdf', 'wb') as output:
    output.write(response.content)
```

```javascript title="Node.js"
// 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');

const response = await fetch('https://api.pdfblocks.com/v1/remove_signatures', {
  method: 'POST',
  headers: { 'X-API-Key': 'your_api_key' },
  body,
});

if (!response.ok) throw new Error(`Request failed: ${response.status}`);
await writeFile('unsigned.pdf', Buffer.from(await response.arrayBuffer()));
```

```php title="PHP"
<?php
$ch = curl_init('https://api.pdfblocks.com/v1/remove_signatures');
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'),
    ],
]);

$pdf = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) {
    file_put_contents('unsigned.pdf', $pdf);
}
```

```ruby title="Ruby"
# gem install http
require 'http'

response = HTTP
  .headers('X-API-Key' => 'your_api_key')
  .post('https://api.pdfblocks.com/v1/remove_signatures', form: {
    file: HTTP::FormData::File.new('input.pdf'),
  })

File.write('unsigned.pdf', response.body) if response.status.success?
```

```go title="Go"
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.Close()

	req, _ := http.NewRequest("POST", "https://api.pdfblocks.com/v1/remove_signatures", &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("unsigned.pdf")
	defer out.Close()
	io.Copy(out, res.Body)
}
```

```csharp title="C#"
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" },
};

var response = await client.PostAsync(
    "https://api.pdfblocks.com/v1/remove_signatures", form);
response.EnsureSuccessStatusCode();
await File.WriteAllBytesAsync(
    "unsigned.pdf", await response.Content.ReadAsByteArrayAsync());
```

</CodeGroup>

## Antwort

Bei Erfolg lautet die Antwort `200 OK` und enthält das PDF als Antworttext:

```http
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 48213
```

Die Ausgabe ist dasselbe Dokument, aus dem jede Signatur und jeder Zeitstempel
entfernt wurde: Seine Seiten und sein Inhalt sind unverändert. Schreiben Sie den
Antworttext direkt in eine Datei, wie die Beispiele oben es tun; bei uns wird
nichts gespeichert.

## Fehler

Fehlgeschlagene Anfragen liefern einen Antworttext vom Typ
`application/problem+json`. Am häufigsten ist bei diesem Endpoint der Status
`400`, der zurückgegeben wird, wenn `file` kein lesbares PDF ist. Das Objekt
`errors` nennt jedes betroffene Feld:

```json
{
  "type": "https://www.pdfblocks.com/docs/api/v1/error/400",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "file": ["Could not parse the PDF document. The file may be invalid or corrupt."]
  }
}
```

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](/docs/api/errors).

## Verwandte Aktionen

<CardGroup cols={2}>

<Card title="Einschränkungen entfernen" href="/docs/api/remove-restrictions-from-pdf">
  Berechtigungs-Flags zurücksetzen.
</Card>

<Card title="Passwort entfernen" href="/docs/api/remove-password-from-pdf">
  Ein passwortgeschütztes PDF entschlüsseln.
</Card>

<Card title="Passwort hinzufügen" href="/docs/api/add-password-to-pdf">
  Das Dokument mit einem Passwort verschlüsseln.
</Card>

<Card title="Einschränkungen hinzufügen" href="/docs/api/add-restrictions-to-pdf">
  Berechtigungs-Flags setzen.
</Card>

</CardGroup>
