Измените исходный код TCPDF, чтобы пустая подпись переходила на следующую страницу при переполнении нижним колонтитулом. - PullRequest
0 голосов
/ 11 января 2020

Это может быть странно, но я не могу найти какую-либо функцию TCPDF для достижения того, что я пытаюсь сделать. Поэтому я вынужден изменить часть исходного кода TCPDF в соответствии со своими потребностями. По сути, я хочу иметь возможность прикрепить поле подписи emtpy к документу PDF, который будет перемещаться вдоль оси Y при изменении документа (из-за изменения информации о пользователе). Проблема в том, что иногда поле для подписи иногда перекрывает нижний колонтитул, который является нижним 20 см документа PDF. Поэтому, когда он перекрывается, мне нужно пустое поле для автоматического перехода на следующую страницу. Я уже изменил некоторый код, чтобы значения x и y были относительными, а не абсолютными, как указывает исходная функция:

    public function addEmptySignatureAppearance($x='', $y='', $w=0, $h=0, $page=-1, $name='') {
        ++$this->n;

        if ($x === '') {
            $x = $this->x;
        }
        if ($y === '') {
            $y = $this->y+30;
        }

        $this->empty_signature_appearance[] = array('objid' => $this->n) + $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name);
    }

Сложная задача - заставить окно перейти на следующую страницу, когда она перекрывается , Я попытался сделать следующее:

    protected function getSignatureAppearanceArray($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') {
        $sigapp = array();

        //if (($page < 1) OR ($page > $this->numpages)) {
        //  $sigapp['page'] = $this->page;
        //} else {
        //  $sigapp['page'] = intval($page);
        //}

        if ($y >= 267) {
            $sigapp['page'] = $this->page+1;
            $y = $this->y+30;
        } else {
            $sigapp['page'] = $this->page;
        }


        if (empty($name)) {
            $sigapp['name'] = 'Signature';
        } else {
            $sigapp['name'] = $name;
        }
        $a = $x * $this->k;
        $b = $this->pagedim[($sigapp['page'])]['h'] - (($y + $h) * $this->k);
        $c = $w * $this->k;
        $d = $h * $this->k;
        $sigapp['rect'] = sprintf('%F %F %F %F', $a, $b, ($a + $c), ($b + $d));
        return $sigapp;
    }

По существу, оператор if указывает, что, если верхний левый угол поля находится на расстоянии 267 см вниз или больше PDF, возьмите текущую страницу и добавьте дополнительная страница Надеемся, что это должно передать поле для подписи на следующую страницу.

Однако, когда я пытаюсь это сделать, я получаю следующую ошибку:

Notice: Undefined offset: 3 in C:\xampp\htdocs\*\*\tcpdf\tcpdf.php on line 13513 TCPDF ERROR: Some data has already been output, can't send PDF file

Добавлено пустое поле для подписи к коду PDF php просто как: $pdf->addEmptySignatureAppearance('', '', 80, 15);

Может ли кто-нибудь помочь с этой проблемой, помогая мне достичь моей цели. Я впадаю в отчаяние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...