# `PdfZusammenfuegen`
[🔗](https://github.com/wsgtcyx/pdf_zusammenfuegen/blob/main/lib/pdf_zusammenfuegen.ex#L1)

Ein kleines Elixir-Wrapper-Paket zum lokalen Zusammenfuegen von PDF-Dateien.

Der Fokus liegt auf einem klaren Dateipfad-API fuer Automatisierungen,
Build-Pipelines und Backoffice-Workflows. Die Projekt-Homepage ist
<https://pdfzus.de/>.

# `error_reason`

```elixir
@type error_reason() ::
  {:invalid_input, String.t()}
  | {:missing_file, String.t()}
  | {:not_a_file, String.t()}
  | {:invalid_pdf, String.t()}
  | {:merge_failed, term()}
  | {:write_failed, String.t(), File.posix()}
```

Bekannte Fehlerformen fuer Validierung, Merge und Dateiausgabe.

# `validated_paths`

```elixir
@type validated_paths() :: [String.t()]
```

Eine normalisierte Liste absoluter PDF-Dateipfade.

# `format_error`

```elixir
@spec format_error(error_reason()) :: String.t()
```

Formatiert einen Rueckgabefehler als lesbare deutsche Meldung.

# `merge_files`

```elixir
@spec merge_files([String.t()], String.t(), keyword()) ::
  {:ok, String.t()} | {:error, error_reason()}
```

Fuegt mehrere PDF-Dateien zusammen und schreibt das Ergebnis auf die Platte.

Unterstuetzte Optionen:

  * `:mkdir_p?` - legt das Ausgabeverzeichnis an, falls es noch nicht existiert.
    Standardwert: `true`

# `merge_to_binary`

```elixir
@spec merge_to_binary(
  [String.t()],
  keyword()
) :: {:ok, binary()} | {:error, error_reason()}
```

Fuegt mehrere PDF-Dateien zusammen und gibt das Ergebnis als Binary zurueck.

Standardmaessig wird das Ergebnis lokal und ohne Uploads verarbeitet. Fuer
die Projektseite und den Browser-Workflow siehe <https://pdfzus.de/>.

# `validate_inputs`

```elixir
@spec validate_inputs([String.t()]) ::
  {:ok, validated_paths()} | {:error, error_reason()}
```

Validiert eine Liste von Eingabedateien.

Jede Datei muss existieren, eine regulaere Datei sein und mit dem PDF-Header
`%PDF-` beginnen.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
