diff --git a/composer.json b/composer.json
index 472a3267a2254bfd7634fc22c4a7f34910bba519..9f08a564f893333886b2e0864e356c45330a80ab 100755
--- a/composer.json
+++ b/composer.json
@@ -36,6 +36,7 @@
         "php-http/curl-client": "^1.7",
         "m4tthumphrey/php-gitlab-api": "8",
         "jumbojett/openid-connect-php": "^0.3.0",
-        "zf1/zend-search-lucene": "~1.12"
+        "zf1/zend-search-lucene": "~1.12",
+        "setasign/fpdi-tcpdf": "2.0.0"
     }
 }
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index ddb2fff4fc4832f7c65cb96ec45f7ad8d43f37ae..67ba464ceabd1775c455ff59ca85395c6fef8b98 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -20,6 +20,8 @@ use Docserver\models\DocserverModel;
 use Group\controllers\GroupController;
 use Note\models\NoteModel;
 use Group\models\ServiceModel;
+use setasign\Fpdi\TcpdfFpdi;
+use SrcCore\models\CoreConfigModel;
 use Status\models\StatusModel;
 use SrcCore\models\ValidatorModel;
 use History\controllers\HistoryController;
@@ -180,7 +182,7 @@ class ResController
         }
 
         $document = ResModel::getById(['select' => ['docserver_id', 'path', 'filename'], 'resId' => $aArgs['resId']]);
-        $extDocument = ResModel::getExtById(['select' => ['category_id'], 'resId' => $aArgs['resId']]);
+        $extDocument = ResModel::getExtById(['select' => ['category_id', 'alt_identifier'], 'resId' => $aArgs['resId']]);
         if (empty($document) || empty($extDocument)) {
             return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']);
         }
@@ -213,7 +215,78 @@ class ResController
         }
 
         $pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $document['path']) . $document['filename'];
-        $fileContent = file_get_contents($pathToDocument);
+
+        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'apps/maarch_entreprise/xml/features.xml']);
+        if ($loadedXml) {
+            $watermark = (array)$loadedXml->FEATURES->watermark;
+            if ($watermark['enabled'] == 'true') {
+
+                $text = "watermark by {$GLOBALS['userId']}";
+                if (!empty($watermark['text'])) {
+                    $text = $watermark['text'];
+                    preg_match_all('/\[(.*?)\]/i', $watermark['text'], $matches);
+
+                    foreach ($matches[1] as $value) {
+                        $tmp = '';
+                        if ($value == 'date_now') {
+                            $tmp = date('d-m-Y');
+                        } elseif ($value == 'hour_now') {
+                            $tmp = date('H:i');
+                        } elseif($value == 'alt_identifier'){
+                            $tmp = $extDocument['alt_identifier'];
+                        } else {
+                            $backFromView = ResModel::getOnView(['select' => $value, 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']]]);
+                            if (!empty($backFromView[0][$value])) {
+                                $tmp = $backFromView[0][$value];
+                            }
+                        }
+                        $text = str_replace("[{$value}]", $tmp, $text);
+                    }
+                }
+
+                $color = ['192', '192', '192']; //RGB
+                if (!empty($watermark['text_color'])) {
+                    $rawColor = explode(',', $watermark['text_color']);
+                    $color = count($rawColor) == 3 ? $rawColor : $color;
+                }
+
+                $font = ['helvetica', '10']; //Familly Size
+                if (!empty($watermark['font'])) {
+                    $rawFont = explode(',', $watermark['font']);
+                    $font = count($rawFont) == 2 ? $rawFont : $font;
+                }
+
+                $position = [30, 35, 0, 0.5]; //X Y Angle Opacity
+                if (!empty($watermark['position'])) {
+                    $rawPosition = explode(',', $watermark['position']);
+                    $position = count($rawPosition) == 4 ? $rawPosition : $position;
+                }
+
+                try {
+                    $pdf = new TcpdfFpdi('P', 'pt');
+                    $nbPages = $pdf->setSourceFile($pathToDocument);
+                    for ($i = 1; $i <= $nbPages; $i++) {
+                        $page = $pdf->importPage($i);
+                        $size = $pdf->getTemplateSize($page);
+                        $pdf->AddPage($size['orientation'], $size);
+                        $pdf->useImportedPage($page);
+                        $pdf->SetFont($font[0], '', $font[1]);
+                        $pdf->SetTextColor($color[0], $color[1], $color[2]);
+                        $pdf->SetAlpha($position[3]);
+                        $pdf->Rotate($position[2]);
+                        $pdf->Text($position[0], $position[1], $text);
+                    }
+                    $fileContent = $pdf->Output('', 'S');
+                } catch (\Exception $e) {
+                    $fileContent = null;
+                }
+            }
+        }
+
+
+        if (empty($fileContent)) {
+            $fileContent = file_get_contents($pathToDocument);
+        }
         if ($fileContent === false) {
             return $response->withStatus(404)->withJson(['errors' => 'Document not found on docserver']);
         }