render: eine A4-SVG je PDF-Seite (auch leere) + /render-json fuer die Auftrags-Anlage
All checks were successful
Build & Deploy / deploy (push) Successful in 2m3s

This commit is contained in:
Lucas Orth
2026-08-27 11:05:44 +02:00
parent 1fe6160b21
commit aca2f67f97
2 changed files with 17 additions and 2 deletions

12
app.py
View File

@@ -123,6 +123,18 @@ async def render(
)
@app.post("/render-json")
async def render_json(
pdf: UploadFile = File(...),
svgs: List[UploadFile] = File(default=[]),
job: str = Form(...),
):
"""Wie /render, aber als JSON: eine A4-SVG je PDF-Seite (leer wo kein Marker).
Für die Auftrags-Anlage, die die Seiten direkt in den Ausgabeordner schreibt."""
_, pages = await _prepare(pdf, svgs, job)
return {"pages": [{"filename": p.filename, "svg": p.a4_svg} for p in pages]}
@app.post("/preview")
async def preview(
pdf: UploadFile = File(...),

View File

@@ -234,6 +234,7 @@ def place_all(pdf_bytes: bytes, svgs: dict, jobs: List[SignatureJob]):
except Exception as e:
return [], [f"PDF konnte nicht geöffnet werden: {e}"]
total_pages = doc.page_count
try:
for job in jobs:
# 1. Ist die zugeordnete SVG hochgeladen?
@@ -266,11 +267,13 @@ def place_all(pdf_bytes: bytes, svgs: dict, jobs: List[SignatureJob]):
if errors:
return [], errors
# Eine A4-SVG JE PDF-Seite – auch für Seiten OHNE Marker (leere SVG), damit der
# Plotter jede Seite einzieht und die Reihenfolge zum Dokument passt.
pages: List[PageRender] = []
for page_index in sorted(page_items):
for page_index in range(total_pages):
# Signaturen einer Seite links→rechts sortieren: der Plotter schreibt in
# dieser Richtung, also linke Signatur immer vor der rechten abarbeiten.
items = sorted(page_items[page_index], key=lambda t: t[0])
items = sorted(page_items.get(page_index, []), key=lambda t: t[0])
a4 = wrap_a4([group for _, _, group in items])
pages.append(PageRender(
page_index=page_index,