Вставка печати и подписи в PDF версию договора

Запрос улучшений, интеграции с различными системами и т.д.
Аватара пользователя
Daemony
Сообщения: 66
Зарегистрирован: 2010-03-17 3:01:58
Откуда: Dnepropetrovsk, UA
Контактная информация:

Вставка печати и подписи в PDF версию договора

Сообщение Daemony » 2010-03-29 18:07:53

В продолжении этого топика...

Сравнив два файла hosts/billing/comp/www/InvoiceDownload.comp и hosts/billing/comp/www/ContractDownload.comp, пришел к выводу, что вставка печати и подписи Исполнителя в копию договора, которую пользователь может загрузить в формате PDF, не предусмотрена изначально.

Поправьте меня, если я не прав. Познания в php у меня слабые. Но если в InvoiceDownload.comp присутствует:

Код: Выделить всё

        #-----------------------------------------------------------------------
        $Document = $Invoice['Document'];
        #-----------------------------------------------------------------------
        $DOM = new DOM($Document);
        #-----------------------------------------------------------------------
        $DOM->AddChild('Logo',new Tag('IMG',Array('src'=>'SRC:{Images/Logo.bmp}')));
        #-----------------------------------------------------------------------
        if($IsStamp){
          #---------------------------------------------------------------------
          $DOM->AddChild('dSign',new Tag('IMG',Array('src'=>'SRC:{Images/dSign.bmp}')));
          $DOM->AddChild('aSign',new Tag('IMG',Array('src'=>'SRC:{Images/aSign.bmp}')));
          $DOM->AddChild('Stamp',new Tag('IMG',Array('src'=>'SRC:{Images/Stamp.bmp}')));
        }

то в ContractDownload.comp упоминаний о вставке .bmp файлов нет.

Я попробовал преобразовать ContractDownload.comp так, чтобы в PDF вставлять Stamp.bmp и dSign.bmp, но у меня ничего не вышло. Ниже приведу пример файла hosts/billing.myserver.com/comp/www/ContractDownload.comp, которым я попытался переопределить hosts/billing/comp/www/ContractDownload.comp

Код: Выделить всё

<?php
#-------------------------------------------------------------------------------
/** @author Бреславский А.В. (Joonte Ltd.) */
/******************************************************************************/
/******************************************************************************/
Eval(COMP_INIT);
/******************************************************************************/
/******************************************************************************/
$Args = Args();
#-------------------------------------------------------------------------------
$IsStamp   = (boolean) @$Args['IsStamp'];
$ContractID = (integer) @$Args['ContractID'];
#-------------------------------------------------------------------------------
if(Is_Error(System_Load('modules/Authorisation.mod','classes/DOM.class','libs/HTMLDoc.lib')))
  return ERROR | @Trigger_Error(500);
#-------------------------------------------------------------------------------
$Contract = DB_Select('Contracts',Array('ID','UserID','Document'),Array('UNIQ','ID'=>$ContractID));
#-------------------------------------------------------------------------------

switch(ValueOf($Contract)){
  case 'error':
    return ERROR | @Trigger_Error(500);
  case 'exception':
    return new gException('CONTRACT_NOT_FOUND','Договор не найден');
  case 'array':
    #---------------------------------------------------------------------------
    $Document = $Contract['Document'];
    #---------------------------------------------------------------------------
    if(!$Document)
      return new gException('DOCUMENT_NOT_BUILDED','Документ не сформирован');
    #---------------------------------------------------------------------------
    $Permission = Permission_Check('ContractRead',(integer)$GLOBALS['__USER']['ID'],(integer)$Contract['UserID']);
    #---------------------------------------------------------------------------
    switch(ValueOf($Permission)){
      case 'error':
        return ERROR | @Trigger_Error(500);
      case 'exception':
        return ERROR | @Trigger_Error(400);
      case 'false':
        return ERROR | @Trigger_Error(700);
      case 'true':
        $DOM = new DOM($Document);
        if($IsStamp){
          #---------------------------------------------------------------------
          $DOM->AddChild('Sign',new Tag('IMG',Array('src'=>'SRC:{Images/dSign.bmp}')));
          $DOM->AddChild('Stamp',new Tag('IMG',Array('src'=>'SRC:{Images/Stamp.bmp}')));
        }
        #-----------------------------------------------------------------------
        $Out = $DOM->Build();
        if(Is_Error($Out))
         return ERROR | @Trigger_Error(500);
        #-----------------------------------------------------------------------
        $PDF = HTMLDoc_CreatePDF('Contract',$Out);
        #-----------------------------------------------------------------------
        switch(ValueOf($PDF)){
          case 'error':
            return ERROR | @Trigger_Error(500);
          case 'exception':
            return ERROR | @Trigger_Error(400);
          case 'string':
            #-------------------------------------------------------------------
            $Comp = Comp_Load('Formats/Contract/Number',$Contract['ID']);
            if(Is_Error($Comp))
              return ERROR | @Trigger_Error(500);
            #-------------------------------------------------------------------
            $Tmp = System_Element('tmp');
            if(Is_Error($Tmp))
              return ERROR | @Trigger_Error(500);
            #-------------------------------------------------------------------
            $File = SPrintF('Contract%s.pdf',Md5($_SERVER['REMOTE_ADDR']));
            #-------------------------------------------------------------------
            $IsWrite = IO_Write(SPrintF('%s/files/%s',$Tmp,$File),$PDF,TRUE);
            if(Is_Error($IsWrite))
              return ERROR | @Trigger_Error(500);
            #-------------------------------------------------------------------
            return Array('Status'=>'Ok','Location'=>SPrintF('/GetTemp?File=%s&Name=Contract%s.pdf&Mime=application/pdf',$File,$Comp));
          default:
            return ERROR | @Trigger_Error(101);
        }
      default:
        return ERROR | @Trigger_Error(101);
    }
  default:
    return ERROR | @Trigger_Error(101);
}
#-------------------------------------------------------------------------------
?>


