diff --git a/CRM/DataprocessorOutputExport/PDF.php b/CRM/DataprocessorOutputExport/PDF.php
index f2122c759ac50583b89f44e7e923bcda9ccd546e..7293318a07516de9d5b9263f13da1a5d2ff411c9 100644
--- a/CRM/DataprocessorOutputExport/PDF.php
+++ b/CRM/DataprocessorOutputExport/PDF.php
@@ -32,6 +32,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
    * @param array $filter
    */
   public function buildConfigurationForm(\CRM_Core_Form $form, $output=array()) {
+    $defaults = [];
     $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $output['data_processor_id']));
     $dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor);
     $fields = array();
@@ -46,6 +47,33 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
       $pdfFormats[$pdfFormat['id']] = $pdfFormat['label'];
     }
 
+    $smarty = \CRM_Core_Smarty::singleton();
+    $templates = [];
+    $template_dirs = $smarty->template_dir;
+    if (!is_array($template_dirs)) {
+      $template_dirs = [$template_dirs];
+    }
+    foreach($template_dirs as $template_dir) {
+      foreach(glob($template_dir."/CRM/DataprocessorOutputExport/PDF/*") as $fileName) {
+        if (is_dir($fileName)) {
+          $template = basename($fileName);
+          $title = $template;
+          if (file_exists($fileName."/title.txt")) {
+            $title = E::ts(file_get_contents($fileName."/title.txt"));
+          }
+          $templates[$template] = $title;
+        }
+      }
+    }
+    $defaults['template'] = key($templates);
+
+    $form->add('select', 'template', E::ts('Template'), $templates, false, array(
+      'style' => 'min-width:250px',
+      'class' => 'crm-select2 huge',
+      'multiple' => false,
+      'placeholder' => E::ts('- select -'),
+    ));
+
     $form->add('select', 'hidden_fields', E::ts('Hidden fields'), $fields, false, array(
       'style' => 'min-width:250px',
       'class' => 'crm-select2 huge',
@@ -53,24 +81,21 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
       'placeholder' => E::ts('- select -'),
     ));
 
