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
All checks were successful
Build & Deploy / deploy (push) Successful in 2m3s
This commit is contained in:
12
app.py
12
app.py
@@ -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")
|
@app.post("/preview")
|
||||||
async def preview(
|
async def preview(
|
||||||
pdf: UploadFile = File(...),
|
pdf: UploadFile = File(...),
|
||||||
|
|||||||
7
core.py
7
core.py
@@ -234,6 +234,7 @@ def place_all(pdf_bytes: bytes, svgs: dict, jobs: List[SignatureJob]):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return [], [f"PDF konnte nicht geöffnet werden: {e}"]
|
return [], [f"PDF konnte nicht geöffnet werden: {e}"]
|
||||||
|
|
||||||
|
total_pages = doc.page_count
|
||||||
try:
|
try:
|
||||||
for job in jobs:
|
for job in jobs:
|
||||||
# 1. Ist die zugeordnete SVG hochgeladen?
|
# 1. Ist die zugeordnete SVG hochgeladen?
|
||||||
@@ -266,11 +267,13 @@ def place_all(pdf_bytes: bytes, svgs: dict, jobs: List[SignatureJob]):
|
|||||||
if errors:
|
if errors:
|
||||||
return [], 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] = []
|
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
|
# Signaturen einer Seite links→rechts sortieren: der Plotter schreibt in
|
||||||
# dieser Richtung, also linke Signatur immer vor der rechten abarbeiten.
|
# 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])
|
a4 = wrap_a4([group for _, _, group in items])
|
||||||
pages.append(PageRender(
|
pages.append(PageRender(
|
||||||
page_index=page_index,
|
page_index=page_index,
|
||||||
|
|||||||
Reference in New Issue
Block a user