diff --git a/src/app/resource/controllers/ExportController.php b/src/app/resource/controllers/ExportController.php
index 597870b5763cfbd9b74db06c54a661b6c1b56be7..2ad02206b37793ac472932db83d86c6cc9195a89 100644
--- a/src/app/resource/controllers/ExportController.php
+++ b/src/app/resource/controllers/ExportController.php
@@ -16,15 +16,20 @@ namespace Resource\controllers;
 
 use Attachment\models\AttachmentModel;
 use Basket\models\BasketModel;
+use Contact\models\ContactModel;
 use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use Resource\models\ExportTemplateModel;
 use Resource\models\ResModel;
+use Resource\models\ResourceContactModel;
 use Resource\models\ResourceListModel;
 use Respect\Validation\Validator;
+use setasign\Fpdi\Tcpdf\Fpdi;
 use Slim\Http\Request;
 use Slim\Http\Response;
+use SrcCore\controllers\AutoCompleteController;
 use SrcCore\controllers\PreparedClauseController;
+use SrcCore\models\DatabaseModel;
 use SrcCore\models\TextFormatModel;
 use SrcCore\models\ValidatorModel;
 use Tag\models\TagModel;
@@ -175,12 +180,20 @@ class ExportController
             'orderBy'   => [$order]
         ]);
 
-        $contentType = '';
         if ($body['format'] == 'csv') {
             $file = ExportController::getCsv(['delimiter' => $body['delimiter'], 'data' => $body['data'], 'resources' => $resources]);
             $response->write(stream_get_contents($file));
             $response = $response->withAddedHeader('Content-Disposition', 'attachment; filename=export_maarch.csv');
             $contentType = 'application/vnd.ms-excel';
+        } else {
+            $pdf = ExportController::getPdf(['data' => $body['data'], 'resources' => $resources]);
+
+            $fileContent    = $pdf->Output('', 'S');
+            $finfo          = new \finfo(FILEINFO_MIME_TYPE);
+            $contentType    = $finfo->buffer($fileContent);
+
+            $response->write($fileContent);
+            $response = $response->withAddedHeader('Content-Disposition', "inline; filename=maarch.pdf");
         }
 
         return $response->withHeader('Content-Type', $contentType);