Этот код неработает. Договора как и прежде создаются без печати и подписи. И хоть и не принципиально важно загружать договора с печатями, все равно прошу разработчиков, если это не займет много времени, ткнуть пальцем как правильно, либо добавить возможность в код системы.

Виталий
Site Admin
Сообщения: 344
Зарегистрирован: 2009-10-10 0:41:16
Контактная информация:

Re: Вставка печати и подписи в PDF версию договора

Сообщение Виталий » 2010-03-29 18:13:19

Код дописали, а шаблон? Куда-то в DOM это должно вставляться по примеру того, что вы уже находили в другом шаблоне.

Код: Выделить всё

<td id="dSign">__________________</td>
<td id="Stamp" rowspan="2"></td>
<td id="aSign">__________________</td>

Аватара пользователя
Daemony
Сообщения: 66
Зарегистрирован: 2010-03-17 3:01:58
Откуда: Dnepropetrovsk, UA
Контактная информация:

Re: Вставка печати и подписи в PDF версию договора

Сообщение Daemony » 2010-03-29 18:23:33

Великодный Виталий писал(а):Код дописали, а шаблон? Куда-то в DOM это должно вставляться по примеру того, что вы уже находили в другом шаблоне.

Код: Выделить всё

<td id="dSign">__________________</td>
<td id="Stamp" rowspan="2"></td>
<td id="aSign">__________________</td>


Так ведь оно уже там прописано изначально в том то и дело.
Вот шаблон "Подпись исполнителя индивидуального предпринимателя с физическим лицом"

Код: Выделить всё

<table style="width: 100%;">
<tbody>
<tr>
<td valign="top" width="50%">
<table cellpadding="5">
<tbody>
<tr>
<td>От имени Исполнителя:</td>
</tr>
<tr>
<td>ИП %Executor.CompanyName%</td>
</tr>
<tr>
<td>%Executor.dSourname% %Executor.dName% %Executor.dLastname%</td>
</tr>
<tr>
<td id="Sign"><br />
<div>__________________</div>
<sup>[Подпись]</sup></td>
</tr>
<tr>
<td id="Stamp">
<div>%SignDate%</div>
<sup>[место печати]</sup></td>
</tr>
</tbody>
</table>
</td>
<td valign="top" width="50%">
<table cellpadding="5">
<tbody>
<tr>
<td>От имени Заказчика:</td>
</tr>
<tr>
<td>-</td>
</tr>
<tr>
<td>%Customer.Sourname% %Customer.Name% %Customer.Lastname%</td>
</tr>
<tr>
<td><br />
<div>__________________</div>
<sup>[Подпись]</sup></td>
</tr>
<tr>
<td>
<div>"__"_________200__г.</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>


<td id="Sign"> - есть. Именно Sign, а не dSign. Я это предусмотрел когда правил ContractDownload.php. Ну и <td id="Stamp"> тоже есть.
Договор пробую создавать от имени Исполнителя индивидуального предпринимателя с физическим лицом.

Аватара пользователя
Daemony
Сообщения: 66
Зарегистрирован: 2010-03-17 3:01:58
Откуда: Dnepropetrovsk, UA
Контактная информация:

Re: Вставка печати и подписи в PDF версию договора

Сообщение Daemony » 2010-03-29 18:52:39

Решение приснилось. :D

hosts/billing.myserver.com/comp/www/ContractDownload.comp

Код: Выделить всё

$IsStamp   = (boolean) @$Args['IsStamp'];

поменял на

Код: Выделить всё

$IsStamp   = true;

либо тот же эффект, если убрать условие

Код: Выделить всё

        if($IsStamp){
...
        }

оставив просто:

Код: Выделить всё

          #---------------------------------------------------------------------
          $DOM->AddChild('Sign',new Tag('IMG',Array('src'=>'SRC:{Images/dSign.bmp}')));
          $DOM->AddChild('Stamp',new Tag('IMG',Array('src'=>'SRC:{Images/Stamp.bmp}')));


Может это и неправильно, но оно работает. :?


Вернуться в «Запрос улучшений»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя