From 1d8ca0b908a1c27c6003368b72df7de1373c2130 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 9 Jun 2026 22:13:00 +0200 Subject: [PATCH] Initialer Commit --- .gitignore | 22 + README.md | 586 ++++++++++++++++++ config-example/queue/print-jobs.json | 1 + docs/DOCX4J_FO_VALIDIERUNG_v2.2.pdf | Bin 0 -> 63721 bytes docs/HTML_PDF_FEHLERBEHEBUNG_v2.3.pdf | 105 ++++ docs/LIEFERSCHEIN_DEMOS_v2.4.pdf | 74 +++ docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md | 540 ++++++++++++++++ .../PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf | Bin 0 -> 75950 bytes ...TSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf | Bin 0 -> 75950 bytes ...NTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md | 586 ++++++++++++++++++ ...TSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf | Bin 0 -> 59838 bytes examples/curl-print-authenticated.sh | 10 + .../rest-print-authenticated-request.http | 14 + pom.xml | 118 ++++ scripts/install-service.ps1 | 22 + scripts/start-console.bat | 6 + scripts/start-console.ps1 | 6 + scripts/uninstall-service.ps1 | 9 + service/printservice.xml | 16 + .../lieferschein_docx_rendered_example.docx | Bin 0 -> 38933 bytes .../lieferschein_docx_rendered_example.pdf | Bin 0 -> 43623 bytes .../examples/lieferschein_docx_template.docx | Bin 0 -> 37746 bytes .../examples/lieferschein_html_table.html.tpl | 58 ++ ...eferschein_html_table_rendered_example.pdf | 74 +++ .../examples/lieferschein_pdf_fields.json | 128 ++++ .../lieferschein_pdf_simple_fields.json | 128 ++++ ...eferschein_pdf_simple_rendered_example.pdf | 80 +++ .../lieferschein_pdf_simple_template.pdf | 74 +++ .../lieferschein_pdf_table_fields.json | 111 ++++ ...lieferschein_pdf_table_fields_newpage.json | 111 ++++ ...ieferschein_pdf_table_rendered_example.pdf | 85 +++ .../lieferschein_pdf_table_template.pdf | 74 +++ .../examples/lieferschein_pdf_template.pdf | 74 +++ .../rest-create-admin-user-request.json | 7 + .../rest-create-auth-user-request.json | 7 + ...te-docx-lieferschein-template-request.json | 46 ++ ...st-create-html-table-template-request.json | 10 + ...-simple-lieferschein-template-request.json | 169 +++++ .../rest-create-pdf-template-request.json | 136 ++++ ...est-create-pdf-template-table-request.json | 118 ++++ .../rest-create-raw-tcp-printer-request.json | 8 + ...reate-windows-spooler-printer-request.json | 6 + ...t-diagnostics-system-response-example.json | 12 + .../examples/rest-docx-converters.curl.txt | 1 + .../rest-list-queue-filter-user.curl.txt | 2 + .../rest-list-queue-full-admin.curl.txt | 2 + .../examples/rest-list-queue-own.curl.txt | 2 + .../rest-print-docx-lieferschein-request.json | 23 + .../rest-print-docx4j-fo-request.json | 16 + .../rest-print-html-table-request.json | 37 ++ ...print-pdf-simple-lieferschein-request.json | 21 + .../rest-print-pdf-template-request.json | 24 + ...rest-print-pdf-template-table-request.json | 52 ++ .../rest-print-raw-tcp-zpl-request.json | 12 + .../examples/rest-queue-response-example.json | 25 + .../examples/rest-reprint-request.json | 7 + .../resources/examples/rest-reprint.curl.txt | 4 + ...st-update-auth-config-enabled-request.json | 8 + ...st-validate-docx-lieferschein-request.json | 20 + .../rest-validate-docx4j-fo-request.json | 15 + .../examples/rest-validate-docx4j-fo.curl.txt | 4 + .../rest-validate-html-pdf-request.json | 20 + .../resources/examples/serial_label.zpl.tpl | 7 + .../serial_label_zpl_barcode_qr.zpl.tpl | 7 + .../examples/serienbegleitschein.docx | Bin 0 -> 1352 bytes .../examples/warenanhaenger.html.tpl | 12 + .../examples/warenanhaenger_pdf.html.tpl | 23 + src/main/resources/web/index.html | 399 ++++++++++++ 68 files changed, 4374 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config-example/queue/print-jobs.json create mode 100644 docs/DOCX4J_FO_VALIDIERUNG_v2.2.pdf create mode 100644 docs/HTML_PDF_FEHLERBEHEBUNG_v2.3.pdf create mode 100644 docs/LIEFERSCHEIN_DEMOS_v2.4.pdf create mode 100644 docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md create mode 100644 docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf create mode 100644 docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf create mode 100644 docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md create mode 100644 docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf create mode 100644 examples/curl-print-authenticated.sh create mode 100644 examples/rest-print-authenticated-request.http create mode 100644 pom.xml create mode 100644 scripts/install-service.ps1 create mode 100644 scripts/start-console.bat create mode 100644 scripts/start-console.ps1 create mode 100644 scripts/uninstall-service.ps1 create mode 100644 service/printservice.xml create mode 100644 src/main/resources/examples/lieferschein_docx_rendered_example.docx create mode 100644 src/main/resources/examples/lieferschein_docx_rendered_example.pdf create mode 100644 src/main/resources/examples/lieferschein_docx_template.docx create mode 100644 src/main/resources/examples/lieferschein_html_table.html.tpl create mode 100644 src/main/resources/examples/lieferschein_html_table_rendered_example.pdf create mode 100644 src/main/resources/examples/lieferschein_pdf_fields.json create mode 100644 src/main/resources/examples/lieferschein_pdf_simple_fields.json create mode 100644 src/main/resources/examples/lieferschein_pdf_simple_rendered_example.pdf create mode 100644 src/main/resources/examples/lieferschein_pdf_simple_template.pdf create mode 100644 src/main/resources/examples/lieferschein_pdf_table_fields.json create mode 100644 src/main/resources/examples/lieferschein_pdf_table_fields_newpage.json create mode 100644 src/main/resources/examples/lieferschein_pdf_table_rendered_example.pdf create mode 100644 src/main/resources/examples/lieferschein_pdf_table_template.pdf create mode 100644 src/main/resources/examples/lieferschein_pdf_template.pdf create mode 100644 src/main/resources/examples/rest-create-admin-user-request.json create mode 100644 src/main/resources/examples/rest-create-auth-user-request.json create mode 100644 src/main/resources/examples/rest-create-docx-lieferschein-template-request.json create mode 100644 src/main/resources/examples/rest-create-html-table-template-request.json create mode 100644 src/main/resources/examples/rest-create-pdf-simple-lieferschein-template-request.json create mode 100644 src/main/resources/examples/rest-create-pdf-template-request.json create mode 100644 src/main/resources/examples/rest-create-pdf-template-table-request.json create mode 100644 src/main/resources/examples/rest-create-raw-tcp-printer-request.json create mode 100644 src/main/resources/examples/rest-create-windows-spooler-printer-request.json create mode 100644 src/main/resources/examples/rest-diagnostics-system-response-example.json create mode 100644 src/main/resources/examples/rest-docx-converters.curl.txt create mode 100644 src/main/resources/examples/rest-list-queue-filter-user.curl.txt create mode 100644 src/main/resources/examples/rest-list-queue-full-admin.curl.txt create mode 100644 src/main/resources/examples/rest-list-queue-own.curl.txt create mode 100644 src/main/resources/examples/rest-print-docx-lieferschein-request.json create mode 100644 src/main/resources/examples/rest-print-docx4j-fo-request.json create mode 100644 src/main/resources/examples/rest-print-html-table-request.json create mode 100644 src/main/resources/examples/rest-print-pdf-simple-lieferschein-request.json create mode 100644 src/main/resources/examples/rest-print-pdf-template-request.json create mode 100644 src/main/resources/examples/rest-print-pdf-template-table-request.json create mode 100644 src/main/resources/examples/rest-print-raw-tcp-zpl-request.json create mode 100644 src/main/resources/examples/rest-queue-response-example.json create mode 100644 src/main/resources/examples/rest-reprint-request.json create mode 100644 src/main/resources/examples/rest-reprint.curl.txt create mode 100644 src/main/resources/examples/rest-update-auth-config-enabled-request.json create mode 100644 src/main/resources/examples/rest-validate-docx-lieferschein-request.json create mode 100644 src/main/resources/examples/rest-validate-docx4j-fo-request.json create mode 100644 src/main/resources/examples/rest-validate-docx4j-fo.curl.txt create mode 100644 src/main/resources/examples/rest-validate-html-pdf-request.json create mode 100644 src/main/resources/examples/serial_label.zpl.tpl create mode 100644 src/main/resources/examples/serial_label_zpl_barcode_qr.zpl.tpl create mode 100644 src/main/resources/examples/serienbegleitschein.docx create mode 100644 src/main/resources/examples/warenanhaenger.html.tpl create mode 100644 src/main/resources/examples/warenanhaenger_pdf.html.tpl create mode 100644 src/main/resources/web/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5a2467 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +target/ +*.class +*.log +*.tmp +.idea/ +.vscode/ +*.iml +.DS_Store +Thumbs.db + +# Runtime/config - use config-example/ for examples +printservice/ +logs/ +spool/ +preview/ +archive/ +printers.json +auth.json +templates/ + +# Windows service local install copy +service/*.exe diff --git a/README.md b/README.md new file mode 100644 index 0000000..80a9e58 --- /dev/null +++ b/README.md @@ -0,0 +1,586 @@ +# Printservice Standalone Java 25 v2.3 + +Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. + +## Funktionen + +- eigener HTTP-Server aus dem JDK +- Webfrontend unter `http://localhost:8080/` +- REST-API unter `http://localhost:8080/api` +- Drucker-Aliase für `WINDOWS_SPOOLER` und `RAW_TCP` +- Windows-/LocalSystem-Assistent für Dienstbetrieb +- HTML-Vorlagen mit Online-Editor +- HTML-Tabellen über `{{#each:items}} ... {{/each}}` +- HTML -> PDF -> Druck +- PDF als Vorlage mit Koordinatenfeldern (`PDF_TEMPLATE`) +- PDF-Tabellen aus JSON-Arrays +- ZPL/EPL/Text RAW-Druck +- DOCX-Vorlagen rendern und herunterladen +- DOCX -> PDF -> Druck optional über `DOCX4J_FO` ohne LibreOffice +- Barcode, QR-Code, DataMatrix und weitere ZXing-Formate +- optionale Authentifizierung: wenn deaktiviert, kann jeder per REST drucken +- Benutzer-/Tokenverwaltung im Webfrontend +- persistente Druckjob-Historie / Druckwarteschlange für Redruck +- Filterung der Druckhistorie nach User, Status, Drucker und Vorlage +- Admin-Vollansicht der Warteschlange mit `full=true` +- produktionsnahe Vorlagenstruktur unter `templates//...` + +## Zielplattform + +- Java 25 +- Maven 3.9 oder neuer empfohlen +- Windows, Linux oder macOS +- Windows-Dienstbetrieb über WinSW + +## Build + +```bash +mvn clean package +``` + +Ergebnis: + +```text +target/printservice-standalone.jar +``` + +## Start als Konsole + +Windows: + +```cmd +java -Dprintservice.config.dir=C:\printservice -jar target\printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Linux: + +```bash +java -Dprintservice.config.dir=/opt/printservice -jar target/printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Danach: + +```text +http://localhost:8080/ +http://localhost:8080/api/diagnostics/system +``` + +## Konfigurationsstruktur + +Empfohlen unter Windows: + +```text +C:\printservice +├── auth.json +├── printers.json +├── queue +│ └── print-jobs.json +├── templates +│ └── +│ ├── template.json +│ ├── document.* +│ ├── fields.json +│ ├── sample-data.json +│ └── print-request.json +├── spool +├── archive +├── preview +└── logs +``` + +Ohne `-Dprintservice.config.dir` nutzt die Anwendung: + +```text +%USERPROFILE%\.printservice +``` + +## Windows-Service mit WinSW + +```powershell +mvn clean package +.\scripts\install-service.ps1 -InstallDir C:\printservice-app -ConfigDir C:\printservice -Port 8080 +``` + +Danach `WinSW-x64.exe` als `C:\printservice-app\printservice.exe` ablegen und starten: + +```powershell +cd C:\printservice-app +.\printservice.exe install +.\printservice.exe start +.\printservice.exe status +``` + +## Authentifizierung + +Standardmäßig ist Auth deaktiviert. Dann kann jeder, der `/api/print` erreicht, drucken. Das ist für Tests praktisch, aber produktiv nur in geschlossenen Netzen sinnvoll. + +```json +{ + "enabled": false, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": false, + "headerName": "X-Printservice-Token", + "tokens": [] +} +``` + +### Empfohlener Ablauf im Webfrontend + +1. Webfrontend öffnen. +2. Bereich **Authentifizierung, Benutzer und Token**. +3. Erst einen Admin-User anlegen, Scope `ALL`. +4. Token kopieren und sicher speichern. +5. Danach Auth aktivieren. +6. Optional `protectAdmin` aktivieren. +7. Für Maschinen/Clients eigene User mit Scope `PRINT` anlegen. + +Token werden serverseitig nur als SHA-256-Hash gespeichert. Das Klartext-Token wird nur einmal bei der Erstellung zurückgegeben. + +### REST: Benutzer/Token anlegen + +```bash +curl -X POST http://localhost:8080/api/auth/users \ + -H "Content-Type: application/json" \ + -d @src/main/resources/examples/rest-create-auth-user-request.json +``` + +Beispiel: + +```json +{ + "userName": "line01", + "displayName": "Linie 01", + "tokenName": "line01-print-token", + "enabled": true, + "scopes": ["PRINT", "PREVIEW"] +} +``` + +Antwort enthält das Token einmalig: + +```json +{ + "userName": "line01", + "tokenName": "line01-print-token", + "token": "NUR_EINMAL_SICHTBAR" +} +``` + +### REST: Auth einschalten + +```bash +curl -X PUT http://localhost:8080/api/auth/config \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-auth-config-enabled-request.json +``` + +### REST: Drucken mit Token + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-print-raw-tcp-zpl-request.json +``` + +Alternativ: + +```text +Authorization: Bearer YOUR_PRINT_TOKEN +``` + +## Druckwarteschlange / Druckhistorie / Redruck + +Jeder echte Druckjob wird unter `queue/print-jobs.json` gespeichert. Gespeichert werden u. a. Job-ID, Benutzer, Drucker, Vorlage, Render-Modus, Status und der Original-PrintRequest. Dadurch kann der Job später erneut gedruckt werden. + +### Eigene Jobs abrufen + +```bash +curl "http://localhost:8080/api/queue?limit=100" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +Wenn Auth aktiv ist, sieht ein normaler Benutzer nur seine eigenen Jobs. + +### Vollständige Liste abrufen + +```bash +curl "http://localhost:8080/api/queue?full=true&limit=500" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +`full=true` benötigt Scope `ADMIN` oder `ALL`. + +### Nach User/Status/Vorlage filtern + +```bash +curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +### Einzelnen Job abrufen + +```bash +curl http://localhost:8080/api/queue/JOB_ID \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +### Redruck + +```bash +curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-reprint-request.json +``` + +Beispiel: + +```json +{ + "copies": 1, + "printerAlias": "LABEL_LINE_01", + "dataOverride": { + "reprintReason": "Etikett beschädigt" + } +} +``` + +Ohne `printerAlias` und ohne `dataOverride` wird der Originaljob unverändert erneut gesendet. + +## Druckerarten + +### WINDOWS_SPOOLER + +Für PDF, HTML->PDF, PDF_TEMPLATE und normale Office-/A4-Drucker. + +```json +{ + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "description": "A4 Drucker über Windows Spooler" +} +``` + +### RAW_TCP + +Für schnelle Etikettendrucker mit ZPL/EPL/ESC-POS/PCL. + +```json +{ + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "description": "Zebra Etikettendrucker direkt per TCP" +} +``` + +## REST-Endpunkte + +```text +GET /api/diagnostics/system +GET /api/printers/diagnostics +GET /api/printers/scan +GET /api/printers +POST /api/printers +DELETE /api/printers/{alias} +GET /api/templates/storage +GET /api/templates +GET /api/templates/{name} +POST /api/templates +PUT /api/templates/{name} +DELETE /api/templates/{name} +GET /api/barcodes/formats +GET /api/auth/status +GET /api/auth/me +GET /api/auth/users +POST /api/auth/users +DELETE /api/auth/users/{idOrUserName} +GET /api/auth/config +PUT /api/auth/config +POST /api/auth/reload +POST /api/print/preview +POST /api/print/preview/html +POST /api/print/rendered +POST /api/print +GET /api/docx/converters +POST /api/docx/validate +GET /api/queue +GET /api/queue/{jobId} +POST /api/queue/{jobId}/reprint +``` + +## Render-Modi + +| Modus | Bedeutung | +|---|---| +| `AUTO` | Modus wird anhand des Vorlagentyps ermittelt | +| `RAW` | Text/ZPL/EPL direkt ausgeben | +| `PDF` | HTML nach PDF rendern | +| `PDF_TEMPLATE` | PDF-Vorlage mit Koordinatenfeldern befüllen | +| `DOCX` | DOCX befüllen und als DOCX bereitstellen | + +## Barcode-Platzhalter in HTML/ZPL + +```html + + + +``` + +ZPL direkt: + +```zpl +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +``` + +## HTML-Tabelle + +```html + + + {{#each:items}} + + + + + + + + {{/each}} + +
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}
+``` + +## PDF_TEMPLATE-Tabelle + +```json +{ + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "columns": [ + { "title": "Pos.", "field": "pos", "width": 12, "align": "CENTER" }, + { "title": "Artikel", "field": "partNumber", "width": 29 }, + { "title": "Barcode", "type": "BARCODE", "barcodeType": "CODE_128", "field": "serialNumber", "width": 39 } + ] +} +``` + +## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO + +Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: + +```json +{ + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO" +} +``` + +Ablauf: + +```text +DOCX-Vorlage +-> Platzhalter/Barcode/QR im DOCX füllen +-> docx4j-export-fo wandelt DOCX nach XSL-FO +-> Apache FOP erzeugt PDF +-> PDFBox druckt das PDF +``` + +Vorteile: + +- keine LibreOffice-Installation notwendig +- läuft komplett in der Java-Anwendung +- gut für einfache DOCX-Vorlagen mit Text, einfachen Tabellen, Bildern und Kopf-/Fußzeilen +- geeignet als optionaler, serverinterner Konverter + +Grenzen: + +- Layouttreue ist nicht so hoch wie bei Word/LibreOffice +- komplexe Word-Layouts, Shapes, Textfelder, SmartArt, exakte Seitenumbrüche und komplizierte Tabellen müssen pro Vorlage geprüft werden +- für Produktionsdruck ist `PDF_TEMPLATE` oder `HTML -> PDF` weiterhin robuster und meist schneller + +### Konverterstatus abrufen + +```bash +curl http://localhost:8080/api/docx/converters +``` + +### DOCX4J_FO mit einer Vorlage validieren + +```bash +curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json +``` + +Beispielrequest: + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Die Validierung prüft technisch, ob DOCX -> PDF erfolgreich erzeugt werden kann. Die Layout-Qualität muss anschließend visuell anhand des erzeugten PDFs geprüft werden. + +### DOCX mit DOCX4J_FO drucken + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-print-docx4j-fo-request.json +``` + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in der Druckfreigabe validieren. Für feste Formulare bleibt `PDF_TEMPLATE`; für dynamische Tabellen bleibt `HTML -> PDF`; für Etiketten bleibt `RAW_TCP/ZPL` die erste Wahl. + +## Produktionsempfehlungen + +- `RAW_TCP` für ZPL/EPL-Etikettendrucker verwenden. +- `PDF_TEMPLATE` für feste A4-Formulare verwenden. +- `HTML -> PDF` für flexible Tabellenformulare verwenden. +- Authentifizierung mindestens für `/api/print` aktivieren. +- Admin-Funktionen nach Initialeinrichtung schützen. +- Für Maschinen/Stationen separate Tokens mit eigenem User verwenden. +- `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. + + +## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 + +Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: + +```text +Markup im Dokument vor dem Root-Element muss ordnungsgemäß formatiert sein. +``` + +Der Service führt deshalb vor dem Rendern aus: + +```text +HTML-Vorlage + JSON-Daten +→ Platzhalter und Tabellenblöcke rendern +→ BOM/ungültige Steuerzeichen entfernen +→ HTML-Fragmente bei Bedarf in ... einbetten +→ Browser-HTML mit jsoup zu XHTML normalisieren +→ openhtmltopdf → PDF +→ Druck oder Download +``` + +Zusätzlich gibt es einen Validierungsendpunkt: + +```http +POST /api/html/validate +``` + +Beispiel: + +```bash +curl -X POST http://localhost:8080/api/html/validate \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-html-pdf-request.json +``` + +Eine erfolgreiche Antwort enthält unter anderem: + +```json +{ + "ok": true, + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "message": "HTML was rendered and normalized to XHTML successfully. It can be passed to openhtmltopdf." +} +``` + +Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. + + +## v2.4: Lieferschein-Demos und HTML->PDF Fehlerbehebung + +### HTML->PDF Fehler "Markup im Dokument vor dem Root-Element" +Der HTML->PDF Pfad normalisiert HTML jetzt vor dem openhtmltopdf Renderer. Dadurch werden typische Ursachen abgefangen: UTF-8 BOM, HTML-Fragmente ohne Root-Element, nicht XML-konforme Tags wie `
`, `
` oder `` ohne schließenden Slash. + +Validierung vor dem Druck: + +```bash +curl -X POST http://localhost:8080/api/html/validate \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-html-pdf-request.json +``` + +### Einfache PDF-Lieferscheinvorlage + +```text +config-example/templates/lieferschein_pdf_simple/ +├── template.json +├── document.pdf +├── fields.json +├── sample-data.json +└── print-request.json +``` + +### DOCX-Lieferscheinvorlage + +```text +config-example/templates/lieferschein_docx/ +├── template.json +├── document.docx +├── sample-data.json +├── print-request.json +└── validate-request.json +``` + +Barcode-/QR-Platzhalter in DOCX müssen alleine in einem Absatz stehen: + +```text +{{barcode:CODE_128:serialNumber:360x90}} +{{qr:serialNumber}} +``` + +Für Druck ohne LibreOffice verwendet das Beispiel `docxConverter=DOCX4J_FO`. Jede DOCX-Vorlage sollte vor produktiver Nutzung validiert werden. diff --git a/config-example/queue/print-jobs.json b/config-example/queue/print-jobs.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/config-example/queue/print-jobs.json @@ -0,0 +1 @@ +[] diff --git a/docs/DOCX4J_FO_VALIDIERUNG_v2.2.pdf b/docs/DOCX4J_FO_VALIDIERUNG_v2.2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c946bbd1537f4c709df4defbeacbd675226f0fb8 GIT binary patch literal 63721 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

aftnNXmf0@ znyRHB?lYWBH+@)lAvSz^uiRrcs9MQh5BJ#~m(wT6(=O;uoirPsFxx0bR{2H(>iKEy z>-MhG9u5l+yPxNsUfk6*>Wv=KvjC}&!tg8QUNqdz2A91Gsma+M{A0}QWb9`7p0?@7 z1@GS6@N`e9$I$TfUY|`sATrgn6@r@>X_x$Pwek&hB95-u1|J$#du5zK?p`IzO_8LI zrZKV(G+FgaTt1bX2q}H}9%&+u{BSsxn;_|A`Cg4=mf|oWHs=xwEsm1JYyBkTIhEVP zZ>8MN@7i=x@W}v z8gmh(~@jMdxVJS8?)CPqOX_}*Bszm z+A?S;9HF4|hCLI<6o<8#Qw>P!jb=*Xf~gBWpi0|>E?R}mm3LGmA|;K3*PFxq>_e7Hoxd8 zKv60Tf5ULo2cvY1gIuDLx*`XKvmaH%-$qN^!xqnyv>((A(n^eIio;2a2w>k;Vq#mR zinu3SCL|+Vl^jSJGEFqBBu+gYqDYL`dx0dbj)^!Ff8p3s7=}oM=~||PafwL}Q4dT% zH(Zj7XBcxD7Ya@rLP#tq-7D&b+b*Iuydo%PSP}$-Wq}B&FwF6TfgmjfHIO}&{yM_FU^p0p+20~ATrOT zedt`zU+q6BKqG0L^%Ll*S|QB?~B7ms`Ac_EN5kP>lbFeZI zF#QEy0$R?@3E0aFa5Vo;{1GMpF6Hl*oY^<#RRue0LU;Q`i6L13f zGe+3~v?~J(8z%uf0L5fv;QR-}$@XvTCt&YinQVX}IRK3T#ERwLOk+02e+HQy&?wG7 zH1S_wfRlp*@R2_hCdWVR&c8qVC)j^w{@scH3fo`(`**1R^zWa)zh~56wX?DSCfy%K z^dH^#ca#2!!vdlQKtloNxqr3xuer&@4j7Kif5z3nZCL>Wjgf(o?e7duz<~QpIQ@4s z`mdS%R|EbonFTP(8JPiC?cXFWGXOMY-~bH2zYk~SWCR2o5M++OCc~c&{44Wc2>`D8 z4|ewN;rDlF{?7S3G=HBO{=FCqaCQH6;`~37q3r*W40W29wn6$shVlZ)P%Ly?PMb7@ zxRsTH@Uq$g-k|UOLjquGcdH(FcrzOqnO`S-m>ih9)-iQA*VpdT4cI@p&XVBomnzxc z%}YYo&D0hyYWb{QAie57OmYo=~3ui%H5aflbqD^k0BFz7C2 zZqiJWi;AVc&#pAEo=c0(UZ#Ic-6_xFr*~Sv6dlV-Z+1GHy%k<359ng~{MU)kgpcEv z02gBKH;`9%k<-5b7B7QNpch0*1`(1;kWd9Q+6rhU!kC0G+D*8V{LIJAi z{|E^MsG|P^Bov^Eei{jDu>m=QI&X~PX=DWxs?NDFW}(BYOcYhqw>fmJ?xJ}6eA%MR zH~-I9O3eR_;m*hg@Ol3wg#v(PPPYFbg|4?lt0^mQFmx{Hcw9Q{uQlUb;QR(bf`B0M zM~8!;2>an1w)kyAP|n(JddhC@`aX#w71Yg)rI^tn!+tDcPEfHz3VU!SjV@}|P!Ubt zCSL_=_0y)Z10H=a&28iHlXvsh6K8_c;<97G=KZ3n14u7023*4rA}vD~BYA4={Ya4G zma)A!39!nKd68Kq#J1km1Eu!dkG6%P8REYE9`4QxXYY9_>uuD)C*9v~@3++HBi^hV z2CzasKLX>jXk8LHddh5p!b!f)rJ?xvSw24mS881Ad2&x}wI6 zYn?tYjt}%8dATHBDXIt`Y_5FB){=_0!hYK8bMm;YCt|MLHCu<8*#>hEMIJ(c977wODhNQXNF%TwyDOv1t1!4x|8Sw7CaUBT*Z&zhyjLw3KI{S z6Ax$*2j_Mr0AV6RW+H~Z`KB|3{Y*f8BjP=T51J!@66h}vQI{)+65KOQU?_%2fpqj! z2tLOYB_KFQ4JBk}S}wsCX__G+FgV|k1-LLri3KTAD1RCw0c@@)ABF|ZD32x~av=Ab z0$f@ES)MK}@J5a=EduWwXbA#pE~P0|T5#C3BMXQtKlHe$!<2A@zq4af$K&?+mG;0y z#eNcq_Jt}p7w94K&e;u{WNlfuo7UOQe0!rxkcdemjU5J8uCB)qtDg+VusJ2 zMjhZ*479@509!4TEXNxyKu&TOY8x63RubY19C(n6+e5ldIRgLGN#Y5uiU5VQDnhT! zAt(6!3mm^!xP|AAu0l5~Y>4KD;TfX(p!d0d56c|rJ|!G2=eCD*8oIHhM?PFFIQ^;R ztTAC`koMqk$Lk2|cZQg^@2=c$OYnS*TwyK081g-!aU)x6@K?)Nei3B%^fjLJ)b{di3h}v7MCZpuVz#rdt;E%=XF{z}cVON& z)MJD>M$8DlRZl&`TEF-G5we-l0&ZEj|4U3dI=Gn6+`bSFC^h+erDw|(%~AQ+?I;V$L~Bc-D}l+mg1duZ})sjb$+Wo~q=c^4vht zAov7gHBPWlb{NANcCZ@72cb~Nh-T90Vosz51u!CZs%>pMc6q6R$PRff9D~{S-UF{^ z>e~vFy)({dCuYe4$k0Q4z+C-TQ1%#K+q1yceja|yQU&3{SFEu9(&uUkXF^~176eWI z1z}3|#TYB{sVNBVik#5YpO|l|%$#gU_ILM2nz3yD#2F$I4hqKBrN#YqLyEL$K!{Gc z{AkZDdWU6E_+bUgx;(mAR z{;DwSnM0ALLhAiCDr@C4nq(3jWs>zCyL~mU`lF;N!o;mig<-biEfq7o4^}Umez(=D zi7fVl00F0vJ34+4mhWF>F+(za*Qc7mc^-xMKeLZo?IlK>?04(mEUe)D&+PWO4 zFTGdKbdsalWU)4b1gjPOecaAlx?n!H? zrKYRa{_={<=VN2r9$IkJcg(AsavLucqKbxApTY5e$%#LP%lJgUK`*MKOonBY%P>+LeURhmq-(vxJ0|^GE^Kr`;fy!gq0Uc1hDoPW^Tt zzzC%jcyoDQ-c;4~NZw3x8nK*)1aB>7#N-LvyFtHg@e;g!#{gR-i5h}jI-u4|49md- zBk!ayDY6WS1=sCfr=@3RgX+|(Uzd+zL_gZ$w97Hd$5HDPx^qF5 z=$x56Qp=6+kiC9o5|4#>TgniBvD-6ZA2nj(dQ00C*};XKD^+uw3niq73A0`H zC5j~stw#LHdIzpyeJfX}kBCUO5@>0{Xt;-MgWsdHGvsS79B@28tA)k91DwMH2L;6o5YIBwLpQc+uPZNRS0(M% z+{{RI=tdVqt7E9FQI7(i8CLqQG5ok3>yFT)^&HOjSa>%b%Cmx67JqZ__X_J(9W$(q zccayv^wmzGMO8bw?B>q6iCQeL!|(K2W+dXP3rdl|ctvxXnTrS#WJ8l$KH?saR|_(_q%>nGk*3 z;%U`+L3oGY{nJDIHO88JCDg^9dsxQ1xJGfUbft8obh&iB)B~~Or|zB(3H=Q{6nz+d znT}FdiJSau-USC&)W6Yi&9+)RRa{kkRh(74Rihu2h6$BJ!f(Po!aKrcA#?C%M+5wz zrc;(Y*v!?09zP}-CM@en$OP^Vh?Y$_xC8hzSv>pp-VzXzRc+R4^mdD2vDv&FZV%Wu z*P6SvWwUrV-M;D2H3`4eJBqr0e_@Uq?6qTx+9c&As!Z@E<@I0O*4^26#f@L5{VBXm zz)c%w>l(|JWr4g>O?h3i8h%C^WEkJX2pF#`*KKG}1dU-~+@YO~Mf{B0TjApA=!E3Y|D%h`K zTf#CX3h|S5b?7VfdVR7c3bgRa@W>;4$4A+` z&xs!Pz5KxfcXe-hyI?(ac5R9*%(nFK^;b|+m}W`HRd0%=0 z&)U(k3~}@la%H(RPhaF*y998`84}^B+G&nb`lSaV={ZejaozQd&yBab#lv$>*Q-*i zRkpLGc4K!jw^@7#zP=uJB&6qoc%K(4{i)Ofy-IAKMyJWRvX{aDaQxb3K6kg{dV8Fp z*2rogPWvq*W*ow$09OJb9wvn8(v`1L3uZMs;r{dOrgQL2DXnd#y#|DrRJiI1fGZIo zvg}+v*gF2S4yKSk?by7l*IeDs>w(m)Mj^RJ)xGnJK9fS+CAW;5Do|JUuMcoS`M7%R zR6||TMjJm?_T~?|8*`oTG?icdB^dnMg|LIA2)mVrGQ)Uvm7hqRfWflnfE20-Z0K2h z?GkhkTd;XEr)Tv$f0G^0UZQ7Dq&pStwIoOLJ#Mj0ZFLbE=YiZxU9RZC;f7|(n}h1i=QZywB=ub9I_iz4FbQ86NT1TU4g9e1vf zdSDA&G9!OS-C=~@!x4@FE49T=A%c>=>ZWNO{RwzaCY>zPmDgMMUbnN;PW|KqF2tZ3 zQdT@!mG8Q5g!Oa*G9+q=xR840a3W~t@$(H1=|Hp{lfD~U*qthx=k+X>|Lr3PWXzk* zm#0(~RX(m)w#Ffl*jZqXWTew>GQCs^{3tC2@O z!$lDFkIW^!Ciq21#y$eu)H<7wvL(%rwzQrK-ze4(2G)%^>77cZ+UYzRU%qJNrr>U| ze{lKXx!pESt?42;GhaTlo*A#gLaScuX*LUW;kcR~ZEazf9tHFL04dHM_ zwxmIJP~PnGwmRigrj^Dk@%HQD37XNQI|4ggzxPCtn#XQet*Ek`_29*Bb-|RWR6WEBO@2wdT@6m+|J__NY`Gwfa z6VU(cQq_ZlJs>WfA+5}}Ef|D(V1m!*xD)4>7}_ibQfp;p z?E$w3IQ0DXZf6-g6+dT9CU?eH4=U+X`08Ab?oKMk3@C|Zc;eg47v>`JrtM~2km`fJ z9J6|-%fbI*fSKnChKs`6vmpiRAp3#gHeKc>Zxe-cr{BQ()So*o5sSC;gBK~kBc@BN zVuPARgP(*AQj(-3ra(T^y2rOA6aBb!;(O-UmdA0Vi)#gf%1>$~Y93YB$}2Rpk32Pa zj5ZTjq{d8$LL~h?q63x?a?R~9X}%iQ+h9~^^eU|u+wHJ}!LxFxEVsvX6S8Vd#~-(} z$4ptiw7t}dJF`helBTK8;>&cOudn2QGtAUdg;%R$}0L?A4Oh z;@{ib7hj%tTx^+j0zOIBU$C$G;OaIfckKKq~u(sD~ ze{UF?5PX{xdQ)oL20`Ehl|zfYmthggPyy$OODF%Kbg@-x+^I_X`G8&8jgPN{7-7Qw z);RQ2W2+yzV%IhAkd;cl1FZURu7285N=Q8qN3y5o=DS?<`!*S$LvHJ#@jfVFdk8uG zTGT*!Vc}fJC6GHFnERaE`;w{Qt+17bbh;6)_3Q^>U&Sr-wUPrc)7MuBNIzj#iX|j` zNm$ik6}7P={beYt2#ToGX7Gn8?+b3I-HBf?pX)7Qpd>0C^Ef*%r3HN zH8v;56BD!jlZPZCBHJoj;pNv0B_+4{xG}(8wC@rx^#&~U;rGAmfrCr}a5wbRjd9JH z!-h)aW52%3Dc4YL0RMEH7TR%oljk>2yGscG{j zNvawbw+HCVDfICxi~5{mpVdj}Zj=jsk(IYYJZFSuk1pE!OK$#m6K-K=V5|!0+tcPlf!7wpFWyfU)(^!pFmHi zZ707nQl{9K#rvxUl4&QbTJaNeI=CuO@IQCghZmG9kUMYXaK4iBH(%z?7DspSEuh{5 zZTxcFAz2HyDESf}oSmIOoC$uN8A}%wxHIm75v3Hoi^-p>Bj04_vo+0C32_G{%qr(R zFuG=#>oBK`(dQvlDilEO8C=ajDw4^&ddqj-f3cO(l;6Vcu3)H>1=LIw04=XHTF}=d zNFzhmO_fkFJ^K*?laxdX*)bNV&wB@hN!#J4*ebh?atyn5l)3-#{6LTCMl#) zd9B%{D|?l(^|Tv2o98>zqmyQVk0)k;yPHGs^wa@_@+zx2MXQoCMbjLx7z9@Vs@bDz zpH~D^W=tlAl_vxK!fDkUkCSQ(Rkv788F3)Qy)9jOdXKasx<$qsQm#aYlED@MtTLqd zo|2qhQn_CB2> zchL8Wmp)Uf3JZTH_l6b3{NOot5s2b`oCRB)iK#LU|GD3AxXq4NhyE%k&m5IMcX$nV zUFr+!n_kH?VyTH;oE)c0`b~cs#N;fPS1cu~&3C3j;D`{-$){~|1i`3APhmt*xtc*H z+-2p;$@qZ*uOD2MBJ6UCZ$^q0YHAjyi}~8JKK7oQ64t$1?6|#xkUmZtJ8SPl1Xe&h zZ6(*gp`d@=$tyMFm+PCn{#C8oAoONBdScOqV|iFh?W%D$yoc9#cJlw zyoCAIq(nOOnYr@Op_@Hj!vu-{2#&sj#n{G|Sr>_WNw7VZA^LncH~l#04&4&Q?iL%f zf3(8MN@F87yR~Muz88Uf+1B?b9Zn|PUpR0*yHFP(I$yQ{yic(H%jtZja&@8e)k}7= z^0LjN^RQ|g=ZyXxgvhn+4*o2}p@4J->g{_wTy;Nn0qR(YqR+~ZXES-2^V1F+GBCR} zquD%8G~j&?L}Qc+iMzNCUmD4UU%%gluu;}MS>!@BJ1xE42Sq8-@mnJ~k1sOmH<5PS zC-`gK?~{15y&az~c|G=5^5kElrY((8t6)LX#|C`acE+{xIG4^WX0T(cK{2*Yog?GR(E76BnkUfkn-LfZEf4iPkla7>P$GDU*ro?$K`y0w_S%10j2MZQ zF<$^=`i1oBAXjJQhnHsz4jaYo7^QI`Jzp5pG!gQ&rU_PpBO8Y1@;b_hBC|pD(x~-C zNc)L@Jw8rGL&F__He95o;hViZ98G6$WHBi?d(!sP#FY zmUx=jt_OU@gY=$k&=8Wve00`L*liA5JhLJ!FL*_!Q-6BGcxa`r5T1E^ z?3K*JCntrx!g(F;fA_&=+I!C!yZ>&1zWlbs<=pYS87ts{Gi1j;Bp(Ef3nuUES&A^N z2!58t$n{@!_*>;>pWI2|D!VDEW!(#>LGGm za$hvQxbXg zroV3a?&;Lh8A`L0&Jympos)6U_eIJ_q8TnE+j{x&;v;ERH7eWdl;i0_3Tfe;anp`F zjpm}r*$Al9u?A<`Y4BSl?o%$9%+XOYx2`YL>V!G*801~JEmr}^0fBZf91|p7PmJgs z&|^;LmROjbX+e@PvT9p(+T}2r)T8~84kDh^fhhs*HsKYQE+G;;nY>V7mD(f3A_>jH z@e!|e{z}Qi&f9#hT)9a3c`M0~P*Hif6J1pn^Yj+f^H*s~Qx(R0kfEMizL=ToMEHWi z!U6beScqyHhfrS3^~Gjo-cblInzAM|rTpWlB@Z)YV%9?COu=5-0=92kwNTgjfj?Lz z3-um~mAd%LGhk>>;Lk62CEKq+C=-e}l-H6jn0arTb(!0ifLtw&?f6C!OOiZ1a}qJl zS9UFs3B$807@lTILR}|L}Ul zrYkW_q&f+|P4na48{XIqGX!koGI!>;v;OhXN7}{}V$)QI$?uH}4;y=oE~2T9Y17#J zXdcHpV7U$K86ENEcnES-pV!Kx`(9nmZ#o+uJjU=u$w;9K5n@Qe>@F~xau&Qpx5rl+ar5?urI<&LwN%dzw8S>44AK-C%D zWWauW(2t8ZecrbojOde~$)W5Zzk1dhJTmdFFSsd1zbdbe@-*weoLGN8d~_X8;v_dt z!lm7?b$1Mm{O;Mjp!|9fTe6mw=#c^6@$26Qa6b*&MGS;DR(N|>(HHQ_U zpZm@09&5&Oj>W@<)%mOCqcGYihi(VOiwQW86(r_B}6?RciTQHqJ(m6 zLzQO7!L-<7h0fxw+1Nu}Q)jdDLJRA!j?8e6%id@@?YAf4i&%es3bd}+&Nvxa>NRnE z&7LEaEd#*P9Jw4JUETqMkjN`rE@4M2L+#Eh%>jtlEP4ATee49%_a3iauJ1LlK-dPB#==M3|EeJcWu1AGPnMvpTFR7Wtz}}w zzZBJjZ^M2l;7g@G{s2;?ZB!0F}<0SxleTiC-w%4 zfgaRDpVwL3hqvSP8HBs!?YEdH@FveR!&VyP>3oRDTEs8xzIcrZ#UK{{BfUAdX&t6- z#{19ZUssM~YUC!|dM^ZN%Et%dq6QjmJi`Lub*xpH-#I@&UJoaIu5uk)G*94QIB>A*Uwz$|Gt@ay%WJTTWio5kCpsuT zfiXVyaXPU;1i$WCTuj-7xT}3b<{^kP@sQUvEaE5&H}a=EJ4V1%cRuywgyh?r2ZgU* zo7&)Ww0XbGI)rE#)o*OMO-L2jf1fjBFBdjsi{+aLI5BMeIJ9wH3-!dG=tHK060&QZ{jnZ1g;I3vW= zTzmHml8Z>1lx%4bq^u4xiU3H@svZlUtVpKU*$OsE=d7vO+5($`2b(h73iB$Q zCUrs+1+_vKKa@)$$<;)}i8wc)Fss(wIYWO@cc8lbT>%^uyz-k}<)wb5W5&sE6w_Em3^|=f@URb5qK4e|3KsX%1-(X$dI@&ZM#5@F4sna}3}2Yh&~llU^#aipu5m1YWnjjRZ(e%1K^y zjkKgwqQyZI?U<@NngbPY?XJ7}to^kS8;fIhewT}qhBF-xP@Of4YVu2)YSl}N>W$9< zo#z&h)Rvhnjy}KZvB_HRs3l9mard-vQopiG}Koks2^<|gwq?}i{pr4hH%lkUZ`M0vwf~rmQ~))H8^e5+G-CY zN~|a|$U5k}AkBJG&7O+lxQ6(AI+T8gT!pJ&0CU_Q(BTeL0u{f>fYpu};p{OOyyQ9h zWW0zO@l55W_u5^o%$F|$Tv>P8Lw>{Z)3HYS4gb6SdDRxvFpzKiSz^$|yM{mK_&A(2 z^hTqb)IM6i-07iS4M*Gva#7(58qXLXO=T#Vi6EACH#yZ+u@Kl@<0wD6hO7rlEgAkI z#Qv4KE6*dt(w~ky=L-g!nfwRH;{ET|wBq=+>HLTD+Z5CVY^2ni(gB%}~ZAPJp>5L7H+ z!wOPG5D*nbks<;DVxcKb1r=#3D$*2C5I8D=aN~K~Ii7Lvd&l_hpKpwJkNntsX05r_ znpxR%uI#L5E-{rCE>7KDc{ySrtgpme;S=5X9eu9;g}24`(E^*Cm|crrcg~o}1ubwp zvitT>vvQiJq)Xx%^W3XfxTo}vX}K)(7~*VvmvM}^TCL13xIbmd-RV=yEmsKgd+zS2 zSaeRUS)tA5iOxHs(5};WYJ0J5p2Y*=k?^e8vIJ_Rw+$BtoSPVzd<~J)urM(%m9DeC zxe4;|)mZudGzGCrQF)->=}Z&%TY-KbyUVe&G{?-%_`dR_+vrcjjv`SF`$~VLmfo@z z;R`y6UpFj4%X4Bpk6A9UeX9qxKBkgO?;qW`PZ7hlTTi1OA9ek16nRS514FT1HQ*q_SiK_1dG}0i#lzI1c`lN$mXLb)m;h&Yo0n6#E@^eewClhZoDa zu`b1)tq`!|yd?Vgq|!%85p42t-#}e?Q^dFD#aDLbm>Kn1PClz!T3h>oOLAVpj`7!E zc9l7%1w$t#=t;Mu=XS;&jU$4rE$a*3pQ-g*v%zr1mW%D~!9|-OdERCaG1G7PYheHb zH{1z`aMBFN1|eIZBE~v7;xe}94R8!!VzkWfFPT!$`XA~%G zLUTH99w`*S+dLx;@5jiPfIHW#K(jKG1y$6^0uzgxq&-El;yCVy`Oa zJb{waj&{B!Fvv}TGpMCV4@jasCtjCW^GJ8?p`%ZO;Jf(gIEzF=hb#-SN!AQ1Gj3b? zK(MQaWHtL-`D9wo2S4>R#QBdFiSAuy!oU|Rm2Nk*XR2qI-eiY{A`KW!;z)4Umsn2lGkLBWba06N6xn<|B?iP2M>MyFcJs5E6pK2UgBL> zDyq*pk&@9>HlwK?y=}1j!6_^2kA%>nfOAnBvk!9}9M>g8B&J`!d=K4!Wj9GXpuM@@ zA}h|tKWWuy;3d{apwjbr{&CLB>+v)Cn$ODOJUaKKdUQ_f;6oKt(S@MSQQ>U(z(T_NqsnhF!FJn{^P9)7U8p*6-UylyF@TiU`EAxv^pR%*O-K3$IDv%TsE0R>hJRv|i^r+BG3ZHw3_Xr#faH3UVJE+ErjJl^A^* zI_R8e-XP>2YdnL*IAy!iEFwl59~t96c~(8`@2L_`B>0(~z$}#b(e}T|yAspGdR00! zRaq1XQ4W2>jkeCavT^5UM`FSf!1YR>tsLFtSqkR_|v+gu0rDScGd97Sl*1h3}l6K05n|rTL zG?#0Tl)tW8U*3|N@n&SW+`GhL!ntvRP3j>{3asiR!uaNJ=u1CkJ65J!Bq1diMNrL?s1IAJZL4cW!^ZsIe;uuv zTsh4e{CtCVq+jDm%8{@Evy`q>e~$kP|J{8vvFzZA4CJGaZ|#wg$7wZD3cHIZL%xnr zZ5qGXG`4lZccSS|`|P)GkACY7R<2O@*j{#TWKQYL#C+?IFLNIA+b3gQEpBCd1wb(? zZF6H2L&b@+qRZ+ahX$bz;Ctl*%bq8O4M(4>62xg`K6Yu`va7PUHNAFr(X9~|=k40K zL}z&nvk{08Z);`6KgzPv9CKM$X|K5_pkkLdy-@*WG`N*G_i3iR+^h#GjSGYp#bGZs z#{Se0)tY|vb4n}A>fSd;fzd^)`FMnTE*$D2(_p|nA7_EnuKLm1v%l4*^(l*fD9Clg zH5;`6%K)3Dr5Eb1s@m4=Tyn5*8>l{D+oO^TtJ6F7kM?^WE5q>Hgh)#sK*kV%O3}q3h1cknCG`B*L*{;otJM^ z%(PNGzsjktHEPIoxfGsqdUdAOP#v+PhE&Rdp34ad*$LG5KZ&w*Z~+i zE_hY#2r+fF1~>9IHFRgi;hy`02NL_l69*^Ym=`X&-!uW^Xk#NVbQ_AF62jX^!nYkYu}e}A#D=lj{lYBwg^v2QOk zj-1ms9HW{g|G2Z?~wV-Gm(JXEeYIg=4{LFOzm&mA|Td;;>=5d$SD4leMEE z#D}%I{G>`cqZM_@{lKRqR{jsG9-bZa%>xIES$N1QzvSHD?D5;@`WcGB6xHwitwzg> z3VmHR^{8QDT7BsG??1ow+A_D}{HMe3-pEw|#;|=i62LPKkiA{C(D>EumLXYj2Nm*y zr{4xGy*>JR;L6Tpt|9rV@L;|R|D2J~%%yFw^`ZIU331kOYcK9P$??!&_HhzzqB69_0aU_37gi~Wh1v7W^r>E7HC)APA z^dDsNs-g>Vv(JNKt(i4jv&U0Dt#7!e4_2>@b5n3W*WsODs0RCx=A!@dWedF61@0*5 zVqYpWkUxfggq&$PUjrK*sIA$(WRrB0YVg(V@a|BXnp@zPWl5=;;%DIrZnWa8g0T@B zYWkPv>ao`YUJK6`JZwCd(Smv_Ew*p8Gj+)FZBPIjUczrZ&8n zJ;oMiS58mMse5L|p6K1imMcnpY~)h{uIuG~YjYcZs^-`KNYylNApDpxcPe@&hOK7& z^1_%N6p?2uz9;HFz#1yq+L!KlFn7s*yw@$tqR4&CA@b)0Ue?8dJ6^alHHQw(1U>e4Gf zfpB$h;Nt`1LdX&FK|dm{Bi)mlnnJymmU>tg<0a}C7zh<<_JjK+;cWztW4Q=ho6 z8hMJ4{=9%p+xU~-G#hes^^W+T^rp(4LIOTNPB4E_lAG>dn*B_ZtT;hEzWIgKhgZ(# zugv58W(3AgL#4g3wM|CpIURdQT}@j^W31Rpgadm*klp;TsqaP{$)I-yuiMD>$}`Og z1vf2^l@DqX6xmBYw2t&d!YYll zEbp|EkOQCGW44Daa1U2kS{DjFd%YGIZ^r0lth#*NHG|qNLn#{+-@bC~`%Z+oV`}1? zchjI}!E?G=Tmvd6j`6ljYv;bMrVXv~x8@j;3D4)s6RfGWUxzQGu9%+VeWL3?cRqW6 zj&rz_jXd=Q8R%SIsS&i9J0a;EzGV=sPJZxW;m{}lLid-IyRH=!-`BPI^zl~E(fRQN z_c{DT+lx=Vx0bk+qo1EP^<;n|l|s>iuhvh4z_&-Q8H}>8ZxEijJ<2WVp07?GRXBre zba!8IzX1WL3cF|6*yZA9m>*W!Sv@++BRsyN0I0gS+j87Z(XJyyc?f#>I@^uIp)r&? zJ{&$G*}uj?!suQqqYG2(FUqBN$ez`E(>Sh6=HypUHy3a_l|eFoQ0WO-(q13MBuI%` zS1Q^_;oMPMV~0`h%}8`xqnpOkfkL@@gJHBu)y6eT)$i|5r5J9`R!w=JraXj>SKjZy zh%H^8?F}wdsWs_p*h_JWD{6gkRX9}yOZZSpUfqW*&TDg@Sc0t`SF~biEuJgVm&jG5 zA*uZn-+wL2u_AetI}`Jv^p@1cIm2EsV6tB0eKu9sC)_c+?6rDV z@JXIj^mVz%Msy#%(InBS*cUm?^>I`U(r!MWa^q^=MGfO_ZDk*HMe+*{{6=!rY3Oc3 z-gdwn?ewW+1&=6u3o9u@_IrFt_mzGp55JobH!M{f_SbNv!kSBm zRA1<73_3q>-@6UUwdqqQaC@woW)5|9lciBf0%~P*!URDx?jp|)q zLhZU_^b;HOI0ttZ;Q#8|#f>cbGO%BW?eY&9?38Cpx{WTYrw_(LY#t11pu=`$)felgEAGl8FNwZmsUS zF&h=jUh8yV1HAq2@|FC(>Mxh9v^)Cd#%d%fdRrp3Uv)@B^|y-%$Q8I@W13eY&CazM z+Pp%VkK--B9IiN-q6l-YJJWjX+#K`cezx?cwU5w!H&o8(Qo#H}?vvs|GR5cYHYidOcG z>*ZRVA8j^=Olyk4>%3?fd{^F&H?P#<{n(S%yP9r1dfM_m{6-;$qco!MWj1^WM!C>Mi@H9 z!|+=s26#BLqs4JWjP}9#>D#9LIh8Ft!v||XQ$@sk_JHoY&D}+plw8J>?U-|YN~dnm zGY6W_bZ6C{DH=SRvR5mqeQ`ZtFElA;Sz^16BvNaZ4vfK5EN3%wCR;+MFnG!3)AJ1A z8PL>c^6UC0mD%RZy*(7mZzn4!4-gkhUBUAYGVj#H-8n;n*4166OI(2y_j1)Q(ObVgAsJu%Heu^cr6ysD-B^Eh9Q1k#z(TxHR{dmc-A4?&}x*x}_s{U=zb!t#?;ds+{{f4rZ4QrxL61Sac z7Mi}^n~D>HA+>R7($ZB|`vz@IM(vPU0XveFYs-~)OkK?=JkxA;yzq4M*-jxZp6H(0 z5@XLlO^g<_t&3*Zxl{NLwE45JGpingrXC9TZ1`*}F>O<`%5kH#X5ev@$@^H6c3?< zk`c$Nbl#=feYoRufexHbv`^P?py(i&z_s@Lw$<72CM%(NOChGk!8HAYt?>QI0O<{l z4Be!Bl?;`)U`9GlPe+|o{>0U=wPRd^@CWS zf@$Uq8OEJyHZ|QeqSGr*-IvOrO?EI%%5Z2DrpMk;M^t1-n4S<>hgQ0UPQ*_T1X7eQF_QWW|p+q_;7%8xAkv7upN*|GM8D^@siL z|8Ha<^q;JrcfC&!}D)dWLOCS0$}`e z>;1na138MqME{Ns^mkMTj3yO?x&!_Y0v+T5QO^Q5Q2UO zZv6L%pnqUU;Qz-bKdC4G*E;{H@IT6bl4Jg2-v5~8KW6zmRp>8s1 zv9~ux69s<1e^R6nnK}P{Ayefb2=kW)0E|%>)E_`MWM3_94?7Mt46SQNu!@9>2x5+B zBs2(W;KRb{IcW1;z}h6DL?9wbeBfeTJKabG#x9HzgePd}gAm?KPfI^*gfSEZ=8Akn zbljoF3<8lPqUd8o;kG2WAw5KDVPG9*N}&qCbff_aW#HkAcaxg(-37ih!w><`h!koe z)n%G-aPIo%NK-!@6Ew&H&(sSrBe{UQo%mk9?huNvB^`wE<4Ndf8Wax=!y}A{EEvW? zn}QN!;AUoI3mYcb2`w;kMmw3%BoROdPghHtX&}(mpFl?7Eom6fPzm3KD2C&iKq|r7 zE);AJ5#e3Le2keytR2Xt*ufoby>+>GdZdXL)Dy!na@6940%Z@F1XwTgun49ZlI~HmfpSw4(^5l;Z9U0UgBa*48WSupj@&v zI5@z89^w$@0t`UIgYfR52F?fzl2MR0B$TD+=SB4O2D8b+Ae_6Mn1ki(gj4YhT7WN2 zKad}Q2Zwv=1_*!x8#6pw8yW^d`C9{pKp!199Le8Hj~ywXN_9OYK@nzbca}fY3g=`Q z78=G6cQp%^5ZD1cp)SLV&2Taj1H%|VBNWP=M>mvM2l(r_>L7tuNTYCgh|mWY&PQ^{ zC_Kwlh_Q;$^EPCl0--3P)PP|p@bJM?&3WNGk^>&b*YWbiG6jZkGT8zm;rP1<3aQ;GnFqQ$cbpkU%kq%})Aeun{){RXtV~~LsKq!`BX9>mxfK6P0R<2BSh%( zIW%tpk4g4)Bf&*D2pYmSbJS*gx>_)WHUtndg6-qM6&l&GMM2t@0j@-6XCl-eW#pkR z3&^nAQv+ITH5Bo!Iz4TkGFIqL@72f4!yeWg$rPPm7^3C&H2bTY;; z18k+P=3HN(DGTE$4kBPN;X&p!5W&sLlftJ^>})`?Ok7y=5LO_*H;bM^|(bd?TWEvtAn}OL>CLcm|^|3{1v3bBCx^*apKV9 z`bPrE{(AOE9Lv-Yj%VOmP%DzJ2|}BTwKu1L9QoFcC|`C6+%S-6K$GedBX|r8p}QA@ zj27wXgjuI9D8?NF3BD%;hFG*!m(O#OFqrW+*J$j=?&Ef8@jnL zZN)ye;0P2rERX|rwa3fe_eK+afILJnPTNe+*UQlzYtAy$}(F9Q2CZxHrC$y0U=J-A)&e~Xat3&O-F%(0vz}d9U#jt(w<@E0kSft z5nTuY{&43&V>h(azyJe@Go&cx->XH{Q@ZT#M;!2De0WBEq>$ z98z|JqVrjzXv@E>3wKEbLPa7SWL`GHpc>u!xDKkdOShK&# z5J;H=|3!w9ksp7N85_%3k$;xSB!6kc7>hy3eAl1!A&lXszqX4oHbwm^Lm9)7zt%+= zBe1{r4~3A?7=LL4g+!Xl)`@>=7mY>zr7jwak?}PDTu#PqmGK<^B9jpvf0dyyf31uD zW1poGo@}`+`Q7E)69I}IIE2syEkGmqCcdU{0URSlV*P|dI8R2o6z~u{jKK2Wm+({s z0sa-k_zS`W5}DuU{~pcoMShW?0$FGQfdKe{vUp7vy8J7u(N|Q2*@p>50NMIpw(?bk rxrs!wDCB3{C%d2p?iT!> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +6 0 obj +<< +/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +7 0 obj +<< +/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/PageMode /UseNone /Pages 10 0 R /Type /Catalog +>> +endobj +9 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260609194150+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260609194150+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +10 0 obj +<< +/Count 2 /Kids [ 6 0 R 7 0 R ] /Type /Pages +>> +endobj +11 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2299 +>> +stream +Gat=+CN%tI')h6*0lR^i[l*%R;6"*\\@-16B=G\Pk0je3=XX&Z$HY8ZUOc!8oKcl5qSXho"F(TUH!$+:Yr*:TKB+*'=%5:IXXMM,@)]!AM@WD%lO\nb4L2&`WA\iV-X/9cqE?.g?Egd/%W53/4U7)3"RUGDITkOjVWp'#bg.s$P(k]&9,c5iR0N\B`FiHMd0A]5GZg82HqZGMl-2+=d-mglXE^U7fjK@>*TC,?^*k0aVN>!ZR"p$PF/8MUh*+JRDTM'a<$dLf47@U4'ed<'9:/k,RNC9=0<"O@+bl^cc64-;n$8r9LtaCJ@(hIi=JP#SPFZ(#@,TMR%hPS!*U>$06)#:Goe7i/[4`o?X1lWP[Y1*hiBD?BmtWd;iN7nM$\olBl)%"\6&240"l4[N,Hnrt.VUb9ejo@okN^h#YK6JPfPLfRkW_k"2T;Fa<=]GJS>'psFP@*D+/9W0ZUkc%7_i'mW4-rR,A7C/,2F@::Jc3?\78)N+0ruVcl[/QNk6hWWHS>iX^JSJV^F0VOoWjZ6ceR^&p_'jU)^n4E8+*D?+AIqMVcUCp5WVlB&@.5%%,XuZtbJ&>q1i6(l>Pf+9h5J6gSG9#]0sEHm&g%M;.0i&&PcF;<@Oq@XTm>$P=Whn3,tL_@<3'tm6?;3HCIn)kqGdBV<=U9jIkp4#T4l+j/F6-6P@i@'G)E^K6/f6a^oX^"A*^Da:7iGB=?G'=!Xc%PJ,-ZIR/=CuaY8'Q_7Zb^<52[laEKRhDZ>&:&tWOsdZgHe"$qp9n(@l'huc?SisZ!FOJGi"QmWGjGP)I>"*;I\OfPYLH%6dV8qg+?[U)6N`n:Am1]A1n&n)==@t"iH)".WJ--$sCP6A5'?7n<6Nq7:^.+ZB9/7F!Tg*EKDDMOn9.p5>^^QVV(&W`T&0Ydj9u`9IhGONo&JbTkLGr?[;Yk_<(pHW))%aYkP*]dqkHJ?`UM"50Yq[>*O>Y'_Kn'/i%6uH\JnGQk\6PmoE`!VVf4H6D3T$ZX:-(fYmT2RGRH]0ZqcRDJAP+Kg.C7Tl::W?hU*/((*32"Vgi/H#))>)Wl9O^knS0[)VeXHU*HO?oi];>2*#!I6?9g>*d\G4?5]dJc(nm]YhIBjH8MnFtXhol#AE$VMtc3)?so%?7YMUOP'R#8%C*P%*C.mZm"W.<7BiC7H-!OpsdbUrHf49c^*Aeb%j!9,sr`O>S/@0'M+g*/!!D)Q>2dcGTY_+^K%jHCh8_P"/bS.c24uB(,s!6>jnc`iP,P#BaKVoND[nt[\AIF^CWNrn,Zm9V89#7U^AHD_WY>QcDUf]+fCg$54!4N?Y#Cr6IS$6>4@bVj:9+LbbLinH!UF[F*F?CO-GYf&Fb//L-nT2duLnM$0;:j+i.A#IsEU6E6"XE6jio.qek)8_ZQ2_T8-?4f3eFab7&HS.B>"[8RBbXoC+Ou!r#K8M"6hTeB#BiO^Zbt#MZ[a@&?qM\(J&O\>l!9L]-pR!9-@j9U-Ci!T^:t?hB#DDe$3HXdPRt"`idd73r?USUR8km#UL2_X+QD^Ogendstream +endobj +12 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 507 +>> +stream +GasbU_2ctu&;KY%MZ6dT$#u.e/2pD)5Ur_*#VNg#aWrT8S6^Ks!`-RpK\^\4!KE=7cMZQn4tFQLC4$d;n34nYXb'_#YFs;l7D?ZpI.f6mIlg^]8lfYh+Np(u1/9XIa_(p[B9n]_2aV[$/fo!%=K]YkHUtHl_,;D'mp2u0ZFH!)EfI?f%`s$&\#*h$j4q,GkEXDm`E3^1L7eYCSS$o?L@D$`SSjEGjFXL@+TI;r-0CaN)MUYbEM5AJ=1X(NO29$3"ituK57DrcLD(OuW$F&J6eK"ZnOdJXpXn`fI:+-[TuGJ^WEZOV8X.3aS&*YBL?.(X0RGQtbNdX@jELTUXHdoJ[a_\T\pDl"@V;&E.)jFmbEq'?aDs*#C`,-51u,Kc7qY1*"C'm;56iB4GD:+c18:ZCl1b!Vjb94L>faueoJh6(N>='\p;;PT)mgW&ml0!&hhF46dQ)irE)"C3k(@(@a5V+SWOqiZA.c.<&O4A>~>endstream +endobj +xref +0 13 +0000000000 65535 f +0000000061 00000 n +0000000122 00000 n +0000000229 00000 n +0000000341 00000 n +0000000424 00000 n +0000000529 00000 n +0000000734 00000 n +0000000939 00000 n +0000001008 00000 n +0000001288 00000 n +0000001354 00000 n +0000003745 00000 n +trailer +<< +/ID +[<5fc3771a4bb5cad6c6937da174857a27><5fc3771a4bb5cad6c6937da174857a27>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 9 0 R +/Root 8 0 R +/Size 13 +>> +startxref +4343 +%%EOF diff --git a/docs/LIEFERSCHEIN_DEMOS_v2.4.pdf b/docs/LIEFERSCHEIN_DEMOS_v2.4.pdf new file mode 100644 index 0000000..276604f --- /dev/null +++ b/docs/LIEFERSCHEIN_DEMOS_v2.4.pdf @@ -0,0 +1,74 @@ +%PDF-1.3 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194716+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194716+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Printservice Lieferschein-Demos v2.4) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 712 +>> +stream +Gat%`Df;+!&B0s8)kA$AkZCie*h7U2H.#h$45)$h!]OV%ifu.\@^o]^f_#>3)'B<[iLfBL9)C@O$lQpQY3`BNF45GWn.l<`!Y$(Mpcd_HFDrHAba.EVVso>E4=75-KiLPG[om:iW-<3HR9UO6SLWR@=7;[9LH(LMB4L?`0:eR,/;Q]5B]>._=IMRMR6n&V.BbnIcg%CEO[XSXgNHO:[c^-nDf@dhX)VL5O3+3L\Kr::%e\_2K?%G"R.l84#ihfZ+a7\->\f0tA8es62d$P;9lZP[1;cC2kU]gNf5l2)'6.LHo2>-?=%%R4rmDO&C~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000881 00000 n +0000000940 00000 n +trailer +<< +/ID +[<3a690545ba6eb066f85a2dabe118b139><3a690545ba6eb066f85a2dabe118b139>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1742 +%%EOF diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md new file mode 100644 index 0000000..98ef839 --- /dev/null +++ b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md @@ -0,0 +1,540 @@ +# Printservice Standalone Java 25 v2.3 + +Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. + +## Funktionen + +- eigener HTTP-Server aus dem JDK +- Webfrontend unter `http://localhost:8080/` +- REST-API unter `http://localhost:8080/api` +- Drucker-Aliase für `WINDOWS_SPOOLER` und `RAW_TCP` +- Windows-/LocalSystem-Assistent für Dienstbetrieb +- HTML-Vorlagen mit Online-Editor +- HTML-Tabellen über `{{#each:items}} ... {{/each}}` +- HTML -> PDF -> Druck +- PDF als Vorlage mit Koordinatenfeldern (`PDF_TEMPLATE`) +- PDF-Tabellen aus JSON-Arrays +- ZPL/EPL/Text RAW-Druck +- DOCX-Vorlagen rendern und herunterladen +- DOCX -> PDF -> Druck optional über `DOCX4J_FO` ohne LibreOffice +- Barcode, QR-Code, DataMatrix und weitere ZXing-Formate +- optionale Authentifizierung: wenn deaktiviert, kann jeder per REST drucken +- Benutzer-/Tokenverwaltung im Webfrontend +- persistente Druckjob-Historie / Druckwarteschlange für Redruck +- Filterung der Druckhistorie nach User, Status, Drucker und Vorlage +- Admin-Vollansicht der Warteschlange mit `full=true` +- produktionsnahe Vorlagenstruktur unter `templates//...` + +## Zielplattform + +- Java 25 +- Maven 3.9 oder neuer empfohlen +- Windows, Linux oder macOS +- Windows-Dienstbetrieb über WinSW + +## Build + +```bash +mvn clean package +``` + +Ergebnis: + +```text +target/printservice-standalone.jar +``` + +## Start als Konsole + +Windows: + +```cmd +java -Dprintservice.config.dir=C:\printservice -jar target\printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Linux: + +```bash +java -Dprintservice.config.dir=/opt/printservice -jar target/printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Danach: + +```text +http://localhost:8080/ +http://localhost:8080/api/diagnostics/system +``` + +## Konfigurationsstruktur + +Empfohlen unter Windows: + +```text +C:\printservice +├── auth.json +├── printers.json +├── queue +│ └── print-jobs.json +├── templates +│ └── +│ ├── template.json +│ ├── document.* +│ ├── fields.json +│ ├── sample-data.json +│ └── print-request.json +├── spool +├── archive +├── preview +└── logs +``` + +Ohne `-Dprintservice.config.dir` nutzt die Anwendung: + +```text +%USERPROFILE%\.printservice +``` + +## Windows-Service mit WinSW + +```powershell +mvn clean package +.\scripts\install-service.ps1 -InstallDir C:\printservice-app -ConfigDir C:\printservice -Port 8080 +``` + +Danach `WinSW-x64.exe` als `C:\printservice-app\printservice.exe` ablegen und starten: + +```powershell +cd C:\printservice-app +.\printservice.exe install +.\printservice.exe start +.\printservice.exe status +``` + +## Authentifizierung + +Standardmäßig ist Auth deaktiviert. Dann kann jeder, der `/api/print` erreicht, drucken. Das ist für Tests praktisch, aber produktiv nur in geschlossenen Netzen sinnvoll. + +```json +{ + "enabled": false, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": false, + "headerName": "X-Printservice-Token", + "tokens": [] +} +``` + +### Empfohlener Ablauf im Webfrontend + +1. Webfrontend öffnen. +2. Bereich **Authentifizierung, Benutzer und Token**. +3. Erst einen Admin-User anlegen, Scope `ALL`. +4. Token kopieren und sicher speichern. +5. Danach Auth aktivieren. +6. Optional `protectAdmin` aktivieren. +7. Für Maschinen/Clients eigene User mit Scope `PRINT` anlegen. + +Token werden serverseitig nur als SHA-256-Hash gespeichert. Das Klartext-Token wird nur einmal bei der Erstellung zurückgegeben. + +### REST: Benutzer/Token anlegen + +```bash +curl -X POST http://localhost:8080/api/auth/users \ + -H "Content-Type: application/json" \ + -d @src/main/resources/examples/rest-create-auth-user-request.json +``` + +Beispiel: + +```json +{ + "userName": "line01", + "displayName": "Linie 01", + "tokenName": "line01-print-token", + "enabled": true, + "scopes": ["PRINT", "PREVIEW"] +} +``` + +Antwort enthält das Token einmalig: + +```json +{ + "userName": "line01", + "tokenName": "line01-print-token", + "token": "NUR_EINMAL_SICHTBAR" +} +``` + +### REST: Auth einschalten + +```bash +curl -X PUT http://localhost:8080/api/auth/config \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-auth-config-enabled-request.json +``` + +### REST: Drucken mit Token + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-print-raw-tcp-zpl-request.json +``` + +Alternativ: + +```text +Authorization: Bearer YOUR_PRINT_TOKEN +``` + +## Druckwarteschlange / Druckhistorie / Redruck + +Jeder echte Druckjob wird unter `queue/print-jobs.json` gespeichert. Gespeichert werden u. a. Job-ID, Benutzer, Drucker, Vorlage, Render-Modus, Status und der Original-PrintRequest. Dadurch kann der Job später erneut gedruckt werden. + +### Eigene Jobs abrufen + +```bash +curl "http://localhost:8080/api/queue?limit=100" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +Wenn Auth aktiv ist, sieht ein normaler Benutzer nur seine eigenen Jobs. + +### Vollständige Liste abrufen + +```bash +curl "http://localhost:8080/api/queue?full=true&limit=500" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +`full=true` benötigt Scope `ADMIN` oder `ALL`. + +### Nach User/Status/Vorlage filtern + +```bash +curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +### Einzelnen Job abrufen + +```bash +curl http://localhost:8080/api/queue/JOB_ID \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +### Redruck + +```bash +curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-reprint-request.json +``` + +Beispiel: + +```json +{ + "copies": 1, + "printerAlias": "LABEL_LINE_01", + "dataOverride": { + "reprintReason": "Etikett beschädigt" + } +} +``` + +Ohne `printerAlias` und ohne `dataOverride` wird der Originaljob unverändert erneut gesendet. + +## Druckerarten + +### WINDOWS_SPOOLER + +Für PDF, HTML->PDF, PDF_TEMPLATE und normale Office-/A4-Drucker. + +```json +{ + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "description": "A4 Drucker über Windows Spooler" +} +``` + +### RAW_TCP + +Für schnelle Etikettendrucker mit ZPL/EPL/ESC-POS/PCL. + +```json +{ + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "description": "Zebra Etikettendrucker direkt per TCP" +} +``` + +## REST-Endpunkte + +```text +GET /api/diagnostics/system +GET /api/printers/diagnostics +GET /api/printers/scan +GET /api/printers +POST /api/printers +DELETE /api/printers/{alias} +GET /api/templates/storage +GET /api/templates +GET /api/templates/{name} +POST /api/templates +PUT /api/templates/{name} +DELETE /api/templates/{name} +GET /api/barcodes/formats +GET /api/auth/status +GET /api/auth/me +GET /api/auth/users +POST /api/auth/users +DELETE /api/auth/users/{idOrUserName} +GET /api/auth/config +PUT /api/auth/config +POST /api/auth/reload +POST /api/print/preview +POST /api/print/preview/html +POST /api/print/rendered +POST /api/print +GET /api/docx/converters +POST /api/docx/validate +GET /api/queue +GET /api/queue/{jobId} +POST /api/queue/{jobId}/reprint +``` + +## Render-Modi + +| Modus | Bedeutung | +|---|---| +| `AUTO` | Modus wird anhand des Vorlagentyps ermittelt | +| `RAW` | Text/ZPL/EPL direkt ausgeben | +| `PDF` | HTML nach PDF rendern | +| `PDF_TEMPLATE` | PDF-Vorlage mit Koordinatenfeldern befüllen | +| `DOCX` | DOCX befüllen und als DOCX bereitstellen | + +## Barcode-Platzhalter in HTML/ZPL + +```html + + + +``` + +ZPL direkt: + +```zpl +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +``` + +## HTML-Tabelle + +```html + + + {{#each:items}} + + + + + + + + {{/each}} + +
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}
+``` + +## PDF_TEMPLATE-Tabelle + +```json +{ + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "columns": [ + { "title": "Pos.", "field": "pos", "width": 12, "align": "CENTER" }, + { "title": "Artikel", "field": "partNumber", "width": 29 }, + { "title": "Barcode", "type": "BARCODE", "barcodeType": "CODE_128", "field": "serialNumber", "width": 39 } + ] +} +``` + +## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO + +Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: + +```json +{ + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO" +} +``` + +Ablauf: + +```text +DOCX-Vorlage +-> Platzhalter/Barcode/QR im DOCX füllen +-> docx4j-export-fo wandelt DOCX nach XSL-FO +-> Apache FOP erzeugt PDF +-> PDFBox druckt das PDF +``` + +Vorteile: + +- keine LibreOffice-Installation notwendig +- läuft komplett in der Java-Anwendung +- gut für einfache DOCX-Vorlagen mit Text, einfachen Tabellen, Bildern und Kopf-/Fußzeilen +- geeignet als optionaler, serverinterner Konverter + +Grenzen: + +- Layouttreue ist nicht so hoch wie bei Word/LibreOffice +- komplexe Word-Layouts, Shapes, Textfelder, SmartArt, exakte Seitenumbrüche und komplizierte Tabellen müssen pro Vorlage geprüft werden +- für Produktionsdruck ist `PDF_TEMPLATE` oder `HTML -> PDF` weiterhin robuster und meist schneller + +### Konverterstatus abrufen + +```bash +curl http://localhost:8080/api/docx/converters +``` + +### DOCX4J_FO mit einer Vorlage validieren + +```bash +curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json +``` + +Beispielrequest: + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Die Validierung prüft technisch, ob DOCX -> PDF erfolgreich erzeugt werden kann. Die Layout-Qualität muss anschließend visuell anhand des erzeugten PDFs geprüft werden. + +### DOCX mit DOCX4J_FO drucken + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-print-docx4j-fo-request.json +``` + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in der Druckfreigabe validieren. Für feste Formulare bleibt `PDF_TEMPLATE`; für dynamische Tabellen bleibt `HTML -> PDF`; für Etiketten bleibt `RAW_TCP/ZPL` die erste Wahl. + +## Produktionsempfehlungen + +- `RAW_TCP` für ZPL/EPL-Etikettendrucker verwenden. +- `PDF_TEMPLATE` für feste A4-Formulare verwenden. +- `HTML -> PDF` für flexible Tabellenformulare verwenden. +- Authentifizierung mindestens für `/api/print` aktivieren. +- Admin-Funktionen nach Initialeinrichtung schützen. +- Für Maschinen/Stationen separate Tokens mit eigenem User verwenden. +- `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. + + +## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 + +Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: + +```text +Markup im Dokument vor dem Root-Element muss ordnungsgemäß formatiert sein. +``` + +Der Service führt deshalb vor dem Rendern aus: + +```text +HTML-Vorlage + JSON-Daten +→ Platzhalter und Tabellenblöcke rendern +→ BOM/ungültige Steuerzeichen entfernen +→ HTML-Fragmente bei Bedarf in ... einbetten +→ Browser-HTML mit jsoup zu XHTML normalisieren +→ openhtmltopdf → PDF +→ Druck oder Download +``` + +Zusätzlich gibt es einen Validierungsendpunkt: + +```http +POST /api/html/validate +``` + +Beispiel: + +```bash +curl -X POST http://localhost:8080/api/html/validate \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-html-pdf-request.json +``` + +Eine erfolgreiche Antwort enthält unter anderem: + +```json +{ + "ok": true, + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "message": "HTML was rendered and normalized to XHTML successfully. It can be passed to openhtmltopdf." +} +``` + +Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eee42c8b6eb0c2c91562a3991cc16faf115dcb63 GIT binary patch literal 75950 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 Kz;H`zfBYY&sYt*8 literal 0 HcmV?d00001 diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eee42c8b6eb0c2c91562a3991cc16faf115dcb63 GIT binary patch literal 75950 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 Kz;H`zfBYY&sYt*8 literal 0 HcmV?d00001 diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md new file mode 100644 index 0000000..80a9e58 --- /dev/null +++ b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md @@ -0,0 +1,586 @@ +# Printservice Standalone Java 25 v2.3 + +Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. + +## Funktionen + +- eigener HTTP-Server aus dem JDK +- Webfrontend unter `http://localhost:8080/` +- REST-API unter `http://localhost:8080/api` +- Drucker-Aliase für `WINDOWS_SPOOLER` und `RAW_TCP` +- Windows-/LocalSystem-Assistent für Dienstbetrieb +- HTML-Vorlagen mit Online-Editor +- HTML-Tabellen über `{{#each:items}} ... {{/each}}` +- HTML -> PDF -> Druck +- PDF als Vorlage mit Koordinatenfeldern (`PDF_TEMPLATE`) +- PDF-Tabellen aus JSON-Arrays +- ZPL/EPL/Text RAW-Druck +- DOCX-Vorlagen rendern und herunterladen +- DOCX -> PDF -> Druck optional über `DOCX4J_FO` ohne LibreOffice +- Barcode, QR-Code, DataMatrix und weitere ZXing-Formate +- optionale Authentifizierung: wenn deaktiviert, kann jeder per REST drucken +- Benutzer-/Tokenverwaltung im Webfrontend +- persistente Druckjob-Historie / Druckwarteschlange für Redruck +- Filterung der Druckhistorie nach User, Status, Drucker und Vorlage +- Admin-Vollansicht der Warteschlange mit `full=true` +- produktionsnahe Vorlagenstruktur unter `templates//...` + +## Zielplattform + +- Java 25 +- Maven 3.9 oder neuer empfohlen +- Windows, Linux oder macOS +- Windows-Dienstbetrieb über WinSW + +## Build + +```bash +mvn clean package +``` + +Ergebnis: + +```text +target/printservice-standalone.jar +``` + +## Start als Konsole + +Windows: + +```cmd +java -Dprintservice.config.dir=C:\printservice -jar target\printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Linux: + +```bash +java -Dprintservice.config.dir=/opt/printservice -jar target/printservice-standalone.jar --host=0.0.0.0 --port=8080 +``` + +Danach: + +```text +http://localhost:8080/ +http://localhost:8080/api/diagnostics/system +``` + +## Konfigurationsstruktur + +Empfohlen unter Windows: + +```text +C:\printservice +├── auth.json +├── printers.json +├── queue +│ └── print-jobs.json +├── templates +│ └── +│ ├── template.json +│ ├── document.* +│ ├── fields.json +│ ├── sample-data.json +│ └── print-request.json +├── spool +├── archive +├── preview +└── logs +``` + +Ohne `-Dprintservice.config.dir` nutzt die Anwendung: + +```text +%USERPROFILE%\.printservice +``` + +## Windows-Service mit WinSW + +```powershell +mvn clean package +.\scripts\install-service.ps1 -InstallDir C:\printservice-app -ConfigDir C:\printservice -Port 8080 +``` + +Danach `WinSW-x64.exe` als `C:\printservice-app\printservice.exe` ablegen und starten: + +```powershell +cd C:\printservice-app +.\printservice.exe install +.\printservice.exe start +.\printservice.exe status +``` + +## Authentifizierung + +Standardmäßig ist Auth deaktiviert. Dann kann jeder, der `/api/print` erreicht, drucken. Das ist für Tests praktisch, aber produktiv nur in geschlossenen Netzen sinnvoll. + +```json +{ + "enabled": false, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": false, + "headerName": "X-Printservice-Token", + "tokens": [] +} +``` + +### Empfohlener Ablauf im Webfrontend + +1. Webfrontend öffnen. +2. Bereich **Authentifizierung, Benutzer und Token**. +3. Erst einen Admin-User anlegen, Scope `ALL`. +4. Token kopieren und sicher speichern. +5. Danach Auth aktivieren. +6. Optional `protectAdmin` aktivieren. +7. Für Maschinen/Clients eigene User mit Scope `PRINT` anlegen. + +Token werden serverseitig nur als SHA-256-Hash gespeichert. Das Klartext-Token wird nur einmal bei der Erstellung zurückgegeben. + +### REST: Benutzer/Token anlegen + +```bash +curl -X POST http://localhost:8080/api/auth/users \ + -H "Content-Type: application/json" \ + -d @src/main/resources/examples/rest-create-auth-user-request.json +``` + +Beispiel: + +```json +{ + "userName": "line01", + "displayName": "Linie 01", + "tokenName": "line01-print-token", + "enabled": true, + "scopes": ["PRINT", "PREVIEW"] +} +``` + +Antwort enthält das Token einmalig: + +```json +{ + "userName": "line01", + "tokenName": "line01-print-token", + "token": "NUR_EINMAL_SICHTBAR" +} +``` + +### REST: Auth einschalten + +```bash +curl -X PUT http://localhost:8080/api/auth/config \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-auth-config-enabled-request.json +``` + +### REST: Drucken mit Token + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-print-raw-tcp-zpl-request.json +``` + +Alternativ: + +```text +Authorization: Bearer YOUR_PRINT_TOKEN +``` + +## Druckwarteschlange / Druckhistorie / Redruck + +Jeder echte Druckjob wird unter `queue/print-jobs.json` gespeichert. Gespeichert werden u. a. Job-ID, Benutzer, Drucker, Vorlage, Render-Modus, Status und der Original-PrintRequest. Dadurch kann der Job später erneut gedruckt werden. + +### Eigene Jobs abrufen + +```bash +curl "http://localhost:8080/api/queue?limit=100" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +Wenn Auth aktiv ist, sieht ein normaler Benutzer nur seine eigenen Jobs. + +### Vollständige Liste abrufen + +```bash +curl "http://localhost:8080/api/queue?full=true&limit=500" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +`full=true` benötigt Scope `ADMIN` oder `ALL`. + +### Nach User/Status/Vorlage filtern + +```bash +curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +### Einzelnen Job abrufen + +```bash +curl http://localhost:8080/api/queue/JOB_ID \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" +``` + +### Redruck + +```bash +curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @src/main/resources/examples/rest-reprint-request.json +``` + +Beispiel: + +```json +{ + "copies": 1, + "printerAlias": "LABEL_LINE_01", + "dataOverride": { + "reprintReason": "Etikett beschädigt" + } +} +``` + +Ohne `printerAlias` und ohne `dataOverride` wird der Originaljob unverändert erneut gesendet. + +## Druckerarten + +### WINDOWS_SPOOLER + +Für PDF, HTML->PDF, PDF_TEMPLATE und normale Office-/A4-Drucker. + +```json +{ + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "description": "A4 Drucker über Windows Spooler" +} +``` + +### RAW_TCP + +Für schnelle Etikettendrucker mit ZPL/EPL/ESC-POS/PCL. + +```json +{ + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "description": "Zebra Etikettendrucker direkt per TCP" +} +``` + +## REST-Endpunkte + +```text +GET /api/diagnostics/system +GET /api/printers/diagnostics +GET /api/printers/scan +GET /api/printers +POST /api/printers +DELETE /api/printers/{alias} +GET /api/templates/storage +GET /api/templates +GET /api/templates/{name} +POST /api/templates +PUT /api/templates/{name} +DELETE /api/templates/{name} +GET /api/barcodes/formats +GET /api/auth/status +GET /api/auth/me +GET /api/auth/users +POST /api/auth/users +DELETE /api/auth/users/{idOrUserName} +GET /api/auth/config +PUT /api/auth/config +POST /api/auth/reload +POST /api/print/preview +POST /api/print/preview/html +POST /api/print/rendered +POST /api/print +GET /api/docx/converters +POST /api/docx/validate +GET /api/queue +GET /api/queue/{jobId} +POST /api/queue/{jobId}/reprint +``` + +## Render-Modi + +| Modus | Bedeutung | +|---|---| +| `AUTO` | Modus wird anhand des Vorlagentyps ermittelt | +| `RAW` | Text/ZPL/EPL direkt ausgeben | +| `PDF` | HTML nach PDF rendern | +| `PDF_TEMPLATE` | PDF-Vorlage mit Koordinatenfeldern befüllen | +| `DOCX` | DOCX befüllen und als DOCX bereitstellen | + +## Barcode-Platzhalter in HTML/ZPL + +```html + + + +``` + +ZPL direkt: + +```zpl +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +``` + +## HTML-Tabelle + +```html + + + {{#each:items}} + + + + + + + + {{/each}} + +
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}
+``` + +## PDF_TEMPLATE-Tabelle + +```json +{ + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "columns": [ + { "title": "Pos.", "field": "pos", "width": 12, "align": "CENTER" }, + { "title": "Artikel", "field": "partNumber", "width": 29 }, + { "title": "Barcode", "type": "BARCODE", "barcodeType": "CODE_128", "field": "serialNumber", "width": 39 } + ] +} +``` + +## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO + +Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: + +```json +{ + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO" +} +``` + +Ablauf: + +```text +DOCX-Vorlage +-> Platzhalter/Barcode/QR im DOCX füllen +-> docx4j-export-fo wandelt DOCX nach XSL-FO +-> Apache FOP erzeugt PDF +-> PDFBox druckt das PDF +``` + +Vorteile: + +- keine LibreOffice-Installation notwendig +- läuft komplett in der Java-Anwendung +- gut für einfache DOCX-Vorlagen mit Text, einfachen Tabellen, Bildern und Kopf-/Fußzeilen +- geeignet als optionaler, serverinterner Konverter + +Grenzen: + +- Layouttreue ist nicht so hoch wie bei Word/LibreOffice +- komplexe Word-Layouts, Shapes, Textfelder, SmartArt, exakte Seitenumbrüche und komplizierte Tabellen müssen pro Vorlage geprüft werden +- für Produktionsdruck ist `PDF_TEMPLATE` oder `HTML -> PDF` weiterhin robuster und meist schneller + +### Konverterstatus abrufen + +```bash +curl http://localhost:8080/api/docx/converters +``` + +### DOCX4J_FO mit einer Vorlage validieren + +```bash +curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json +``` + +Beispielrequest: + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Die Validierung prüft technisch, ob DOCX -> PDF erfolgreich erzeugt werden kann. Die Layout-Qualität muss anschließend visuell anhand des erzeugten PDFs geprüft werden. + +### DOCX mit DOCX4J_FO drucken + +```bash +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-print-docx4j-fo-request.json +``` + +```json +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} +``` + +Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in der Druckfreigabe validieren. Für feste Formulare bleibt `PDF_TEMPLATE`; für dynamische Tabellen bleibt `HTML -> PDF`; für Etiketten bleibt `RAW_TCP/ZPL` die erste Wahl. + +## Produktionsempfehlungen + +- `RAW_TCP` für ZPL/EPL-Etikettendrucker verwenden. +- `PDF_TEMPLATE` für feste A4-Formulare verwenden. +- `HTML -> PDF` für flexible Tabellenformulare verwenden. +- Authentifizierung mindestens für `/api/print` aktivieren. +- Admin-Funktionen nach Initialeinrichtung schützen. +- Für Maschinen/Stationen separate Tokens mit eigenem User verwenden. +- `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. + + +## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 + +Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: + +```text +Markup im Dokument vor dem Root-Element muss ordnungsgemäß formatiert sein. +``` + +Der Service führt deshalb vor dem Rendern aus: + +```text +HTML-Vorlage + JSON-Daten +→ Platzhalter und Tabellenblöcke rendern +→ BOM/ungültige Steuerzeichen entfernen +→ HTML-Fragmente bei Bedarf in ... einbetten +→ Browser-HTML mit jsoup zu XHTML normalisieren +→ openhtmltopdf → PDF +→ Druck oder Download +``` + +Zusätzlich gibt es einen Validierungsendpunkt: + +```http +POST /api/html/validate +``` + +Beispiel: + +```bash +curl -X POST http://localhost:8080/api/html/validate \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-html-pdf-request.json +``` + +Eine erfolgreiche Antwort enthält unter anderem: + +```json +{ + "ok": true, + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "message": "HTML was rendered and normalized to XHTML successfully. It can be passed to openhtmltopdf." +} +``` + +Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. + + +## v2.4: Lieferschein-Demos und HTML->PDF Fehlerbehebung + +### HTML->PDF Fehler "Markup im Dokument vor dem Root-Element" +Der HTML->PDF Pfad normalisiert HTML jetzt vor dem openhtmltopdf Renderer. Dadurch werden typische Ursachen abgefangen: UTF-8 BOM, HTML-Fragmente ohne Root-Element, nicht XML-konforme Tags wie `
`, `


` oder `` ohne schließenden Slash. + +Validierung vor dem Druck: + +```bash +curl -X POST http://localhost:8080/api/html/validate \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-html-pdf-request.json +``` + +### Einfache PDF-Lieferscheinvorlage + +```text +config-example/templates/lieferschein_pdf_simple/ +├── template.json +├── document.pdf +├── fields.json +├── sample-data.json +└── print-request.json +``` + +### DOCX-Lieferscheinvorlage + +```text +config-example/templates/lieferschein_docx/ +├── template.json +├── document.docx +├── sample-data.json +├── print-request.json +└── validate-request.json +``` + +Barcode-/QR-Platzhalter in DOCX müssen alleine in einem Absatz stehen: + +```text +{{barcode:CODE_128:serialNumber:360x90}} +{{qr:serialNumber}} +``` + +Für Druck ohne LibreOffice verwendet das Beispiel `docxConverter=DOCX4J_FO`. Jede DOCX-Vorlage sollte vor produktiver Nutzung validiert werden. diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6ac2f921129b64cd114f8c3daa17a2243b344bb8 GIT binary patch literal 59838 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 Br~3c^ literal 0 HcmV?d00001 diff --git a/examples/curl-print-authenticated.sh b/examples/curl-print-authenticated.sh new file mode 100644 index 0000000..7386b11 --- /dev/null +++ b/examples/curl-print-authenticated.sh @@ -0,0 +1,10 @@ +curl -X POST http://localhost:8080/api/print \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: CHANGE_ME_PRINT_TOKEN" \ + -d '{ + "printerAlias":"LABEL_LINE_01", + "templateName":"serial_label_zpl", + "renderMode":"RAW", + "copies":1, + "data":{"serialNumber":"SNR000001","partNumber":"A123456"} + }' diff --git a/examples/rest-print-authenticated-request.http b/examples/rest-print-authenticated-request.http new file mode 100644 index 0000000..97a6308 --- /dev/null +++ b/examples/rest-print-authenticated-request.http @@ -0,0 +1,14 @@ +POST http://localhost:8080/api/print +Content-Type: application/json +X-Printservice-Token: CHANGE_ME_PRINT_TOKEN + +{ + "printerAlias": "LABEL_LINE_01", + "templateName": "serial_label_zpl", + "renderMode": "RAW", + "copies": 1, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456" + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..62eabbe --- /dev/null +++ b/pom.xml @@ -0,0 +1,118 @@ + + + 4.0.0 + + de.hehl + printservice-standalone + 2.4.0 + jar + + Printservice Standalone Java 25 + Eigenstaendige Java-25-Printservice-Applikation mit Webfrontend, REST API, Drucker-Aliasen, HTML/PDF/DOCX/ZPL Vorlagen, PDF_TEMPLATE-Koordinaten, Tabellen, Barcode/QR, RAW_TCP, Windows-Service-Skripten und Druck-Authentifizierung, Benutzer-/Tokenverwaltung und persistenter Druckjob-Historie fuer Reprint und optionaler DOCX4J-FO-DOCX-nach-PDF-Konvertierung. + + + 25 + UTF-8 + 3.5.4 + 1.1.37 + 5.5.1 + 3.0.5 + 2.20.0 + 11.5.14 + 1.18.3 + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + + com.google.zxing + core + ${zxing.version} + + + com.google.zxing + javase + ${zxing.version} + + + + io.github.openhtmltopdf + openhtmltopdf-pdfbox + ${openhtmltopdf.version} + + + + org.jsoup + jsoup + ${jsoup.version} + + + + org.apache.pdfbox + pdfbox + ${pdfbox.version} + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + org.docx4j + docx4j-export-fo + ${docx4j.version} + + + org.docx4j + docx4j-JAXB-ReferenceImpl + ${docx4j.version} + + + + + printservice-standalone + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + ${maven.compiler.release} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.1 + + + package + shade + + false + + + de.hehl.printservice.standalone.PrintServiceApplication + + + + + + + + + diff --git a/scripts/install-service.ps1 b/scripts/install-service.ps1 new file mode 100644 index 0000000..8563d14 --- /dev/null +++ b/scripts/install-service.ps1 @@ -0,0 +1,22 @@ +param( + [string]$InstallDir = "C:\printservice-app", + [string]$ConfigDir = "C:\printservice", + [int]$Port = 8080, + [string]$Jar = "$PSScriptRoot\..\target\printservice-standalone.jar" +) +New-Item -ItemType Directory -Force -Path $InstallDir, "$InstallDir\logs", $ConfigDir | Out-Null +Copy-Item $Jar "$InstallDir\printservice-standalone.jar" -Force +Copy-Item "$PSScriptRoot\..\service\printservice.xml" "$InstallDir\printservice.xml" -Force +(Get-Content "$InstallDir\printservice.xml") ` + -replace 'C:\\printservice', ($ConfigDir -replace '\\','\\') ` + -replace '--port=8080', "--port=$Port" | Set-Content "$InstallDir\printservice.xml" -Encoding UTF8 +Write-Host "Bitte WinSW-x64.exe als $InstallDir\printservice.exe ablegen, falls noch nicht vorhanden." +if (Test-Path "$InstallDir\printservice.exe") { + Push-Location $InstallDir + .\printservice.exe install + .\printservice.exe start + Pop-Location +} else { + Write-Host "Download WinSW, benenne es in printservice.exe um und fuehre danach aus:" + Write-Host "cd $InstallDir; .\printservice.exe install; .\printservice.exe start" +} diff --git a/scripts/start-console.bat b/scripts/start-console.bat new file mode 100644 index 0000000..e6e0881 --- /dev/null +++ b/scripts/start-console.bat @@ -0,0 +1,6 @@ +@echo off +setlocal +set BASE=%~dp0.. +if not defined PRINTSERVICE_CONFIG_DIR set PRINTSERVICE_CONFIG_DIR=C:\printservice +if not defined PRINTSERVICE_PORT set PRINTSERVICE_PORT=8080 +java -Dprintservice.config.dir=%PRINTSERVICE_CONFIG_DIR% -jar "%BASE%\target\printservice-standalone.jar" --host=0.0.0.0 --port=%PRINTSERVICE_PORT% diff --git a/scripts/start-console.ps1 b/scripts/start-console.ps1 new file mode 100644 index 0000000..1800c37 --- /dev/null +++ b/scripts/start-console.ps1 @@ -0,0 +1,6 @@ +param( + [string]$ConfigDir = "C:\printservice", + [int]$Port = 8080, + [string]$Jar = "$PSScriptRoot\..\target\printservice-standalone.jar" +) +java "-Dprintservice.config.dir=$ConfigDir" -jar $Jar --host=0.0.0.0 --port=$Port diff --git a/scripts/uninstall-service.ps1 b/scripts/uninstall-service.ps1 new file mode 100644 index 0000000..9126d4c --- /dev/null +++ b/scripts/uninstall-service.ps1 @@ -0,0 +1,9 @@ +param([string]$InstallDir = "C:\printservice-app") +Push-Location $InstallDir +if (Test-Path ".\printservice.exe") { + .\printservice.exe stop + .\printservice.exe uninstall +} else { + Write-Host "printservice.exe nicht gefunden. WinSW-Datei pruefen." +} +Pop-Location diff --git a/service/printservice.xml b/service/printservice.xml new file mode 100644 index 0000000..49ba4d7 --- /dev/null +++ b/service/printservice.xml @@ -0,0 +1,16 @@ + + PrintserviceStandalone + Printservice Standalone + Eigenständiger Java-25 Printservice mit Webfrontend und REST API. + %BASE%\runtime\bin\java.exe + -Dprintservice.config.dir=C:\printservice -jar "%BASE%\printservice-standalone.jar" --host=0.0.0.0 --port=8080 + %BASE%\logs + + 10485760 + 10 + + + Automatic + 15 sec + 1 sec + diff --git a/src/main/resources/examples/lieferschein_docx_rendered_example.docx b/src/main/resources/examples/lieferschein_docx_rendered_example.docx new file mode 100644 index 0000000000000000000000000000000000000000..8f48d90a6e37de21edc1d5e77cddbe3bf1a277fe GIT binary patch literal 38933 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

~>$6O9j)&n1P)w5vhJh?F6AV33E_fXDq8p}i zSjdcyhXIjJkTV|WJ##rc*x%0#gL*163=bW$z+49jvf@nj;vlol1Or`Z0*nX^JWS;X z(0DZ-M#PaP(np!7lLRt!AOq90SZE+;f=!|aL<%@0g1H=dLO%jANy-F#B%pxI&yv8K zl$c;>p!O5$AmO1Ljq&u62+*j>1S3L+zl?+7(IEED1jCWZ6J<)GKtuYtXK^I*L|Vug z=#4Jp%K;HgXmc`tqAelgpoAu-XD8B(BNHa-28A-QuTsFsH31)GqD`dWpxl=6^-{1C zWRIf|p!e4>mBT}mcqSNhPzW;&jBiXZpa&E51r7Qob2&Vk3^_aF>Hy`SaeN#MLm*57 zBTnf17{CT|9T*}GO1v14k4T)*SFw2F1l`5rC-R2HQzqC%ECGzcOm$!h#0feCU=#W| zmOz=H<9PH$dx{5REpwaW(cm-^rh4%h4CJ@|;Ma?04PO35gU&=UaPkNKG!X^)*a+CC z1G6v4r9wak9f~+;r~oHf4)je5hM+_uD&q-CYD%gERkAV}3&u!1MG3tgtqe{Y_{$=Y zBMBxJ%8pdq?VjE)2$Tv@MVX94D=8D!V^vhh1hfi9RSic_!4j}4Snvbn%X>m=XRzyl Q2ZKI^Q&dz{SB>+30KtT0!~g&Q literal 0 HcmV?d00001 diff --git a/src/main/resources/examples/lieferschein_docx_template.docx b/src/main/resources/examples/lieferschein_docx_template.docx new file mode 100644 index 0000000000000000000000000000000000000000..81f2b25156f70f9db78f1525dda6bca9d2583ad7 GIT binary patch literal 37746 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%0DV^32 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/examples/lieferschein_html_table.html.tpl b/src/main/resources/examples/lieferschein_html_table.html.tpl new file mode 100644 index 0000000..8ee8148 --- /dev/null +++ b/src/main/resources/examples/lieferschein_html_table.html.tpl @@ -0,0 +1,58 @@ + + + + + Lieferschein HTML Tabelle + + + +