@@ -228,12 +241,12 @@ class ExportController
                         $csvContent[] = $resource['entwo.short_label'];
                     } elseif ($value['value'] == 'getDestinationEntityType') {
                         $csvContent[] = $resource['enthree.entity_type'];
-                    } elseif ($value['value'] == 'getSender') {
-                        //TODO
-                        $csvContent[] = '';
+                    } elseif ($value['value'] == 'getSenders') {
+                        $senders = ExportController::getSenders(['resId' => $resource['res_id']]);
+                        $content[] = implode("\n\n", $senders);
                     } elseif ($value['value'] == 'getRecipient') {
-                        //TODO
-                        $csvContent[] = '';
+                        $recipients = ExportController::getRecipients(['resId' => $resource['res_id']]);
+                        $content[] = implode("\n\n", $recipients);
                     } elseif ($value['value'] == 'getTypist') {
                         $csvContent[] = UserModel::getLabelledUserById(['login' => $resource['typist']]);
                     } elseif ($value['value'] == 'getAssignee') {
@@ -267,74 +280,98 @@ class ExportController
         ValidatorModel::notEmpty($aArgs, ['data', 'resources']);
         ValidatorModel::arrayType($aArgs, ['data', 'resources']);
 
-        $file = fopen('php://memory', 'w');
-        $delimiter = ($aArgs['delimiter'] == 'TAB' ? "\t" : $aArgs['delimiter']);
+        $columnsNumber = count($aArgs['data']);
+        $orientation = 'P';
+        if ($columnsNumber > 5) {
+            $orientation = 'L';
+        }
 
-        $csvHead = [];
+        $pdf = new Fpdi($orientation, 'pt');
+        $pdf->setPrintHeader(false);
+
+        $pdf->AddPage();
+        $dimensions = $pdf->getPageDimensions();
+        $widthNoMargins = $dimensions['w'] - $dimensions['rm'] - $dimensions['lm'];
+        $bottomHeight = $dimensions['h'] - $dimensions['bm'];
+
+        $labels = [];
         foreach ($aArgs['data'] as $value) {
-            $csvHead[] = $value['label'];
+            $labels[] = $value['label'];
         }
 
-        fputcsv($file, $csvHead, $delimiter);
+        $pdf->SetFont('', 'B', 12);
+        $labelHeight = ExportController::getMaximumHeight($pdf, ['data' => $labels, 'width' => $widthNoMargins / $columnsNumber]);
+        foreach ($aArgs['data'] as $value) {
+            $pdf->MultiCell($widthNoMargins / $columnsNumber, $labelHeight, $value['label'], 1, 'L', false, 0);
+        }
+
+        $pdf->SetY($pdf->GetY() + $labelHeight);
+        $pdf->SetFont('', '', 10);
 
         foreach ($aArgs['resources'] as $resource) {
-            $csvContent = [];
+            $content = [];
             foreach ($aArgs['data'] as $value) {
                 if (empty($value['value'])) {
-                    $csvContent[] = '';
                     continue;
                 }
                 if ($value['isFunction']) {
                     if ($value['value'] == 'getStatus') {
-                        $csvContent[] = $resource['status.label_status'];
+                        $content[] = $resource['status.label_status'];
                     } elseif ($value['value'] == 'getPriority') {
-                        $csvContent[] = $resource['priorities.label'];
+                        $content[] = $resource['priorities.label'];
                     } elseif ($value['value'] == 'getCopies') {
-                        $csvContent[] = ExportController::getCopies(['resId' => $resource['res_id']]);
+                        $content[] = ExportController::getCopies(['resId' => $resource['res_id']]);
                     } elseif ($value['value'] == 'getDetailLink') {
-                        $csvContent[] = str_replace('rest/', "apps/maarch_entreprise/index.php?page=details&dir=indexing_searching&id={$resource['res_id']}", \Url::coreurl());
+                        $content[] = str_replace('rest/', "apps/maarch_entreprise/index.php?page=details&dir=indexing_searching&id={$resource['res_id']}", \Url::coreurl());
                     } elseif ($value['value'] == 'getParentFolder') {
-                        $csvContent[] = $resource['folders.folder_name'];
+                        $content[] = $resource['folders.folder_name'];
                     } elseif ($value['value'] == 'getCategory') {
-                        $csvContent[] = ResModel::getCategoryLabel(['categoryId' => $resource['category_id']]);
+                        $content[] = ResModel::getCategoryLabel(['categoryId' => $resource['category_id']]);
                     } elseif ($value['value'] == 'getInitiatorEntity') {
-                        $csvContent[] = $resource['enone.short_label'];
+                        $content[] = $resource['enone.short_label'];
                     } elseif ($value['value'] == 'getDestinationEntity') {
-                        $csvContent[] = $resource['entwo.short_label'];
+                        $content[] = $resource['entwo.short_label'];
                     } elseif ($value['value'] == 'getDestinationEntityType') {
-                        $csvContent[] = $resource['enthree.entity_type'];
-                    } elseif ($value['value'] == 'getSender') {
-                        //TODO
-                        $csvContent[] = '';
-                    } elseif ($value['value'] == 'getRecipient') {
-                        //TODO
-                        $csvContent[] = '';
+                        $content[] = $resource['enthree.entity_type'];
+                    } elseif ($value['value'] == 'getSenders') {
+                        $senders = ExportController::getSenders(['resId' => $resource['res_id']]);
+                        $content[] = implode("\n\n", $senders);
+                    } elseif ($value['value'] == 'getRecipients') {
+                        $recipients = ExportController::getRecipients(['resId' => $resource['res_id']]);
+                        $content[] = implode("\n\n", $recipients);
                     } elseif ($value['value'] == 'getTypist') {
-                        $csvContent[] = UserModel::getLabelledUserById(['login' => $resource['typist']]);
+                        $content[] = UserModel::getLabelledUserById(['login' => $resource['typist']]);
                     } elseif ($value['value'] == 'getAssignee') {
-                        $csvContent[] = UserModel::getLabelledUserById(['login' => $resource['dest_user']]);
+                        $content[] = UserModel::getLabelledUserById(['login' => $resource['dest_user']]);
                     } elseif ($value['value'] == 'getTags') {
-                        $csvContent[] = ExportController::getTags(['resId' => $resource['res_id']]);
+                        $content[] = ExportController::getTags(['resId' => $resource['res_id']]);
                     } elseif ($value['value'] == 'getSignatories') {
-                        $csvContent[] = ExportController::getSignatories(['resId' => $resource['res_id']]);
+                        $content[] = ExportController::getSignatories(['resId' => $resource['res_id']]);
                     } elseif ($value['value'] == 'getSignatureDates') {
-                        $csvContent[] = ExportController::getSignatureDates(['resId' => $resource['res_id']]);
+                        $content[] = ExportController::getSignatureDates(['resId' => $resource['res_id']]);
                     }
                 } else {
                     $allDates = ['doc_date', 'departure_date', 'admission_date', 'process_limit_date', 'opinion_limit_date', 'closing_date', 'sve_start_date'];
                     if (in_array($value['value'], $allDates)) {
-                        $csvContent[] = TextFormatModel::formatDate($resource[$value['value']]);
+                        $content[] = TextFormatModel::formatDate($resource[$value['value']]);
                     } else {
-                        $csvContent[] = $resource[$value['value']];
+                        $content[] = $resource[$value['value']];
                     }
                 }
             }
-            fputcsv($file, $csvContent, $delimiter);
+            if (!empty($contentHeight)) {
+                $pdf->SetY($pdf->GetY() + $contentHeight);
+            }
+            $contentHeight = ExportController::getMaximumHeight($pdf, ['data' => $content, 'width' => $widthNoMargins / $columnsNumber]);
+            if (($pdf->GetY() + $contentHeight) > $bottomHeight) {
+                $pdf->AddPage();
+            }
+            foreach ($content as $value) {
+                $pdf->MultiCell($widthNoMargins / $columnsNumber, $contentHeight, $value, 1, 'L', false, 0);
+            }
         }
 
-        rewind($file);
-
-        return $file;
+        return $pdf;
     }
 
     private static function getCopies(array $args)
