2017-07-30 272 views
0

我正在使用PHPWord庫用於通過我的PHP應用程序替換Word Doc中的一些佔位符文本。PHPWord setValue不區分大小寫的替換

我必須允許用戶使用一些預定義的佔位符來上傳Word文檔,例如, $ {} Anchor1$ {} Anchor2等

現在發生的事情是一些用戶定義佔位符$ {}作者1等

的setValue作品區分大小寫的方式。

有任何PHPWord

使用 不區分大小寫的替代通過setValue方法

問候

回答

0

沒有爲預定的選項,但在這裏你可以做一些Monkey Patching

您可以修改源代碼方法,但這不是一個好主意,因爲如果將庫更新爲新版本,則會丟失更改。

取而代之,你可以創建一個新的類來擴展原來的類,並在那裏添加一個調用原始的方法setValue但是它複製了參數以傳遞它們都是小寫字母和大寫。

這是我的方法。我無法嘗試,但我認爲它會起作用(當然,您可以爲班級和方法選擇一些更好的名稱)。

class TemplateProcessorCaseInsensitive extends TemplateProcessor 
{ 
    public function setValueCaseInsensitive($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT) 
    { 
     if (is_array($search)) { 
      foreach ($search as &$item) { 
       $item = strtolower($item); 
      } 
      $capitalizedSearch = $search; 
      foreach ($capitalizedSearch as &$capitalizedItem){ 
       $capitalizedItem = ucfirst($capitalizedItem); 
      } 
      $search = array_merge($search, $capitalizedSearch); 
     } 
     else{ 
      $search = array(strtolower($search), ucfirst(strtolower($search))); 
     } 

     if(is_array($replace)){ 
      $replace = array_merge($replace, $replace); 
     } 
     else{ 
      $replace = array($replace, $replace); 
     } 

     $this->setValue($search, $replace, $limit); 
    } 
} 

讓我們看看一些例子!

例1

如果你這樣做:

$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx'); 
$templateProcessor->setValueCaseInsensitive('Name', 'John Doe'); 

其實你是在後臺做這個:

$templateProcessor = new TemplateProcessor('Template.docx'); 
$templateProcessor->setValue(array('name', 'Name'), array('John Doe', 'John Doe')); 

例2

如果你這樣做:

$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx'); 
$templateProcessor->setValueCaseInsensitive(array('City', 'Street'), array('Detroit', '12th Street')); 

其實你是在後臺做這個:

$templateProcessor = new TemplateProcessor('Template.docx'); 
$templateProcessor->setValue(array('city', 'street', 'City', 'Street'), array('Detroit', '12th Street', 'Detroit', '12th Street'));