validate([ 'pdf' => 'required|file|mimetypes:application/pdf|max:20480', 'signatur' => 'required|file|mimetypes:image/png,image/jpeg,image/webp|max:8192', 'page' => 'required|integer|min:1', 'xFrac' => 'required|numeric|between:0,1', 'yFrac' => 'required|numeric|between:0,1', 'widthFrac' => 'required|numeric|between:0,1', 'stempel' => 'nullable|file|mimetypes:image/png,image/jpeg,image/webp|max:8192', 'stempelXFrac' => 'nullable|numeric|between:0,1', 'stempelYFrac' => 'nullable|numeric|between:0,1', 'stempelWidthFrac' => 'nullable|numeric|between:0,1', ]); try { $signRequest = SignDocumentRequest::fromArray( $request->all(), $request->file('pdf')->getRealPath(), $request->file('signatur')->getRealPath(), $request->file('stempel')?->getRealPath(), ); $result = (new SignDocumentCommand($signRequest))->execute(); } catch (RuntimeException $e) { return response()->json(['message' => $e->getMessage()], 422); } return response($result->pdfContent, 200, [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename="' . $result->filename . '"', ]); } }