@@ -434,4 +471,141 @@ class ExportController
 
         return $dates;
     }
+
+    private static function getSenders(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['resId']);
+        ValidatorModel::intVal($args, ['resId']);
+
+        $ext = ResModel::getExtById(['select' => ['category_id', 'address_id', 'exp_user_id', 'dest_user_id', 'is_multicontacts'], 'resId' => $args['resId']]);
+
+        $senders = [];
+        if (!empty($ext)) {
+            if ($ext['category_id'] == 'outgoing') {
+                $resourcesContacts = ResourceContactModel::getFormattedByResId(['resId' => $args['resId']]);
+                foreach ($resourcesContacts as $resourcesContact) {
+                    $senders[] = $resourcesContact['format'];
+                }
+            } else {
+                $rawContacts = [];
+                if ($ext['is_multicontacts'] == 'Y') {
+                    $multiContacts = DatabaseModel::select([
+                        'select'    => ['contact_id', 'address_id'],
+                        'table'     => ['contacts_res'],
+                        'where'     => ['res_id = ?', 'mode = ?'],
+                        'data'      => [$args['resId'], 'multi']
+                    ]);
+                    foreach ($multiContacts as $multiContact) {
+                        $rawContacts[] = [
+                            'login'         => $multiContact['contact_id'],
+                            'address_id'    => $multiContact['address_id'],
+                        ];
+                    }
+                } else {
+                    $rawContacts[] = [
+                        'login'         => $ext['dest_user_id'],
+                        'address_id'    => $ext['address_id'],
+                    ];
+                }
+                foreach ($rawContacts as $rawContact) {
+                    if (!empty($rawContact['address_id'])) {
+                        $contact = ContactModel::getOnView([
+                            'select' => [
+                                'is_corporate_person', 'lastname', 'firstname', 'address_num', 'address_street', 'address_town', 'address_postal_code',
+                                'ca_id', 'society', 'contact_firstname', 'contact_lastname', 'address_country'
+                            ],
+                            'where'     => ['ca_id = ?'],
+                            'data'      => [$rawContact['address_id']]
+                        ]);
+                        if (isset($contact[0])) {
+                            $contact = AutoCompleteController::getFormattedContact(['contact' => $contact[0]]);
+                            $senders[] = $contact['contact']['otherInfo'];
+                        }
+                    } else {
+                        $senders[] = UserModel::getLabelledUserById(['login' => $rawContact['login']]);
+                    }
+                }
+            }
+        }
+
+        return $senders;
+    }
+
+    private static function getRecipients(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['resId']);
+        ValidatorModel::intVal($args, ['resId']);
+
+        $ext = ResModel::getExtById(['select' => ['category_id', 'address_id', 'exp_user_id', 'dest_user_id', 'is_multicontacts'], 'resId' => $args['resId']]);
+
+        $recipients = [];
+        if (!empty($ext)) {
+            if ($ext['category_id'] == 'outgoing') {
+                $rawContacts = [];
+                if ($ext['is_multicontacts'] == 'Y') {
+                    $multiContacts = DatabaseModel::select([
+                        'select'    => ['contact_id', 'address_id'],
+                        'table'     => ['contacts_res'],
+                        'where'     => ['res_id = ?', 'mode = ?'],
+                        'data'      => [$args['resId'], 'multi']
+                    ]);
+                    foreach ($multiContacts as $multiContact) {
+                        $rawContacts[] = [
+                            'login'         => $multiContact['contact_id'],
+                            'address_id'    => $multiContact['address_id'],
+                        ];
+                    }
+                } else {
+                    $rawContacts[] = [
+                        'login'         => $ext['dest_user_id'],
+                        'address_id'    => $ext['address_id'],
+                    ];
+                }
+                foreach ($rawContacts as $rawContact) {
+                    if (!empty($rawContact['address_id'])) {
+                        $contact = ContactModel::getOnView([
+                            'select' => [
+                                'is_corporate_person', 'lastname', 'firstname', 'address_num', 'address_street', 'address_town', 'address_postal_code',
+                                'ca_id', 'society', 'contact_firstname', 'contact_lastname', 'address_country'
+                            ],
+                            'where'     => ['ca_id = ?'],
+                            'data'      => [$rawContact['address_id']]
+                        ]);
+                        if (isset($contact[0])) {
+                            $contact = AutoCompleteController::getFormattedContact(['contact' => $contact[0]]);
+                            $recipients[] = $contact['contact']['otherInfo'];
+                        }
+                    } else {
+                        $recipients[] = UserModel::getLabelledUserById(['login' => $rawContact['login']]);
+                    }
+                }
+            } else {
+                $resourcesContacts = ResourceContactModel::getFormattedByResId(['resId' => $args['resId']]);
+                foreach ($resourcesContacts as $resourcesContact) {
+                    $recipients[] = $resourcesContact['format'];
+                }
+            }
+        }
+
+        return $recipients;
+    }
+
+    private static function getMaximumHeight(Fpdi $pdf, array $args)
+    {
+        ValidatorModel::notEmpty($args, ['data', 'width']);
+        ValidatorModel::arrayType($args, ['data']);
+
+        $maxHeight = 1;
+        if (!is_numeric($args['width'])) {
+            return $maxHeight;
+        }
+        foreach ($args['data'] as $value) {
+            $height = $pdf->getStringHeight($args['width'], $value);
+            if ($height > $maxHeight) {
+                $maxHeight = $height;
+            }
+        }
+
+        return $maxHeight + 2;
+    }
 }