-    $form->add('select', 'pdf_format', E::ts('PDF Format'), $pdfFormats, false, array(
+    $form->add('select', 'section_titles', E::ts('Section Titles'), $fields, false, array(
       'style' => 'min-width:250px',
       'class' => 'crm-select2 huge',
-      'multiple' => false,
-      'placeholder' => E::ts('- Default PDF Format -'),
+      'multiple' => true,
+      'placeholder' => E::ts('- no section titles -'),
     ));
-    $form->assign('ManagePdfFormatUrl', CRM_Utils_System::url('civicrm/admin/pdfFormats', ['reset'=>1]));
 
-    $borderStyles = [
-      'full' => E::ts('Border around every cell'),
-      'row_bottom' => E::ts('Border at the bottom of the row'),
-    ];
-    $form->add('select', 'border', E::ts('Border'), $borderStyles, false, array(
+    $form->add('select', 'pdf_format', E::ts('PDF Format'), $pdfFormats, false, array(
       'style' => 'min-width:250px',
       'class' => 'crm-select2 huge',
       'multiple' => false,
-      'placeholder' => E::ts('- No border -'),
+      'placeholder' => E::ts('- Default PDF Format -'),
     ));
+    $form->assign('ManagePdfFormatUrl', CRM_Utils_System::url('civicrm/admin/pdfFormats', ['reset'=>1]));
+
 
     $form->add('checkbox', 'anonymous', E::ts('Available for anonymous users'), array(), false);
 
@@ -88,6 +113,9 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
     if ($configuration && isset($configuration['hidden_fields'])) {
       $defaults['hidden_fields'] = $configuration['hidden_fields'];
     }
+    if ($configuration && isset($configuration['section_titles'])) {
+      $defaults['section_titles'] = $configuration['section_titles'];
+    }
     if ($configuration && isset($configuration['pdf_format'])) {
       $defaults['pdf_format'] = $configuration['pdf_format'];
     }
@@ -109,8 +137,8 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
     if ($configuration && isset($configuration['additional_column_height'])) {
       $defaults['additional_column_height'] = $configuration['additional_column_height'];
     }
-    if ($configuration && isset($configuration['border'])) {
-      $defaults['border'] = $configuration['border'];
+    if ($configuration && isset($configuration['template'])) {
+      $defaults['template'] = $configuration['template'];
     }
     $form->setDefaults($defaults);
   }
@@ -136,6 +164,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
   public function processConfiguration($submittedValues, &$output) {
     $configuration = array();
     $configuration['hidden_fields'] = $submittedValues['hidden_fields'];
+    $configuration['section_titles'] = $submittedValues['section_titles'];
     $configuration['pdf_format'] = $submittedValues['pdf_format'];
     $configuration['header'] = $submittedValues['header'];
     $configuration['anonymous'] = $submittedValues['anonymous'];
@@ -143,7 +172,7 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
     $configuration['additional_column_title'] = $submittedValues['additional_column_title'];
     $configuration['additional_column_width'] = $submittedValues['additional_column_width'];
     $configuration['additional_column_height'] = $submittedValues['additional_column_height'];
-    $configuration['border'] = $submittedValues['border'];
+    $configuration['template'] = $submittedValues['template'];
     return $configuration;
   }
 
@@ -226,7 +255,6 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
       $dataProcessorClass->getDataFlow()->addSort($sortFieldName, $sortDirection);
     }
 
-    self::createHeader($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor);
     self::exportDataProcessor($path, $dataProcessorClass, $outputBAO['configuration'], $idField, $selectedIds);
     $path = self::createFooter($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor);
 
@@ -268,8 +296,6 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
     CRM_Utils_File::restrictAccess($basePath.'/');
     $filename = $basePath.'/'. $name.'.html';
 
-    self::createHeader($filename, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor);
-
     $count = $dataProcessorClass->getDataFlow()->recordCount();
     $recordsPerJob = self::RECORDS_PER_JOB;
     for($i=0; $i < $count; $i = $i + $recordsPerJob) {
@@ -315,68 +341,56 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
     $runner->runAllViaWeb(); // does not return
   }
 
-  protected static function createHeader($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) {
-    $borderStyle = "";
-    if (isset($configuration['border']) && $configuration['border'] == 'full') {
-      $borderStyle = "th, td { border: 1px solid black; padding-left: 4px; padding-right: 4px; }";
-    } elseif (isset($configuration['border']) && $configuration['border'] == 'row_bottom') {
-      $borderStyle = "th, td { border-bottom: 1px solid black; }";
-    }
-
-    $content = "
-        <html>
-        <head>
-        <title>{$dataProcessor['title']}</title>
-        </head>
-        <body>
-        <style>
-        table { border-collapse: collapse; }
-        {$borderStyle}
-        </style>
-        <h1>{$dataProcessor['title']}</h1>
-    ";
-
-    if (isset($configuration['header'])) {
-      $content .= $configuration['header'];
-    }
-
-    $content .= "<table style=\"width: 100%;\"><thead><tr>";
+  protected static function createFooter($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) {
+    $content = "";
     $hiddenFields = array();
     if (isset($configuration['hidden_fields']) && is_array($configuration['hidden_fields'])) {
       $hiddenFields = $configuration['hidden_fields'];
     }
+    $headerColumns = [];
     foreach($dataProcessorClass->getDataFlow()->getOutputFieldHandlers() as $outputHandler) {
-      if (!in_array($outputHandler->getOutputFieldSpecification()->alias, $hiddenFields)) {
-        $content .= "<th>" . self::encodeValue($outputHandler->getOutputFieldSpecification()->title) . "</th>";
-      }
+      $headerColumns[$outputHandler->getOutputFieldSpecification()->alias] = $outputHandler->getOutputFieldSpecification()->title;
     }
 
-    if (isset($configuration['additional_column']) && $configuration['additional_column']) {
-      $additionalColumnStyle = "";
-      if (isset($configuration['additional_column_width']) && $configuration['additional_column_width']) {
-        $additionalColumnStyle .= "width: {$configuration['additional_column_width']};";
-      }
-      $content .= "<th style=\"{$additionalColumnStyle}\">";
-      if (isset($configuration['additional_column_title']) && $configuration['additional_column_title']) {
-        $content .= $configuration['additional_column_title'];
+    $smarty = \CRM_Core_Smarty::singleton();
+    $smarty->pushScope(array());
+    $smarty->assign('configuration', $configuration);
+    $smarty->assign('hiddenFields', $hiddenFields);
+    $smarty->assign('headerColumns', $headerColumns);
+    $smarty->assign('dataProcessor', $dataProcessor);
+
+    $parts = [];
+    foreach (glob($filename.".part.*") as $partFilename) {
+      $basePartFileName = basename($partFilename);
+      $partName = substr($basePartFileName, stripos($basePartFileName, ".part.")+6);
+      $partContent = file_get_contents($partFilename);
+      if ($partName == "_none_") {
+        $smarty->assign('sectionTitle', '');
+        $smarty->assign('rows', $partContent);
+        $content .= $smarty->fetch(self::getTemplateFolder($configuration)."table.tpl");
+        $smarty->popScope();
+      } else {
+        $parts[$partName] = $partContent;
       }
-      $content .= "</th>";
+      unlink($partFilename);
     }
 
-    $content .= "</tr></thead>";
-    $file = fopen($filename, 'a');
-    fwrite($file, $content."\r\n");
-    fclose($file);
-  }
+    foreach($parts as $sectionTitle => $rows) {
+      $smarty->assign('sectionTitle', $sectionTitle);
+      $smarty->assign('rows', $rows);
+      $content .= $smarty->fetch(self::getTemplateFolder($configuration)."table.tpl");
+      $smarty->popScope();
+      unset($parts[$sectionTitle]);
+    }
+    $smarty->popScope();
 
-  protected static function createFooter($filename, \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessorClass, $configuration, $dataProcessor) {
-    $content = "</table></body></html>";
-    $file = fopen($filename, 'a');
-    fwrite($file, $content."\r\n");
-    fclose($file);
+    $smarty->pushScope(array());
+    $smarty->assign('configuration', $configuration);
+    $smarty->assign('dataProcessor', $dataProcessor);
+    $smarty->assign('content', $content);
+    $content = $smarty->fetch(self::getTemplateFolder($configuration)."html.tpl");
+    $smarty->popScope();
 
-    $content = file_get_contents($filename);
-    unlink($filename);
     $pdfFilename = str_replace(".html", ".pdf", $filename);
     $pdfFormat = isset($configuration['pdf_format']) ? $configuration['pdf_format'] : null;
     $pdfContents = \CRM_Utils_PDF_Utils::html2pdf($content, basename($pdfFilename), TRUE, $pdfFormat);
@@ -393,22 +407,21 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
       $hiddenFields = $configuration['hidden_fields'];
     }
 
-    $additionalColumn = '';
-    if (isset($configuration['additional_column']) && $configuration['additional_column']) {
-      $style = "";
-      if (isset($configuration['additional_column_width']) && $configuration['additional_column_width']) {
-        $style .= "width: {$configuration['additional_column_width']};";
-      }
-      if (isset($configuration['additional_column_height']) && $configuration['additional_column_height']) {
-        $style .= "height: {$configuration['additional_column_height']};";
-      }
-      $additionalColumn = "<td style=\"{$style}\">&nbsp;</td>";
+    $smarty = \CRM_Core_Smarty::singleton();
+    $smarty->pushScope(array());
+    $smarty->assign('configuration', $configuration);
+    $smarty->assign('hiddenFields', $hiddenFields);
+    $smarty->assign('dataProcessor', $dataProcessor);
+
+    if (!isset($configuration['section_titles']) || !is_array($configuration['section_titles'])) {
+      $configuration['section_titles'] = array();
     }
 
-    $content = "";
+    $contents = [];
     try {
       while($record = $dataProcessor->getDataFlow()->nextRecord()) {
         $row = array();
+        $content = "";
         $rowIsSelected = true;
         if (isset($idField) && is_array($selectedIds) && count($selectedIds)) {
           $rowIsSelected = false;
@@ -418,25 +431,41 @@ class CRM_DataprocessorOutputExport_PDF implements ExportOutputInterface, Direct
           }
         }
         if ($rowIsSelected) {
-          $content .= "<tr>";
-          foreach ($record as $field => $value) {
-            if (!in_array($field, $hiddenFields)) {
-              $content .= "<td>" . self::encodeValue($value->formattedValue) . "</td>";
-            }
-          }
-          $content .= $additionalColumn . "</tr>";
+          $smarty->assign('record', $record);
+          $content = $smarty->fetch(self::getTemplateFolder($configuration)."row.tpl");
+        }
+
+        $sectionHeader = "";
+        foreach($configuration['section_titles'] as $section_title) {
+          $sectionHeader .= strip_tags($record[$section_title]->formattedValue)." ";
         }
+        if (empty($sectionHeader)) {
+          $sectionHeader = "_none_";
+        }
+        $sectionHeader = trim($sectionHeader);
+        if (!isset($contents[$sectionHeader])) {
+          $contents[$sectionHeader] = "";
+        }
+        $contents[$sectionHeader] .= $content;
       }
     } catch (\Civi\DataProcessor\DataFlow\EndOfFlowException $e) {
       // Do nothing
     }
-    $file = fopen($filename, 'a');
-    fwrite($file, $content . "\r\n");
-    fclose($file);
+    foreach($contents as $sectionHeader => $content) {
+      $file = fopen($filename.".part.".$sectionHeader, 'a');
+      fwrite($file, $content . "\r\n");
+      fclose($file);
+    }
+
+    $smarty->popScope();
   }
 
-  protected static function encodeValue($value) {
-    return htmlentities($value);
+  protected static function getTemplateFolder($configuration) {
+    $template = "Default";
+    if (isset($configuration['template'])) {
+      $template = $configuration['template'];
+    }
+    return "CRM/DataprocessorOutputExport/PDF/{$template}/";
   }
 
   public static function exportBatch(CRM_Queue_TaskContext $ctx, $filename, $params, $dataProcessorId, $outputId, $offset, $limit, $sortFieldName = null, $sortDirection = 'ASC', $idField=null, $selectedIds=array()) {
diff --git a/docs/CustomizePdfTemplate.md b/docs/CustomizePdfTemplate.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a99318d0cc02ca7c75a0b9601aa1f9743f8aa44
--- /dev/null
+++ b/docs/CustomizePdfTemplate.md
@@ -0,0 +1,6 @@
+# Customize a PDF Template
+
+1. Copy one of the subfolders under _template/CRM/DataProcessorOutputExport/PDF_ into _your-extension/template/CRM/DataProcessorOutputExport/PDF_
+2. Give the folder another name(e.g. MyCustom1)
+3. Change the title by changing the content in tite.txt (e.g. My Custom 1)
+4. Change the content of the three _.tpl_ files (e.g. adding a logo to html.tpl)
diff --git a/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl b/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl
index a158ec294efd7777b6e874cf99e23c32f4e9f119..fd912a91eae5a7c20d485373827fc8dbf3d92fc4 100644
--- a/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl
+++ b/templates/CRM/DataprocessorOutputExport/Form/Configuration/PDF.tpl
@@ -13,6 +13,11 @@
     <div class="content">{$form.border.html}</div>
     <div class="clear"></div>
   </div>
+  <div class="crm-section">
+    <div class="label">{$form.template.label}</div>
+    <div class="content">{$form.template.html}</div>
+    <div class="clear"></div>
+  </div>
   <div class="crm-section">
     <div class="label">{$form.header.label}</div>
     <div class="content">{$form.header.html}</div>
@@ -23,6 +28,11 @@
     <div class="content">{$form.hidden_fields.html}</div>
     <div class="clear"></div>
   </div>
+  <div class="crm-section">
+    <div class="label">{$form.section_titles.label}</div>
+    <div class="content">{$form.section_titles.html}</div>
+    <div class="clear"></div>
+  </div>
   <div class="crm-section">
     <div class="label">{$form.additional_column.label}</div>
     <div class="content">{$form.additional_column.html}</div>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..a623b6b3fe0314ec88e3f67121fc52f52571fb3d
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/html.tpl
@@ -0,0 +1,18 @@
+<html>
+<head>
+  <title>{$dataProcessor.title}</title>
+</head>
+<body>
+<style>
+  {literal}
+  table { border-collapse: collapse; margin-bottom: 2em;}
+  th, td { border-bottom: 1px solid black; }
+  {/literal}
+</style>
+<h1>{$dataProcessor.title}</h1>
+{if $configuration.header}
+{$configuration.header}
+{/if}
+{$content}
+</body>
+</html>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/row.tpl
@@ -0,0 +1,15 @@
+<tr>
+  {foreach from=$record item=value key=field}
+    {if (!in_array($field, $hiddenFields))}
+      <td>{$value->formattedValue|htmlentities}</td>
+    {/if}
+  {/foreach}
+  {if (isset($configuration.additional_column) && $configuration.additional_column)}
+    <td styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+      {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if}
+    ">
+      &nbsp;
+    </td>
+  {/if}
+</tr>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/Default/table.tpl
@@ -0,0 +1,20 @@
+{if $sectionTitle}
+  <h2>{$sectionTitle}</h2>
+{/if}
+<table style="width: 100%;">
+  <thead>
+  <tr>
+    {foreach from=$headerColumns item=title key=columnName}
+      {if (!in_array($columnName, $hiddenFields))}
+        <th>{$title|htmlentities}</th>
+      {/if}
+    {/foreach}
+    <th styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+    ">
+      {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if}
+    </th>
+  </tr>
+  </thead>
+  {$rows}
+</table>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..2c1c8f40babb53e5a92c821369ba762cdc5d2843
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/html.tpl
@@ -0,0 +1,18 @@
+<html>
+<head>
+  <title>{$dataProcessor.title}</title>
+</head>
+<body>
+<style>
+  {literal}
+  table { border-collapse: collapse; margin-bottom: 2em;}
+  th, td { border: 1px solid black; padding-left: 4px; padding-right: 4px; }
+  {/literal}
+</style>
+<h1>{$dataProcessor.title}</h1>
+{if $configuration.header}
+  {$configuration.header}
+{/if}
+{$content}
+</body>
+</html>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/row.tpl
@@ -0,0 +1,15 @@
+<tr>
+  {foreach from=$record item=value key=field}
+    {if (!in_array($field, $hiddenFields))}
+      <td>{$value->formattedValue|htmlentities}</td>
+    {/if}
+  {/foreach}
+  {if (isset($configuration.additional_column) && $configuration.additional_column)}
+    <td styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+      {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if}
+    ">
+      &nbsp;
+    </td>
+  {/if}
+</tr>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/table.tpl
@@ -0,0 +1,20 @@
+{if $sectionTitle}
+  <h2>{$sectionTitle}</h2>
+{/if}
+<table style="width: 100%;">
+  <thead>
+  <tr>
+    {foreach from=$headerColumns item=title key=columnName}
+      {if (!in_array($columnName, $hiddenFields))}
+        <th>{$title|htmlentities}</th>
+      {/if}
+    {/foreach}
+    <th styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+    ">
+      {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if}
+    </th>
+  </tr>
+  </thead>
+  {$rows}
+</table>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt
new file mode 100644
index 0000000000000000000000000000000000000000..50dee6e0d9c9735d0d0582887419ab78d67d23d0
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultFullBorder/title.txt
@@ -0,0 +1 @@
+Default Full Border
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..e13dfd6214c611cf0d76e9fedb528a01de6be576
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/html.tpl
@@ -0,0 +1,18 @@
+<html>
+<head>
+  <title>{$dataProcessor.title}</title>
+</head>
+<body>
+<style>
+  {literal}
+  table { border-collapse: collapse; margin-bottom: 2em;}
+  th, td { border: none; }
+  {/literal}
+</style>
+<h1>{$dataProcessor.title}</h1>
+{if $configuration.header}
+  {$configuration.header}
+{/if}
+{$content}
+</body>
+</html>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..3a611c67a9742489689ed9b7198806e10b146582
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/row.tpl
@@ -0,0 +1,15 @@
+<tr>
+  {foreach from=$record item=value key=field}
+    {if (!in_array($field, $hiddenFields))}
+      <td>{$value->formattedValue|htmlentities}</td>
+    {/if}
+  {/foreach}
+  {if (isset($configuration.additional_column) && $configuration.additional_column)}
+    <td styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+      {if (isset($configuration.additional_column_height) && $configuration.additional_column_height)}height: {$configuration.additional_column_height};{/if}
+    ">
+      &nbsp;
+    </td>
+  {/if}
+</tr>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..4f058560e254ae0b614d546e6c090b6dc0996cf1
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/table.tpl
@@ -0,0 +1,20 @@
+{if $sectionTitle}
+  <h2>{$sectionTitle}</h2>
+{/if}
+<table style="width: 100%;">
+  <thead>
+  <tr>
+    {foreach from=$headerColumns item=title key=columnName}
+      {if (!in_array($columnName, $hiddenFields))}
+        <th>{$title|htmlentities}</th>
+      {/if}
+    {/foreach}
+    <th styile="
+      {if (isset($configuration.additional_column_width) && $configuration.additional_column_width)}width: {$configuration.additional_column_width};{/if}
+    ">
+      {if (isset($configuration.additional_column_title))}{$configuration.additional_column_title}{/if}
+    </th>
+  </tr>
+  </thead>
+  {$rows}
+</table>
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2613c7c24403df1420422a15ac504418cfc7e5a6
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/DefaultNoBorder/title.txt
@@ -0,0 +1 @@
+Default Without Border
diff --git a/templates/CRM/DataprocessorOutputExport/PDF/README.md b/templates/CRM/DataprocessorOutputExport/PDF/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..56009aba20ad552790b689b823c776215983520b
--- /dev/null
+++ b/templates/CRM/DataprocessorOutputExport/PDF/README.md
@@ -0,0 +1,9 @@
+# PDF Template
+
+You can customize PDF templates by copying one of the subfolders and pasting it in your extension in the directory
+CRM/DataProcessorOutputExport/PDF and give it a custom name.
+The file title.txt contains the title for this template.
+
+## Why would you do this?
+
+You can do this if you need a different layout. e.g. the style of table is not what you are looking for.