+ +
Kunde: {{text:customer.name}}
+ + + + + + + + + + + + + + {{#each:items}} + + + + + + + + + {{/each}} + +
Pos.ArtikelBezeichnungMengeSeriennummerBarcode
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}{{text:serialNumber}}Barcode
+ + diff --git a/src/main/resources/examples/lieferschein_html_table_rendered_example.pdf b/src/main/resources/examples/lieferschein_html_table_rendered_example.pdf new file mode 100644 index 0000000..ff055d6 --- /dev/null +++ b/src/main/resources/examples/lieferschein_html_table_rendered_example.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260608180457+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260608180457+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1266 +>> +stream +Gb"/'9lo&I&A@C2i2C8-gKe4WeQ^h)m^,a;`&dUTfW_L1Uo1RVSa!?HK%(TJ#u[04g)5_lBa?i6?!nKG#a.NbW;XE4PWGG8mscNM>"rlL0sI*OWje2>+!Xr3fn'SI=aA>dOhH^;DJZqS]9+eoMH#=36DtWQ9W3*2UDP*l';U+uUW/YLFIS`^lh`N@^Jg?"C@XufoeGIA8%Ee'@J#9f4kn\%j4'N6?,5gDdSD`LhnTc)]lq80k?)"rSS?UA$k]K+bhfEkO5G>Vc)[2K0E=/T,BjUnF^Et$Q\4/>T4b-#(Y+kEQh)h'<3KAM'4;(o&1MB>ph3C2&:*[(UUL1K5'7q/,dJ7i=]rI0L=M\%@+___9iAI(HJr-+gb!+k*LpYs"`9b^jagb#6(8(Hlr&gmH[:GF'1Y:Dn*>7I\(?L\&g3%XE%CBTI@'Zu)q$uFIQ7@-C8Ru5k>de9rS\k#A(c7I@XW-sT5O?u6kW(7;&bV7eC:7j,I1u2pM833XZI_bL0D)XpV.[0q/]FU^8,A,VYbFXSP=ag$BI`SU#];D59[1%kO*j[.;1==)o:bUZ].#hKCja)Sl%"T_7$]:C/M)iMEd=cUrF:5Zid&=440B-`.9l2WGF',!p9cU@V^'%.#X*ZU?I]D^lGqgOn!rAJh@sOK!)$42D\1ZABLPFjNsHJRsk\6m4DF.2L_dZuBE&pBASTaVhDa\BO3TH8Cf^49inX4tJW[%D7*_&$tDtSj$+L2tJ8YAuHl"=D*@d04h!pLPXjHRiATHk[@j/i5Eb7$u9Gu)Bq,s1F_3T=:"Pl!sd`T-n-lK`N9:^_4&BKSBEBKXdt53=OTP^KGcV'mlo-;'gQm7njH&t+s)F<\&8/H^PHY`(:Jg-,>8-^bNsNU2k'H>%9]_Z?b5DbA5,o)1TNM\K_-DuYendstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000872 00000 n +0000000931 00000 n +trailer +<< +/ID +[<03ba57a25334291279fbbf61957007c7><03ba57a25334291279fbbf61957007c7>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +2288 +%%EOF diff --git a/src/main/resources/examples/lieferschein_pdf_fields.json b/src/main/resources/examples/lieferschein_pdf_fields.json new file mode 100644 index 0000000..1b4a393 --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_fields.json @@ -0,0 +1,128 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 35, + "y": 52, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 35, + "y": 60, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 35, + "y": 68, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 35, + "y": 76, + "width": 70, + "height": 6, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "customer", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 35, + "y": 84, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 25, + "y": 94, + "width": 90, + "height": 18 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 155, + "y": 38, + "width": 32, + "height": 32 + }, + { + "name": "item1Pos", + "type": "TEXT", + "value": "{{items.0.pos}}", + "page": 1, + "x": 22, + "y": 142, + "width": 15, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Material", + "type": "TEXT", + "value": "{{items.0.material}}", + "page": 1, + "x": 40, + "y": 142, + "width": 55, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Description", + "type": "TEXT", + "value": "{{items.0.description}}", + "page": 1, + "x": 100, + "y": 142, + "width": 60, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Quantity", + "type": "TEXT", + "value": "{{items.0.quantity}}", + "page": 1, + "x": 165, + "y": 142, + "width": 20, + "height": 5, + "fontSize": 9, + "align": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/lieferschein_pdf_simple_fields.json b/src/main/resources/examples/lieferschein_pdf_simple_fields.json new file mode 100644 index 0000000..99733c0 --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_simple_fields.json @@ -0,0 +1,128 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 55, + "y": 30, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 145, + "y": 30, + "width": 47, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 45, + "y": 50, + "width": 147, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerAddress", + "type": "TEXT", + "value": "{{customer.address}}", + "page": 1, + "x": 45, + "y": 63, + "width": 147, + "height": 8, + "fontSize": 9 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 55, + "y": 87, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 55, + "y": 101, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 145, + "y": 101, + "width": 47, + "height": 8, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 55, + "y": 115, + "width": 70, + "height": 8, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 18, + "y": 135, + "width": 100, + "height": 25 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 145, + "y": 125, + "width": 35, + "height": 35 + }, + { + "name": "note", + "type": "TEXT", + "value": "{{note}}", + "page": 1, + "x": 18, + "y": 205, + "width": 174, + "height": 18, + "fontSize": 9, + "multiline": true + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/lieferschein_pdf_simple_rendered_example.pdf b/src/main/resources/examples/lieferschein_pdf_simple_rendered_example.pdf new file mode 100644 index 0000000..ddef77d --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_simple_rendered_example.pdf @@ -0,0 +1,80 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194637+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194637+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Lieferschein PDF_TEMPLATE Demo - gerendert) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 1 /Kids [ 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1941 +>> +stream +Gatn)gMRrh&;KZH'YJ77R-".j]=9j8Xck)lJ6Xp"Tu==5`7h(=#mL1tSR%(>bAsOR*$8`Eq9ZVPSf.R49/RHQ>Ioa8it#)GMGV%flY'E]9oM^e1X%89(VIt2Z:jsO1+'Q#NBE(n?@u&_/goQ(+bg"D.kS#T=V)QYL8T)VtooL4Pd%!\9=nEet9$4_&/U2\h^U[:%YR95=7[lcop8B:i0C\pco(sNUG'37=V'"JppKGBS(K#OkZ$PRj==_[)K@mZfNE;n5?9hpK047E.3$WP3_80#h:pW#u3/$KbfR]]gL1k.OE5O">TT5<$e6,g;?lc0N=bo&/"Z99#W%%WoF-K&6dC-kE%5hT75eo.Z,3,m4&?ndn$!8&AFr$s9J;&8j_]GV5Dd`h;S_(0O,1f+BgS+uU^JGRHIUO9(r.6NV>43oq6:k"L&LCk@>?fa!-mXpX'U!/(9>d;+lp-G[0V'*.3t*TZb5C3HT_Wu6W?C(>QP+d,5]T!03n]:b[F!8#\HWCatlFb_n+-;.KhHO-8lY49t$)[NUK^)Z_Jk<$p\`k[d,[[]&mjPs];-NCQr8"jFg.."YA1Z;-I-H*=)*>%M;K@-r.ALhbfYgV#)ACA/'Z$S9U,Vnd>.GNom#ZneYTOMV9AKHXd_\\"D4db#Nlb[ROcmJA^D.k?4%o&XLo;t;#),#!`o-;6T_>>_@HTG&gVBo,)bC8*s04J?:Nig('t&OYXf>0MS(^&TLeELp]a/t(53sdrB`paT^ikOXKkp!Sje7XB.rrh>GnA2?P'#q^b<>r.1VphHX)R-PAQ+=ga;5u>#*Bi?3DfAJ7mHtV`<0UJR>p\&[4mo^Knm?O4Tu):;9;l@%gWU=XB,a=e!aTO!p<,4eXosO2."cF4]4W]C+.+]omm*d/`YPih8c#r=Hrkj/5YT1eQe:qhS2NPB73FRZ!eXgIROhD\P*jbH@s7*:n`7E`ZHZOK+e*qZDLHfD:-!Pu9\*<6o[[Qa4bJ-*(qL?ujAp)]k2YdkU&"G3~>endstream +endobj +xref +0 10 +0000000000 65535 f +0000000061 00000 n +0000000112 00000 n +0000000219 00000 n +0000000331 00000 n +0000000440 00000 n +0000000643 00000 n +0000000711 00000 n +0000001006 00000 n +0000001065 00000 n +trailer +<< +/ID +[<756205e546b68225b6eb780b6d82060b><756205e546b68225b6eb780b6d82060b>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 7 0 R +/Root 6 0 R +/Size 10 +>> +startxref +3097 +%%EOF diff --git a/src/main/resources/examples/lieferschein_pdf_simple_template.pdf b/src/main/resources/examples/lieferschein_pdf_simple_template.pdf new file mode 100644 index 0000000..2e05dca --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_simple_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194637+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194637+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Lieferschein PDF_TEMPLATE Demo) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 997 +>> +stream +Gau1-gN(as&;KZF'RL,p?$&88;Gpo"/Vi='/fBjhJn]$;fkIA5l+80%[ZcH3daBD/.$<\"I9QSQM$&ZShL87@JGfUW^#d$5,W"?c'dQ:gOGo:EjosLVR#bF-!5TS1kQS5XGHj"q-DV5]X[2!$LEqXf7iBQ"<0JDg(!e'!$-A*#f)YShI"q(8E7-`,?@d5[[Up9Ae+i=>jP]g^dHfin`fugo#DZk.VHK&4<6T#1V6D\u?1U(%2r\d2.Q3s-8)lGeTTqj;f0'N:dSJ^W\?YdHP?.gF[Gm7hmsPId1BGBe[6c=1]r<$MoeO9f0FS`ecoWOX_;V\edX;2YRhVreq0EsXWpZ'aa-!]?_&Gu@:0Cl!b?5k6q0blS;/n*JAY#C?U0-RRN>9#V%l]0^<6XfBA/q]c/&<#/)&7W?B[@(+cj7BYa$)r.l*As3<]&t('+KT*FUZkVk=fZq;IP4mlQ4G++1Df[pC%;UGfHKAGF7fg\CIa*=AR#G6`X=!-]chLf+MCq9kf`\;n2b0beI)d^>;+dXYbdCKj!rrN&R-#6m8(J6>"1_3ZUTE_&NnYs%LXj7BLu+YniU715>7taqJAi16c*K0O>s0b]h!hAQ>)E$s9>$@us^RWgt>L',QbpD<,fmmco;"m`hf75TPd):@5,g/F'Cao0jNlA*p/_5Wc0;V*NAgNgZ/"c"%?5QA57@gMb?K_sOqPqeMT8F]Mj54M/a[OPDosc&oMolnX?6D2B_Xmr\*8r!rC)7XI^.bc%NJhIf8O@34D[lb!XaFA<*K.Fdu&pendstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000875 00000 n +0000000934 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +2021 +%%EOF diff --git a/src/main/resources/examples/lieferschein_pdf_table_fields.json b/src/main/resources/examples/lieferschein_pdf_table_fields.json new file mode 100644 index 0000000..cc3b5f7 --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_table_fields.json @@ -0,0 +1,111 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/lieferschein_pdf_table_fields_newpage.json b/src/main/resources/examples/lieferschein_pdf_table_fields_newpage.json new file mode 100644 index 0000000..d0ee3e9 --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_table_fields_newpage.json @@ -0,0 +1,111 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "NEW_PAGE", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/lieferschein_pdf_table_rendered_example.pdf b/src/main/resources/examples/lieferschein_pdf_table_rendered_example.pdf new file mode 100644 index 0000000..b3d2a6f --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_table_rendered_example.pdf @@ -0,0 +1,85 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 290 /Length 3456 /Subtype /Image + /Type /XObject /Width 290 +>> +stream +Gb"0M5n_rq&4=k#s3f$?S%+1cZ>6UJ\VkrKR3URe1H7UpSOJYmi"#C0#?/)kEn3%4-(1M*ab+g<9CUVWWT"ESN$=DrepmP1W1+O9h?0com0CsI:9e(OY'ohCZotJ;0q)lA<'u%nL`cKaX?fB1U*ab*l[=I?o6G^X.V<:a\_3i&YNG\GGcYR*'WcsGjI2^l0AY.SpbZ+$L1]'#;iQF?iNL?d&2.lPrCr;TbAfEO)]kbjYe(BC.o?9+)VL$j]fr)(a?fmbnbY7]40saYc)nsNPgR+Do?"7K=`\r44B=9NNe[riF5)jFS1='cHAu^'7R=3rHBVaFmEOO9lIF",FHU$W+NO+W$msCXJhtnksD4GJ8Ic'amqqb,ZDrYZ/p\UO0h=lB@I2cf<^#/QHl+Zmjmb9_Ukl&6Y8b]ojEo4mi7dp(7:V-#nPl!Aa2L<.,H.%-0Vqeb$[aFu#c]ddD5NTV=Z]3i1MmMs8!,h^GJ/`tUi5T+.\FGmdDZ"'r)h/a``a8q[nWs8or+0j:I6#Fd4-Qj>AN#fGU"lT/Y79A.V>-KYAlGZCb)I>8g@2dQMQ]T_2O-n.go-@=%Gr,$pmP/o;lLJRN>hWHn@_\VY=W:`PtIb*W0+7mh]&EeRT*ltW>*L7)Yr+V]hsZj8S'fF8tk%=Ofo5O)l<=u<+](.'ZuCRq:b>O;2VPKAN#fGU"lT/Y79A.V>-KYAlGZCb)I>8RT0'"Pa]9;Q*U3J8ln3j)l7.b9;QGgO4';Smma;0gJTJic_GUDj1A0'p9mrCk4:!,q=nilR_:;;V.OX=V//>VdZom^7]G(q;CS*]UNGVX]2<>:[T(E3o-do?phl=b]e,MTq)h8N5/%u4AoC>=Cd(XpBA^86=^N+(2u@3*j6Kj1b.Q<]^,BS@p'KktR(:m/HQ->c%Z^=h99H<-gsYB@=XNL?8aZa]JtX@Qo/lY^&K1H52CDr^.dOik>fh7bdZDYD?7G;FU>V/#oT)`-Mgjt$4)21DfiRIN-*'muu!^Y$QMGaeF8^/U)!Ch%'>c$T\%Wl?^#0f,D5^4J"l;nA7_T]2Sa2b>AbM[Qhtc-MpO^,#IC#os^2rg+h])Atd!)X22O2s>0(;*)D_cI#CgF-tsPOH6.k1$KCei5)Rsg]Ce(BqKRJWT3eP(rshY-',mb?CE9T;d'p>r+!f[WZT:#>U*V!d!ieP(rshY-',mb?CE9T;d'p>r+!f[WZT:#>U*V!d!ieP(rshY-',mb?CE9YOS)Ub],rpQ^0?:6BGdCJ#PF=%LT5m-AeOFJE2Ag.8nDC,TX1Y>_59rL2/(l4m4'.JnF^,2MJ7PVuFCOIAnsfBX.87_bh-Oa;`2Cs'IuVarcC25Q;^/#6cUp@UI8]$[]1D5:J]24LnTf.#.-ISFN$oa7\OP^U5?O`'f,8fOa28Bn$ulZJ),UL-sR8A2lcZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\W*pZ^/XQjnW\>Ehmn`Q5/("bS+2_h,N$%kZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\W*pZ^/XQjnW\>Ehmn`Q5/("bS+2_h,N$%kZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\[4(7Z]aT98fOa2:hFG%S'4L)o-eIO?9t!UNGgR&WQq9GOa71BQ8ZJ!XJ@n1l9%ZXWE2o.C#b],8uhJ>[c,EBmlO]/Z]1C92JVS.ou6dOCh)VfE$IBbslgR*8(UW0H7?`_St2J/Q8W3NDQ([El`NLArfC@!GC`VRepA*1=])S8UiYs'tuR!ESE`i`3HXO#*KAtIbUZ)c@jlSGl,RHHJClmh\IqTNbck.-KFI48*jmcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$GQLzzzzzzzzzzzz!;QHo'r)09~>endstream +endobj +5 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.8de85583b9e7bfa26ef5e1750cf0a554 4 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608163430+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608163430+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 1 /Kids [ 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2534 +>> +stream +Gat%gbB"U]&r5rP.ra:RehGqkhlKB=')_JttF^7=Y/X/l.mB5,ucc`qMS[i2`A!NhsZ5p#jec.6Mj#/BP\ngUrSBoVs'.="6Oggnhn)D5\lcnublT:LURcJn&GI`QSo32ls\SlT^l@,mR]m&INIIZ'GbdRHr?N.W`lrSba8SYAdE7mjPWthL)O,d\uM#"Xje]j%*.eOA-"K,GqVa=N6Q1iT96JW&fWg>&YT1)R_l5Xi2U0lMV3N1KhV6\doA*@GOKoU'-B]qjPbM'O9kYI](ip"EScll$AS3BEop-]Apd<3seAQlQqka0P$c/S`WC;5'7N*qp61g/GRZBs-(qo/nB3D#RMR/bcMp"0[_;lF4nlK+nt"k4L%Z!L!:;]Nfkq;q?:A=B+VWplAlX_=KWDa\b,b3Z+WLO$Gdgohfgf?_Iotn-gID,X7Q!J:7cT'1N!=j4N0JXnO7nL2VML.E(r,JpFH+b4NZq9N,\\:dUf8AV[3sI^c)G9V<"ogPWLhk-K%PHqCC!S`S!1/qCCb-0fLS47!FlEB`^"?:nke6MCSX]C6^.-c?u335:b61?c:t(&#I-Q!PHh_h6Bc,k@;MgXdEhscFQUuJ$,uRJ;2H-GV6,It)bR;P9g0jO^Ku7)K7t)Gf2U`i4Z2%RE5Tl@N-u;!-8t@@q*BO+CZ$r80k6g;>c4de_EjfU4-A@+uA4I2*:!7LaCg1P,>_dKqbt@+I7E`@G/+$f#s_<`E7H<8V?VGNrrLq-W,$\"CRdrce8k=g!'M_*=>*=CjuSmdE,(R$F/->&@QfqK!H19Cb-;3Yj=CVC1L3X/'*+j)_dTVjZH0D9e$mO4)sm/J?Ag&YkHF!Jlm1:KIorNT^3p(9:9;dZ=:#V^"q%e,E7?:[sd#oW,t0\(uN+\D?$0rY!ht?@=u=0Qj$;]q,-fAu)nWbg-EIkm(gUZ)8W)Qm(6n>c*3IV^UOY&6ldM@\'l,7>rf.KFJ"ebAm`jLh4NXi:IJV7Qi7`Ju'!9:J&.#MS!FG>]Ps&LiMfboMU'L_PLXO[<09,D[pl"L1CU+I8'\KIq3IZ),!`YUi9U><4YR)^M6r>+*p:cE\hbLd.n7YbQAGmQNPY/McPtYTBjbNH8TW4G)Q$.1#bbejFgR[@)t=%8MsAT-4Sj)d3LZF8MsLu-KRTMgU"Y!!f/0HCh`Q-Cj?/Xn$P1&(?4XmoSl\3+HPF>;>6nW;miZHB/eQ#k?Jakul7`KJ*eZg1pMUV/I0X/\C`k;'HHrie0gSnW'7d3jJZtu#K:qQL#[:O95cYP@/>(`(bP`!&jbH89H[#MnTr\dff\r15?[\"0eCXEYK.LS#NW8I#O(-]s/XDendstream +endobj +xref +0 10 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000003968 00000 n +0000004234 00000 n +0000004302 00000 n +0000004563 00000 n +0000004622 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 7 0 R +/Root 6 0 R +/Size 10 +>> +startxref +7247 +%%EOF diff --git a/src/main/resources/examples/lieferschein_pdf_table_template.pdf b/src/main/resources/examples/lieferschein_pdf_table_template.pdf new file mode 100644 index 0000000..45bb8b2 --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_table_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608163430+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608163430+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (PDF Tabellenvorlage Lieferschein) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 672 +>> +stream +Gat%`9lJ`N&;KZL'm"2lAF#fb1_PR3JK@.Y1pM?m&HY(F/$D7Y1sNf(fFT_c.'5%G@C5L8ccj[:6H"q$hU;IDPJH@q"Gr5a5\cu9)*fjcB]9Z6@F?s("&X&cJI+nHhB^F_WDAlCI(r8^;Gc)LaqqM)ul$^5e>UMZ?=Tuq?c(K:2V`\g!(G-79$\Q_k!2HqedgG4+pmT`YMM%*^@@b;::;nO_.Qb[Br@PsddG/SrPht/2@j_tbD\T\@C(iZ.;_uP'EmgCdg0mU!p5@([DjrGSo'&!K6+[4?:,hKRaVftF*9]Q9&c)Do:>n_m4?@=)]NlVnn?$C<$^>>XMu1[G7Yuh>;c_&-#!Wu$.*nmNgSJ_tkeQYioH@JV9@l&eF-]jbY&q8S_im&e<*b>-KMuTWjuWa?\-p!,[_qoN=m"a)FWbTsr+MA@7b)aHe#9"Fb./SsLYrMO[&s[ZU9AaW9;oJ!J7g?1?<1%Bh/ZYq=j_ocp&;1i]K.i9r4UH^Y9To7b4lP$;S^6n&iD;q~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000877 00000 n +0000000936 00000 n +trailer +<< +/ID +[<721e7688792119f7e9da1c836b6aa329><721e7688792119f7e9da1c836b6aa329>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1698 +%%EOF diff --git a/src/main/resources/examples/lieferschein_pdf_template.pdf b/src/main/resources/examples/lieferschein_pdf_template.pdf new file mode 100644 index 0000000..ef235ee --- /dev/null +++ b/src/main/resources/examples/lieferschein_pdf_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608150433+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608150433+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (PDF-Koordinatenvorlage Lieferschein) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 914 +>> +stream +Gat=i92?K]&:j6F'm"1'(m!S:80L-\[QM"[L]VS5dX=O?NN3!T:7P&2"Ge1XPdO!@R;X.<6/_CQo`%_hS7Z_&6pLe+"AgfVf`dmY".h?P^CChS%Ot;,C%TD0+#J!bU_."B@8:kI0u2$Vfb8mR@8A"%SNW-GkF2%&(EUCrA=RI$^M%FY$#2!;0h:?s(Hi?B!kh']Tb`#gPnVW8MTMA,=D?oW>:V33O+W:2(W82O(OE[+dt_2C9]k`%E=O'2A&j1+MA,`\%Y=;k]]paimJ8q5AfcoC>)`PFar"KN/q!qb'A[^j@D)(bj5iLX$!Ja-=pbK4UQWB:&9rpVEmM<'[pKH'-iYD"iZk3]pE,7)T9T@sg,94kJf7iaZ*UZVin3NjmY-^Pc6)oT[3f4I@Qn5(XoNjXQA&fEcTEW"tmM-#0.Isp^4&cob:FRFkp]T\d*J$?['D)Q>MiE$kA5u-`"KG!9N+QUAHc)>V^q#F(oR82/((f&:%-,@W30[c]!SN6jEFh)#=)RZ9NOqfWr'Ho&H^N4V&%uZ,8QK/@:jWXPZbq)c?+T$G0GB#gj%cK8*bq'CEd;ZWcRlie;.!f+tDDn*A9h8jNYc"AdpH&f_"%YoX>l~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000880 00000 n +0000000939 00000 n +trailer +<< +/ID +[<3c3495ea3f083feb5cec8e62223c0531><3c3495ea3f083feb5cec8e62223c0531>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1943 +%%EOF diff --git a/src/main/resources/examples/rest-create-admin-user-request.json b/src/main/resources/examples/rest-create-admin-user-request.json new file mode 100644 index 0000000..796de4b --- /dev/null +++ b/src/main/resources/examples/rest-create-admin-user-request.json @@ -0,0 +1,7 @@ +{ + "userName": "admin", + "displayName": "Administrator", + "tokenName": "admin-token", + "enabled": true, + "scopes": ["ALL"] +} diff --git a/src/main/resources/examples/rest-create-auth-user-request.json b/src/main/resources/examples/rest-create-auth-user-request.json new file mode 100644 index 0000000..ac930ff --- /dev/null +++ b/src/main/resources/examples/rest-create-auth-user-request.json @@ -0,0 +1,7 @@ +{ + "userName": "line01", + "displayName": "Linie 01", + "tokenName": "line01-print-token", + "enabled": true, + "scopes": ["PRINT", "PREVIEW"] +} diff --git a/src/main/resources/examples/rest-create-docx-lieferschein-template-request.json b/src/main/resources/examples/rest-create-docx-lieferschein-template-request.json new file mode 100644 index 0000000..c114e95 --- /dev/null +++ b/src/main/resources/examples/rest-create-docx-lieferschein-template-request.json @@ -0,0 +1,46 @@ +{ + "name": "lieferschein_docx", + "documentName": "Lieferschein DOCX Vorlage", + "templateType": "DOCX", + "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "sourceFileName": "lieferschein_docx_template.docx", + "documentFile": "document.docx", + "sampleData": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + }, + "examplePrintRequest": { + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } + }, + "contentBase64": "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" +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-create-html-table-template-request.json b/src/main/resources/examples/rest-create-html-table-template-request.json new file mode 100644 index 0000000..428ecf9 --- /dev/null +++ b/src/main/resources/examples/rest-create-html-table-template-request.json @@ -0,0 +1,10 @@ +{ + "name": "lieferschein_html_table", + "documentName": "lieferschein_html_table", + "sourceFileName": "lieferschein_html_table.html.tpl", + "description": "HTML-Lieferschein mit dynamischer Tabelle, Barcode je Zeile und QR-Code im Kopf", + "contentType": "text/html", + "templateType": "HTML", + "encoding": "UTF-8", + "content": "\n\n\n \n Lieferschein HTML Tabelle\n \n\n\n
\n
\n

Lieferschein

\n
Nr.: {{text:deliveryNumber}}
\n
Datum: {{text:deliveryDate}}
\n
\n \"QR\"\n
\n\n
Kunde: {{text:customer.name}}
\n\n \n \n \n \n \n \n \n \n \n \n \n \n {{#each:items}}\n \n \n \n \n \n \n \n \n {{/each}}\n \n
Pos.ArtikelBezeichnungMengeSeriennummerBarcode
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}{{text:serialNumber}}\"Barcode\"
\n\n\n" +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-create-pdf-simple-lieferschein-template-request.json b/src/main/resources/examples/rest-create-pdf-simple-lieferschein-template-request.json new file mode 100644 index 0000000..cd9dd5f --- /dev/null +++ b/src/main/resources/examples/rest-create-pdf-simple-lieferschein-template-request.json @@ -0,0 +1,169 @@ +{ + "name": "lieferschein_pdf_simple", + "documentName": "Lieferschein PDF einfach", + "templateType": "PDF_TEMPLATE", + "contentType": "application/pdf", + "sourceFileName": "lieferschein_pdf_simple_template.pdf", + "documentFile": "document.pdf", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 55, + "y": 30, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 145, + "y": 30, + "width": 47, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 45, + "y": 50, + "width": 147, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerAddress", + "type": "TEXT", + "value": "{{customer.address}}", + "page": 1, + "x": 45, + "y": 63, + "width": 147, + "height": 8, + "fontSize": 9 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 55, + "y": 87, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 55, + "y": 101, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 145, + "y": 101, + "width": 47, + "height": 8, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 55, + "y": 115, + "width": 70, + "height": 8, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 18, + "y": 135, + "width": 100, + "height": 25 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 145, + "y": 125, + "width": 35, + "height": 35 + }, + { + "name": "note", + "type": "TEXT", + "value": "{{note}}", + "page": 1, + "x": 18, + "y": 205, + "width": 174, + "height": 18, + "fontSize": 9, + "multiline": true + } + ], + "sampleData": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + }, + "examplePrintRequest": { + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_simple", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + } + }, + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA5MTk0NjM3KzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA5MTk0NjM3KzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKExpZWZlcnNjaGVpbiBQREZfVEVNUExBVEUgRGVtbykgL1RyYXBwZWQgL0ZhbHNlCj4+CmVuZG9iago3IDAgb2JqCjw8Ci9Db3VudCAxIC9LaWRzIFsgNCAwIFIgXSAvVHlwZSAvUGFnZXMKPj4KZW5kb2JqCjggMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggOTk3Cj4+CnN0cmVhbQpHYXUxLWdOKGFzJjtLWkYnUkwscD8kJjg4O0dwbyIvVmk9Jy9mQmpoSm5dJDtma0lBNWwrODAlW1pjSDNkYUJELy4kPFwiSTlRU1FNJCZaU2hMODdASkdmVVdeI2QkNSxXIj9jJ2RROmdPR286RWpvc0xWUiNiRi0hNVRTMWtRUzVYR0hqInEtRFY1XVhbMiEkTEVxWGY3aUJRIjwwSkRnKCFlJyEkLUEqI2YpWVNoSSJxKDhFNy1gLD9AZDVbW1VwOUFlK2k9PmpQXWdeZEhmaW5gZnVnbyNEWmsuVkhLJjQ8NlQjMVY2RFx1PzFVKCUyclxkMi5RM3MtOClsR2VUVHFqO2YwJ046ZFNKXldcP1lkSFA/LmdGW0dtN2htc1BJZDFCR0JlWzZjPTFdcjwkTW9lTzlmMEZTYGVjb1dPWF87VlxlZFg7MllSaFZyZXEwRXNYV3BaJ2FhLSFdP18mR3VAOjBDbCFiPzVrNnEwYmxTOy9uKkpBWSNDP1UwLVJSTj45I1YlbF0wXjw2WGZCQS9xXWMvJjwjLykmN1c/QltAKCtjajdCWWEkKXIubCpBczM8XSZ0KCcrS1QqRlVaa1ZrPWZacTtJUDRtbFE0RysrMURmW3BDJTtVR2ZIS0FHRjdmZ1xDSWEqPUFSI0c2YFg9IS1dY2hMZitNQ3E5a2ZgXDtuMmIwYmVJKWRePjsrZFhZYmRDS2ohcnJOJlItIzZtOChKNj4iMV8zWlVURV8mTm5ZcyVMWGo3Qkx1K1luaVU3MTU+N3RhcUpBaTE2YypLME8+czBiXWghaEFRPilFJHM5PiRAdXNeUldndD5MJyxRYnBEPCxmbW1jbzsibWBoZjc1VFBkKTpANSxnL0YnQ2FvMGpObEEqcC9fNVdjMDtWKk5BZ05nWi8iYyIlPzVRQTU3QGdNYj9LX3NPcVBxZU1UOEZdTWo1NE0vYVtPUERvc2Mmb01vbG5YPzZEMkJfWG1yXCo4ciFyQyk3WElePFUoKlZcQVExNCpuU1ZiRD04dSd0Z1trZ1w4ZGpec1socFRETlhyakRpU11qWksvM15QbW5rcGhxdEI5JSZaWzwwZ0UjQEk6RUdHLDUhMnRManAuTGVPLkl1Vyw2Im0sb2staW5oSz1RcFVZMDY5XCVeMDw9RklXcHBScSZuVjIqN1UzMjs/Uj84OzJDVUZMbnRXYVY+LmJjJU5KaElmOE9AMzREW2xiIVhhRkE8KksuRmR1JnA8dF1FVmM1czAjK25dYmhSJWJiLiRoOkNjNyRJWk1camhMSW9eK11vLVJYaTdaMlRhM1hETTxiP3FGJn4+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwNjEgMDAwMDAgbiAKMDAwMDAwMDEwMiAwMDAwMCBuIAowMDAwMDAwMjA5IDAwMDAwIG4gCjAwMDAwMDAzMjEgMDAwMDAgbiAKMDAwMDAwMDUyNCAwMDAwMCBuIAowMDAwMDAwNTkyIDAwMDAwIG4gCjAwMDAwMDA4NzUgMDAwMDAgbiAKMDAwMDAwMDkzNCAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9JRCAKWzxhYzA4MzlmM2UwZTNjNGMzYWNhOGRmNGVjM2E0OWNkMj48YWMwODM5ZjNlMGUzYzRjM2FjYThkZjRlYzNhNDljZDI+XQolIFJlcG9ydExhYiBnZW5lcmF0ZWQgUERGIGRvY3VtZW50IC0tIGRpZ2VzdCAob3BlbnNvdXJjZSkKCi9JbmZvIDYgMCBSCi9Sb290IDUgMCBSCi9TaXplIDkKPj4Kc3RhcnR4cmVmCjIwMjEKJSVFT0YK" +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-create-pdf-template-request.json b/src/main/resources/examples/rest-create-pdf-template-request.json new file mode 100644 index 0000000..937f4e5 --- /dev/null +++ b/src/main/resources/examples/rest-create-pdf-template-request.json @@ -0,0 +1,136 @@ +{ + "name": "lieferschein_pdf", + "documentName": "lieferschein_pdf", + "sourceFileName": "lieferschein_pdf_template.pdf", + "description": "Beispiel: PDF als Vorlage plus Koordinatenfelder für Text, Barcode und QR-Code.", + "contentType": "application/pdf", + "templateType": "PDF", + "encoding": "UTF-8", + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA4MTUwNDMzKzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA4MTUwNDMzKzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKFBERi1Lb29yZGluYXRlbnZvcmxhZ2UgTGllZmVyc2NoZWluKSAvVHJhcHBlZCAvRmFsc2UKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0NvdW50IDEgL0tpZHMgWyA0IDAgUiBdIC9UeXBlIC9QYWdlcwo+PgplbmRvYmoKOCAwIG9iago8PAovRmlsdGVyIFsgL0FTQ0lJODVEZWNvZGUgL0ZsYXRlRGVjb2RlIF0gL0xlbmd0aCA5MTQKPj4Kc3RyZWFtCkdhdD1pOTI/S10mOmo2RidtIjEnKG0hUzo4MEwtXFtRTSJbTF1WUzVkWD1PP05OMyFUOjdQJjIiR2UxWFBkTyFAUjtYLjw2L19DUW9gJV9oUzdaXyY2cExlKyJBZ2ZWZmBkbVkiLmg/UF5DQ2hTJU90OyxDJVREMCsjSiFiVV8uIkJAODprSTB1MiRWZmI4bVJAOEEiJVNOVy1Ha0YyJSYoRVVDckE9UkkkPGwxYm00QTgoWCpaZFtUXyhqYCpAXThfNFpqOnJoJ1JrZickKm8zL2ZFMGJTQiRUMGErJ0xDWmcqUm8uQj5eTSVGWSQjMiE7MGg6P3MoSGk/QiFraCddVGJgI2dQblZXOE1UTUEsPUQ/b1c+OlYzM08rVzoyKFc4Mk8oT0VbK2R0XzJDOV1rYCVFPU8nMkEmajErTUEsYFwlWT07a11dcGFpbUo4cTVBZmNvQz4pYFBGYXIiS04vcSFxYidBW15qQEQpKGJqNWlMWCQhSmEtPXBiSzRVUVdCOiY5cnBWRW1NPCdbcEtIJy1pWUQiaVo8TDdwckcrLCcxblY9XVcoW1o1ajlAL0RXK2Fjb1k3NTZiUGBkVXEwRD03XTs+azNdcEUsNylUOVRAc2csOTRrPFgkL3MoP0MkVGYjLzg0VTVhTWlLOztUJDkmWEBkZGMvWjNjaU9eWT1zMlhBb2RIXHA+SmY3aWFaKlVaVmluM05qbVktXlBjNilvVFszZjRJQFFuNShYb05qWFFBJmZFY1RFVyJ0bU0tIzAuPFVaUDA7azhrKWMnVllVc2o1V1kzST9Qbz1FV20nbFRlYi5BOG9aOzQ7SnJCU3RlbGM4dVQ6J1VYYjwzVSMsWjtUSDRVVEdrV3AsUVVMRltWMW04RDAoKixQUyhNLXFWJ2hAZ2hnVzRHPUIkRWI1RWlnSk9ZK3RxPklzcF40JmNvYjpGUkZrcF1UXGQqSiQ/WydEKVE+TWlFJGtBNXUtYCJLRyE5TitRVUFIYyk+Vl5xI0Yob1I4Mi8oKGYmOiUtLEBXMzBbY10hU042akU8bjctLzciOVpzMHJuNnMuUj5GaCkjPSlSWjlOT3FmV3InSG8mSF5ONFYmJXVaLDhRSy9AOmpXWFBaYnEpYz8rVCRHMEdCI2dqJWNLOCpicSdDRWQ7WldjUmxpZTsuIWYrdEREbipBOWg4ak5ZYyJBZHBIJmZfIiVZb1g+bH4+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwNjEgMDAwMDAgbiAKMDAwMDAwMDEwMiAwMDAwMCBuIAowMDAwMDAwMjA5IDAwMDAwIG4gCjAwMDAwMDAzMjEgMDAwMDAgbiAKMDAwMDAwMDUyNCAwMDAwMCBuIAowMDAwMDAwNTkyIDAwMDAwIG4gCjAwMDAwMDA4ODAgMDAwMDAgbiAKMDAwMDAwMDkzOSAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9JRCAKWzwzYzM0OTVlYTNmMDgzZmViNWNlYzhlNjIyMjNjMDUzMT48M2MzNDk1ZWEzZjA4M2ZlYjVjZWM4ZTYyMjIzYzA1MzE+XQolIFJlcG9ydExhYiBnZW5lcmF0ZWQgUERGIGRvY3VtZW50IC0tIGRpZ2VzdCAob3BlbnNvdXJjZSkKCi9JbmZvIDYgMCBSCi9Sb290IDUgMCBSCi9TaXplIDkKPj4Kc3RhcnR4cmVmCjE5NDMKJSVFT0YK", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 35, + "y": 52, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 35, + "y": 60, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 35, + "y": 68, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 35, + "y": 76, + "width": 70, + "height": 6, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "customer", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 35, + "y": 84, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 25, + "y": 94, + "width": 90, + "height": 18 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 155, + "y": 38, + "width": 32, + "height": 32 + }, + { + "name": "item1Pos", + "type": "TEXT", + "value": "{{items.0.pos}}", + "page": 1, + "x": 22, + "y": 142, + "width": 15, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Material", + "type": "TEXT", + "value": "{{items.0.material}}", + "page": 1, + "x": 40, + "y": 142, + "width": 55, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Description", + "type": "TEXT", + "value": "{{items.0.description}}", + "page": 1, + "x": 100, + "y": 142, + "width": 60, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Quantity", + "type": "TEXT", + "value": "{{items.0.quantity}}", + "page": 1, + "x": 165, + "y": 142, + "width": 20, + "height": 5, + "fontSize": 9, + "align": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-create-pdf-template-table-request.json b/src/main/resources/examples/rest-create-pdf-template-table-request.json new file mode 100644 index 0000000..a86d5d1 --- /dev/null +++ b/src/main/resources/examples/rest-create-pdf-template-table-request.json @@ -0,0 +1,118 @@ +{ + "name": "lieferschein_pdf_table", + "documentName": "lieferschein_pdf_table", + "sourceFileName": "lieferschein_pdf_table_template.pdf", + "description": "PDF_TEMPLATE Beispiel mit dynamischer Tabelle, Barcode-Spalte und QR-Code", + "contentType": "application/pdf", + "templateType": "PDF", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA4MTYzNDMwKzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA4MTYzNDMwKzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKFBERiBUYWJlbGxlbnZvcmxhZ2UgTGllZmVyc2NoZWluKSAvVHJhcHBlZCAvRmFsc2UKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0NvdW50IDEgL0tpZHMgWyA0IDAgUiBdIC9UeXBlIC9QYWdlcwo+PgplbmRvYmoKOCAwIG9iago8PAovRmlsdGVyIFsgL0FTQ0lJODVEZWNvZGUgL0ZsYXRlRGVjb2RlIF0gL0xlbmd0aCA2NzIKPj4Kc3RyZWFtCkdhdCVgOWxKYE4mO0taTCdtIjJsQUYjZmIxX1BSM0pLQC5ZMXBNP20mSFkoRi8kRDdZMXNOZihmRlRfYy4nNSVHQEM1TDhjY2pbOjZIInEkaFU7SURQSkhAcSJHcjVhNVxjdTkpKmZqY0JdOTxHZjVbJWwqb18zUUBBSl1VPVRmTzJfSFNONiQxTUFiZD5aNkBGP3MoIiZYJmNKSStuSGhCXkZfV0RBbENJKHI4XjtHYylMYXFxTSl1bCReNWU+VU1aPz1UdXE/YyhLOjJWYFxnIShHLTc5JFxRX2shMkhxZWRnRzQrcG1UYFlNTSUqXkBAYjs6OjtuT18uUWJbQnJAUHNkZEcvU3JQaHQvMkBqX3RiRFxUXEBDKGlaLjtfdVAnRW1nQ2RnMG1VIXA1QChbRGpyR1NvJyYhSzYrWzQ/OixoS1JhVmZ0Rio5XVE5JmMpRG86Pm5fbTQ/QD0pXU5sVm5uPyRDPCRePj5YTXUxW0c3WXVoPjs8LzZQOHBcMC4kK0AhaCc9YilxMFRoPSlsLyZUKXIyP2AsL1FCc0duISJNWUgucj1LSXFWLDtidVUuJEYoRXVKIV4/LldbLCNTNFhqRydLNSIjXltLYFlpXDFfbVBRcE1kMWNpT14jY21nJjQ6bi4yKEE+Y18mLSMhV3UkLipubU5nU0pfdGtlUVlpb0hASlY5QGwmZUYtXWpiWSZxOFNfaW0mZTwqYj4tS011VFdqdVdhP1wtcCEsW19xb049bSJhKUZXYlRzcitNQUA3YilhSGUjOSJGYi4vU3NMWXJNT1smc1taVTlBYVc5O29KIUo3Zz8xPzwxJUJoL1pZcT1qX29jcCY7MWldSy5pOXI0VUheWTlUbzdiNGxQJDtTXjZuJmlEO3F+PmVuZHN0cmVhbQplbmRvYmoKeHJlZgowIDkKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDYxIDAwMDAwIG4gCjAwMDAwMDAxMDIgMDAwMDAgbiAKMDAwMDAwMDIwOSAwMDAwMCBuIAowMDAwMDAwMzIxIDAwMDAwIG4gCjAwMDAwMDA1MjQgMDAwMDAgbiAKMDAwMDAwMDU5MiAwMDAwMCBuIAowMDAwMDAwODc3IDAwMDAwIG4gCjAwMDAwMDA5MzYgMDAwMDAgbiAKdHJhaWxlcgo8PAovSUQgCls8NzIxZTc2ODg3OTIxMTlmN2U5ZGExYzgzNmI2YWEzMjk+PDcyMWU3Njg4NzkyMTE5ZjdlOWRhMWM4MzZiNmFhMzI5Pl0KJSBSZXBvcnRMYWIgZ2VuZXJhdGVkIFBERiBkb2N1bWVudCAtLSBkaWdlc3QgKG9wZW5zb3VyY2UpCgovSW5mbyA2IDAgUgovUm9vdCA1IDAgUgovU2l6ZSA5Cj4+CnN0YXJ0eHJlZgoxNjk4CiUlRU9GCg==", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-create-raw-tcp-printer-request.json b/src/main/resources/examples/rest-create-raw-tcp-printer-request.json new file mode 100644 index 0000000..16f9b3c --- /dev/null +++ b/src/main/resources/examples/rest-create-raw-tcp-printer-request.json @@ -0,0 +1,8 @@ +{ + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "description": "Zebra Etikettendrucker direkt per TCP" +} diff --git a/src/main/resources/examples/rest-create-windows-spooler-printer-request.json b/src/main/resources/examples/rest-create-windows-spooler-printer-request.json new file mode 100644 index 0000000..f0564e7 --- /dev/null +++ b/src/main/resources/examples/rest-create-windows-spooler-printer-request.json @@ -0,0 +1,6 @@ +{ + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "description": "A4 Drucker ueber Windows Spooler" +} diff --git a/src/main/resources/examples/rest-diagnostics-system-response-example.json b/src/main/resources/examples/rest-diagnostics-system-response-example.json new file mode 100644 index 0000000..fa6e2dc --- /dev/null +++ b/src/main/resources/examples/rest-diagnostics-system-response-example.json @@ -0,0 +1,12 @@ +{ + "osName": "Windows Server 2022", + "windows": true, + "javaUser": "SYSTEM", + "likelyLocalSystem": true, + "spoolerPrinterCount": 0, + "recommendations": [ + "GlassFish läuft wahrscheinlich als LocalSystem. Benutzergebundene Drucker werden meistens nicht gefunden.", + "Für PDF/HTML/PDF_TEMPLATE: Drucker lokal/serverweit installieren oder maschinenweite Printserver-Verbindung verwenden.", + "Für ZPL/EPL: RAW_TCP-Alias verwenden und direkt an IP:9100 senden." + ] +} diff --git a/src/main/resources/examples/rest-docx-converters.curl.txt b/src/main/resources/examples/rest-docx-converters.curl.txt new file mode 100644 index 0000000..ec7d478 --- /dev/null +++ b/src/main/resources/examples/rest-docx-converters.curl.txt @@ -0,0 +1 @@ +curl http://localhost:8080/api/docx/converters diff --git a/src/main/resources/examples/rest-list-queue-filter-user.curl.txt b/src/main/resources/examples/rest-list-queue-filter-user.curl.txt new file mode 100644 index 0000000..4aff599 --- /dev/null +++ b/src/main/resources/examples/rest-list-queue-filter-user.curl.txt @@ -0,0 +1,2 @@ +curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/src/main/resources/examples/rest-list-queue-full-admin.curl.txt b/src/main/resources/examples/rest-list-queue-full-admin.curl.txt new file mode 100644 index 0000000..141d1a1 --- /dev/null +++ b/src/main/resources/examples/rest-list-queue-full-admin.curl.txt @@ -0,0 +1,2 @@ +curl "http://localhost:8080/api/queue?full=true&limit=500&includeRequest=false" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/src/main/resources/examples/rest-list-queue-own.curl.txt b/src/main/resources/examples/rest-list-queue-own.curl.txt new file mode 100644 index 0000000..5ae1fa2 --- /dev/null +++ b/src/main/resources/examples/rest-list-queue-own.curl.txt @@ -0,0 +1,2 @@ +curl http://localhost:8080/api/queue?limit=100 \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" diff --git a/src/main/resources/examples/rest-print-docx-lieferschein-request.json b/src/main/resources/examples/rest-print-docx-lieferschein-request.json new file mode 100644 index 0000000..dc7ee28 --- /dev/null +++ b/src/main/resources/examples/rest-print-docx-lieferschein-request.json @@ -0,0 +1,23 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-print-docx4j-fo-request.json b/src/main/resources/examples/rest-print-docx4j-fo-request.json new file mode 100644 index 0000000..24efdad --- /dev/null +++ b/src/main/resources/examples/rest-print-docx4j-fo-request.json @@ -0,0 +1,16 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/src/main/resources/examples/rest-print-html-table-request.json b/src/main/resources/examples/rest-print-html-table-request.json new file mode 100644 index 0000000..ed9db73 --- /dev/null +++ b/src/main/resources/examples/rest-print-html-table-request.json @@ -0,0 +1,37 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "copies": 1, + "pdfDpi": 300, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtung", + "quantity": "20", + "serialNumber": "SNR000003" + } + ] + } +} diff --git a/src/main/resources/examples/rest-print-pdf-simple-lieferschein-request.json b/src/main/resources/examples/rest-print-pdf-simple-lieferschein-request.json new file mode 100644 index 0000000..f807b0e --- /dev/null +++ b/src/main/resources/examples/rest-print-pdf-simple-lieferschein-request.json @@ -0,0 +1,21 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_simple", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + } +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-print-pdf-template-request.json b/src/main/resources/examples/rest-print-pdf-template-request.json new file mode 100644 index 0000000..95c9cc0 --- /dev/null +++ b/src/main/resources/examples/rest-print-pdf-template-request.json @@ -0,0 +1,24 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "quantity": "120", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "10", + "material": "A123456", + "description": "Baugruppe rechts", + "quantity": "120" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-print-pdf-template-table-request.json b/src/main/resources/examples/rest-print-pdf-template-table-request.json new file mode 100644 index 0000000..712c55c --- /dev/null +++ b/src/main/resources/examples/rest-print-pdf-template-table-request.json @@ -0,0 +1,52 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_table", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtungssatz EPDM", + "quantity": "20", + "serialNumber": "SNR000003" + }, + { + "pos": "4", + "partNumber": "D444222", + "description": "Sensorleitung vorkonfektioniert", + "quantity": "7", + "serialNumber": "SNR000004" + }, + { + "pos": "5", + "partNumber": "E777888", + "description": "Befestigungsclip", + "quantity": "30", + "serialNumber": "SNR000005" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-print-raw-tcp-zpl-request.json b/src/main/resources/examples/rest-print-raw-tcp-zpl-request.json new file mode 100644 index 0000000..7dac6e6 --- /dev/null +++ b/src/main/resources/examples/rest-print-raw-tcp-zpl-request.json @@ -0,0 +1,12 @@ +{ + "printerAlias": "LABEL_LINE_01", + "templateName": "serial_label_zpl", + "renderMode": "RAW", + "copies": 1, + "encoding": "UTF-8", + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} diff --git a/src/main/resources/examples/rest-queue-response-example.json b/src/main/resources/examples/rest-queue-response-example.json new file mode 100644 index 0000000..0261a36 --- /dev/null +++ b/src/main/resources/examples/rest-queue-response-example.json @@ -0,0 +1,25 @@ +{ + "total": 1, + "returned": 1, + "filteredToCurrentUser": true, + "currentUser": "line01", + "jobs": [ + { + "jobId": "31b5a0e2-6c99-4098-9c6c-8aa80d7e2231", + "status": "SUBMITTED", + "createdAt": "2026-06-09T07:12:15Z", + "updatedAt": "2026-06-09T07:12:16Z", + "userName": "line01", + "displayName": "Linie 01", + "printerAlias": "LABEL_LINE_01", + "systemName": "192.168.10.50:9100", + "templateName": "serial_label_zpl", + "documentName": "Serienetikett ZPL", + "renderMode": "RAW", + "contentType": "text/plain", + "copies": 1, + "renderedBytes": 164, + "message": "Print job submitted" + } + ] +} diff --git a/src/main/resources/examples/rest-reprint-request.json b/src/main/resources/examples/rest-reprint-request.json new file mode 100644 index 0000000..3a8ca6a --- /dev/null +++ b/src/main/resources/examples/rest-reprint-request.json @@ -0,0 +1,7 @@ +{ + "copies": 1, + "printerAlias": "LABEL_LINE_01", + "dataOverride": { + "reprintReason": "Etikett beschädigt" + } +} diff --git a/src/main/resources/examples/rest-reprint.curl.txt b/src/main/resources/examples/rest-reprint.curl.txt new file mode 100644 index 0000000..22e9bdc --- /dev/null +++ b/src/main/resources/examples/rest-reprint.curl.txt @@ -0,0 +1,4 @@ +curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @rest-reprint-request.json diff --git a/src/main/resources/examples/rest-update-auth-config-enabled-request.json b/src/main/resources/examples/rest-update-auth-config-enabled-request.json new file mode 100644 index 0000000..6e96f00 --- /dev/null +++ b/src/main/resources/examples/rest-update-auth-config-enabled-request.json @@ -0,0 +1,8 @@ +{ + "enabled": true, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": true, + "headerName": "X-Printservice-Token" +} diff --git a/src/main/resources/examples/rest-validate-docx-lieferschein-request.json b/src/main/resources/examples/rest-validate-docx-lieferschein-request.json new file mode 100644 index 0000000..312141a --- /dev/null +++ b/src/main/resources/examples/rest-validate-docx-lieferschein-request.json @@ -0,0 +1,20 @@ +{ + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/src/main/resources/examples/rest-validate-docx4j-fo-request.json b/src/main/resources/examples/rest-validate-docx4j-fo-request.json new file mode 100644 index 0000000..a7bbf39 --- /dev/null +++ b/src/main/resources/examples/rest-validate-docx4j-fo-request.json @@ -0,0 +1,15 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/src/main/resources/examples/rest-validate-docx4j-fo.curl.txt b/src/main/resources/examples/rest-validate-docx4j-fo.curl.txt new file mode 100644 index 0000000..9d422d1 --- /dev/null +++ b/src/main/resources/examples/rest-validate-docx4j-fo.curl.txt @@ -0,0 +1,4 @@ +curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json diff --git a/src/main/resources/examples/rest-validate-html-pdf-request.json b/src/main/resources/examples/rest-validate-html-pdf-request.json new file mode 100644 index 0000000..690675b --- /dev/null +++ b/src/main/resources/examples/rest-validate-html-pdf-request.json @@ -0,0 +1,20 @@ +{ + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + } + ] + } +} diff --git a/src/main/resources/examples/serial_label.zpl.tpl b/src/main/resources/examples/serial_label.zpl.tpl new file mode 100644 index 0000000..8a38351 --- /dev/null +++ b/src/main/resources/examples/serial_label.zpl.tpl @@ -0,0 +1,7 @@ +^XA +^CF0,35 +^FO40,40^FDSerial: {{serialNumber}}^FS +^FO40,90^FDPart: {{partNumber}}^FS +^FO40,140^FDOrder: {{workorderNumber}}^FS +^FO40,200^BCN,100,Y,N,N^FD{{serialNumber}}^FS +^XZ diff --git a/src/main/resources/examples/serial_label_zpl_barcode_qr.zpl.tpl b/src/main/resources/examples/serial_label_zpl_barcode_qr.zpl.tpl new file mode 100644 index 0000000..dfa28ea --- /dev/null +++ b/src/main/resources/examples/serial_label_zpl_barcode_qr.zpl.tpl @@ -0,0 +1,7 @@ +^XA +^CF0,35 +^FO40,40^FDSerial: {{serialNumber}}^FS +^FO40,90^FDPart: {{partNumber}}^FS +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +^XZ diff --git a/src/main/resources/examples/serienbegleitschein.docx b/src/main/resources/examples/serienbegleitschein.docx new file mode 100644 index 0000000000000000000000000000000000000000..cb30cd413b57c2028d07220cad086296c46eacd1 GIT binary patch literal 1352 zcmWIWW@Zs#U|`^2uq`+dbG@?V)kh$22O|T6Fp!RR&d)1J%`1rysVqn>j@7Hk&8eMm z*6*-^K+F4DuG81G3QsXAPFccU*LPr{&4E+*RKotMuaCa9J^ixNM1iLnXKRdKXI^K2 ze?-psri9hbRnnRUFEVl@tbgvST=#Ct0;Yov-Hg_iE|Xr@UCis_^fZuJF*#WCWt`?E z;i?5zYCLOr468N%oLTI(V7tMhU753@mnLgSc!fUWxvAfhAz#=qSNqY+1E+pY>*-rk zVNv~jm!Ff@xh#z}t7{GRcdc4KY1YZf?P{|#PO`0BH}%Y;uYK}grmCO1wxFUpChoxI zz}h1@Q#z}jORoFx|LgHB3!bpYt@AGj^+|PBRKI`K{peuZ`}i%dOltmf2B3tHf^^%f zO~8=R1BMVckd7}(%_-K`1ChPwck?wFh_F4FyFBBZ9xHn?PwUYc8>DI)mf22mtMZK2 z-?LX%=7@#GyxZlU%@GcS>`t+LXBHM63qez#W z<&QlZmHzE5)8bmrrMI}!xGvx3bj`+zYrnH*NUaqT>#2R#c&hZ`3a!NV`TgO7pLsY# zJHoU*Ziw+jFIoK4O0VRecfgZK*3?I(hq4ywJ-hS7)FbiOF6PwYrEZ!hoYwq^O1`-8 z+(C(Ghix^Fek)F26sRLxIWP2V$;Q%m47;vKm9$+_O<>k)Ue($b)9H40r?*9S^V@%l ztKz&4+_?R==jfu^cd2YU?$2Ld*nMTqg3>R33b7vVyqy9qH@&S-b!VuUc_?o>=N9kA zAMc+2d#F6a}LOb$7vSo>pmk>NwnD}y<_()YZ+uN@SbD95Y4tp|7rTr8yw84@ z_v2x~oN|jZUx4Ay$RxsyyTAZO0vI#^V+CvRfo=eLeu8LcU}#`e0vdsoyU;bFr&ff< pzd()n(k{A5=&1-{(t2RJ0-J=KrUJZK*+5EIfRGtzl|BoI2LKU58AkvB literal 0 HcmV?d00001 diff --git a/src/main/resources/examples/warenanhaenger.html.tpl b/src/main/resources/examples/warenanhaenger.html.tpl new file mode 100644 index 0000000..34aca70 --- /dev/null +++ b/src/main/resources/examples/warenanhaenger.html.tpl @@ -0,0 +1,12 @@ + + +Warenanhänger + +

Warenanhänger

+

Serial: {{text:serialNumber}}

+

Part: {{text:partNumber}}

+

Order: {{text:workorderNumber}}

+
Barcode
+
QR
+ + diff --git a/src/main/resources/examples/warenanhaenger_pdf.html.tpl b/src/main/resources/examples/warenanhaenger_pdf.html.tpl new file mode 100644 index 0000000..337fb3d --- /dev/null +++ b/src/main/resources/examples/warenanhaenger_pdf.html.tpl @@ -0,0 +1,23 @@ + + + + + + + +
+

Warenanhänger

+

Serial: {{text:serialNumber}}

+

Part: {{text:partNumber}}

+

Order: {{text:workorderNumber}}

+ Barcode +
+ QR +
+ + diff --git a/src/main/resources/web/index.html b/src/main/resources/web/index.html new file mode 100644 index 0000000..5a25e5a --- /dev/null +++ b/src/main/resources/web/index.html @@ -0,0 +1,399 @@ + + + + + + Printservice Standalone + + + +
+

Printservice Standalone

+
Eigenständige Java-25-Applikation · REST Druckservice · Drucker-Aliase · HTML→PDF mit Tabellen · PDF-Koordinatenvorlagen · DOCX-Vorlagen · ZPL/EPL-Rohdruck · Barcode · QR-Code · Ordnerbasierte Vorlagenspeicherung
+
+
+

Status

Bereit.
+
+

Authentifizierung, Benutzer und Token

+
+ Authentifizierung ist optional. Wenn sie deaktiviert ist, kann jeder, der den REST-Endpunkt erreicht, drucken. Wenn sie aktiviert wird, kann der Benutzer im Webfrontend angelegt werden und erhält ein Token. Das Token wird als Header X-Printservice-Token oder Authorization: Bearer ... gesendet. +
+
+
+

Token im Browser nutzen

+ + + +
Noch nicht geladen.
+
+
+

Auth einschalten / ausschalten

+
+
+
+
+ + +
Empfehlung: zuerst Admin-Benutzer anlegen, Token speichern, dann Auth aktivieren.
+
+
+

Benutzer / Token anlegen

+ + + + + + +
+
+

Benutzerliste

+
UserNameTokenScopesAktiv
+

Neues Token - nur einmal sichtbar

+
Noch kein Token erzeugt.
+
+ +
+

Speicherstruktur

+
+ Vorlagen werden produktionsnah als Ordner gespeichert: templates/<templateName>/template.json, document.*, fields.json, sample-data.json und print-request.json. Dadurch bleiben PDF/DOCX/HTML-Dateien auffindbar, sicherbar und separat versionierbar. +
+ +
Noch nicht geladen.
+
+ +
+

1. Windows-/Server-Drucker-Assistent

+
+ Der Assistent erkennt, ob der Service unter Windows und wahrscheinlich unter LocalSystem laeuft. Danach zeigt er die passenden Wege: gefundene Spooler-Drucker nutzen, lokale TCP/IP-Drucker serverweit installieren, Printserver-Drucker maschinenweit verbinden oder ZPL/EPL direkt per RAW_TCP drucken. +
+ + +
Noch keine Diagnose geladen.
+
+
+

A. Gefundene Windows-Spooler-/CUPS-Drucker

+
Geeignet fuer PDF, HTML->PDF, PDF_TEMPLATE und auch RAW-Druck ueber installierte Treiber.
+
SystemnameStandardAktion
+
+
+

B. RAW_TCP fuer ZPL/EPL

+
Schnellster Weg fuer Etikettendrucker. Umgeht den Windows-Spooler und funktioniert auch bei LocalSystem.
+ + + + +
+
+

C. Windows-Kommandos

+
Diese Hinweise werden vom Server geliefert und passen zum Dienstkontext.
+
Noch nicht geladen.
+
Noch nicht geladen.
+
+
+
+ +
+

2. Eindeutigen Druckernamen zuweisen

+
+
+
+
+
+
+ + +
AliasTypZielAktiv
+
+ +
+

3. Dokumentenvorlage einchecken oder online erstellen

+
+ Schnellster Druckpfad: ZPL/EPL direkt als Rohdaten oder PDF_TEMPLATE für fertige PDF-Vorlagen mit Koordinatenfeldern. HTML→PDF bleibt für Webvorlagen nutzbar und unterstützt Tabellen mit JSON-Wiederholungsblöcken wie {{#each:items}}. + PDF-Koordinatenfelder nutzen x/y/width/height in pt oder mm; Text, Barcode und QR werden direkt ins PDF gestempelt. +
+
+
+ + + + + + + + + +
+
+ + + +
+
+
+
+
+
+
+ +
+
+ + + + + + + + +
+
+ +
+ + +
Der Designer ist für HTML-Vorlagen gedacht. DOCX bitte in Word oder LibreOffice bearbeiten und erneut einchecken.
+
+
+

Eingecheckte Vorlagen

+
NameDokumentTypSpeicherGrößeGeändert
+

Barcode-Arten

Noch nicht geladen.
+
+ +
+

4. JSON übergeben, Vorschau erzeugen und drucken

+
+
+ + +
+
+
+
+
+ + + + + + + + + +
+
+

Antwort / gerenderter Inhalt

Noch kein Druckjob.
+

HTML-Vorschau

+
+
+
+ +
+

5. Druckwarteschlange / Druckhistorie und Redruck

+
+ Der Printservice speichert jeden gesendeten Druckjob unter queue/print-jobs.json. Damit kann ein Benutzer seine eigenen Jobs erneut drucken. Ein Admin kann mit full=true die volle Liste abrufen und filtern. +
+
+
+
+
+
+
+
+
+

+
+ +
ZeitStatusUserDruckerVorlageKopienJob-ID
+

Job-Details

Noch kein Job ausgewählt.
+
+ +
+ + +