diff --git a/src/app/resource/controllers/SummarySheetController.php b/src/app/resource/controllers/SummarySheetController.php
index 753697ad4db9c032daae7eb2b5938a2b8c76a081..c17e65dd7efb9587d344e7d0a43aa542a033858f 100644
--- a/src/app/resource/controllers/SummarySheetController.php
+++ b/src/app/resource/controllers/SummarySheetController.php
@@ -25,7 +25,6 @@ use Note\models\NoteModel;
 use Priority\models\PriorityModel;
 use Resource\models\ResModel;
 use Resource\models\ResourceContactModel;
-use Resource\models\ResourceListModel;
 use Respect\Validation\Validator;
 use setasign\Fpdi\Tcpdf\Fpdi;
 use Slim\Http\Request;
diff --git a/test/unitTests/app/resource/ExportControllerTest.php b/test/unitTests/app/resource/ExportControllerTest.php
index 5aa469834fa00f6323453a6b9bb570c8ced1a13b..476d2e46c3256d315fccb309b20995d93fd3320c 100644
--- a/test/unitTests/app/resource/ExportControllerTest.php
+++ b/test/unitTests/app/resource/ExportControllerTest.php
@@ -22,11 +22,9 @@ class ExportControllerTest extends TestCase
         $response     = $exportController->getExportTemplates($request, new \Slim\Http\Response());
         $responseBody = json_decode((string)$response->getBody());
 
-        $this->assertInternalType('array', $responseBody->templates);
-        $this->assertInternalType('array', $responseBody->templates->pdf);
-        $this->assertInternalType('array', $responseBody->templates->pdf->data);
-        $this->assertInternalType('array', $responseBody->templates->csv);
-        $this->assertInternalType('array', $responseBody->templates->csv->data);
+        $this->assertNotEmpty($responseBody->templates);
+        $this->assertNotEmpty($responseBody->templates->pdf);
+        $this->assertNotEmpty($responseBody->templates->csv);
     }
 
 //    public function testUpdateExport()