# PDF Tool — ZUGFeRD E-Rechnungs-Konverter Spring Boot + Vaadin Flow Anwendung, die aus gespeicherten Rechnungstemplates **rechtskonforme ZUGFeRD-E-Rechnungen** erzeugt (PDF/A-3 mit eingebettetem EN16931-XML, Profil EN 16931 / Factur-X), das Ergebnis mit dem **Mustang-Validator** prüft und als **ZIP-Datei** bereitstellt. Verwendet wird [Mustangproject](https://www.mustangproject.org/) (Apache-2.0), die Open-Source-Referenzimplementierung von ZUGFeRD, inklusive des Mustang-Validators (XSD + EN16931-Schematron für das XML, veraPDF für die PDF/A-3-Konformität). > **Hinweis zur Rechtskonformität:** ZUGFeRD "signiert" nicht kryptografisch. Rechtskonform > im Sinne der deutschen B2B-E-Rechnungspflicht (§ 14 UStG, seit 01.01.2025) ist eine Rechnung > im strukturierten EN16931-Format — genau das erzeugt dieses Tool. Eine qualifizierte > elektronische Signatur ist seit 2011 nicht mehr erforderlich. ## Voraussetzungen - Java 21+ - Maven 3.9+ ## Starten ```bash mvn spring-boot:run ``` Die Weboberfläche ist dann unter erreichbar: Rechnungstemplate auswählen, Rechnungsdaten ausfüllen, "E-Rechnung erzeugen" klicken — das ZIP wird automatisch heruntergeladen. Produktions-Build: ```bash mvn clean package -Pproduction java -jar target/pdf-tool-1.0.0-SNAPSHOT.jar ``` ## PDF Service Die ZUGFeRD-Umwandlung (PDF/A-3 + EN16931-XML, Mustangproject) übernimmt das eigenständige Projekt **PDF Service** (`../PDF Service`, Port 8084). Dieses Tool rendert die Rechnung aus dem Template und ruft dann dessen REST-API (`POST /api/v1/invoices/sign`) auf — der Service muss dafür laufen. Die Basis-URL der API ist über `PDF_SERVICE_URL` konfigurierbar (Standard `http://localhost:8084/api/v1`). ## Architektur - [TemplatePdfService](src/main/java/de/assecutor/pdftool/template/TemplatePdfService.java) — rendert die Canvas-Templates (JSON aus MongoDB) über iText html2pdf zu einem PDF - [PdfServiceClient](src/main/java/de/assecutor/pdftool/pdfservice/PdfServiceClient.java) — ruft den PDF Service auf, der daraus die ZUGFeRD-E-Rechnung als ZIP erzeugt - [MainView](src/main/java/de/assecutor/pdftool/ui/MainView.java) — Vaadin-Weboberfläche - [InvoiceMetadata](src/main/java/de/assecutor/pdftool/invoice/InvoiceMetadata.java) — DTO für die Rechnungsdaten ## Tests ```bash mvn test ``` Die Tests decken das Template-Rendering ([TemplatePdfServiceTest](src/test/java/de/assecutor/pdftool/template/TemplatePdfServiceTest.java), [TemplateVariablesTest](src/test/java/de/assecutor/pdftool/template/TemplateVariablesTest.java)) und die USt-IdNr.-Validierung ab; die ZUGFeRD-Umwandlung wird im Projekt PDF Service getestet.