Document signing

This commit is contained in:
2026-07-21 14:35:34 +02:00
parent 56b603aba0
commit 6e726ef34d
18 changed files with 1239 additions and 1 deletions
@@ -0,0 +1,33 @@
<?php
namespace App\Domains\Unterschrift\Controllers;
use App\Domains\Unterschrift\Actions\RenderPreview\RenderPreviewCommand;
use App\Domains\Unterschrift\Actions\RenderPreview\RenderPreviewRequest;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use RuntimeException;
class PreviewPageController
{
public function __invoke(Request $request): JsonResponse
{
$request->validate([
'pdf' => 'required|file|mimetypes:application/pdf|max:20480',
]);
try {
$command = new RenderPreviewCommand(
new RenderPreviewRequest($request->file('pdf')->getRealPath())
);
$response = $command->execute();
} catch (RuntimeException $e) {
return response()->json(['message' => $e->getMessage()], 422);
}
return response()->json([
'pages' => $response->pages,
'pageCount' => $response->pageCount,
]);
}
}
@@ -0,0 +1,47 @@
<?php
namespace App\Domains\Unterschrift\Controllers;
use App\Domains\Unterschrift\Actions\SignDocument\SignDocumentCommand;
use App\Domains\Unterschrift\Actions\SignDocument\SignDocumentRequest;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use RuntimeException;
class SignController
{
public function __invoke(Request $request): Response|JsonResponse
{
$request->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 . '"',
]);
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Domains\Unterschrift\Controllers;
use App\Providers\InertiaProvider;
use Inertia\Response;
class UnterschriftController
{
public function __invoke(): Response
{
return (new InertiaProvider('Unterschrift/Unterschrift', []))->render();
}
}