2014-10-02 2 views
1

Я работаю в SmartJobBoard с TCPDF. На прежнем сервере был правильно создан PDF.Ошибка TCPDF при создании структуры таблицы для печати

После того как мы переместили сайт на новый сервер, он начал показывать ошибки при создании счетов-фактур PDF. Следующая ошибка показана библиотекой TCPDF.

Notice: Undefined index: cols in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22174 
Notice: Undefined index: thead in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 21705 
Notice: Undefined index: rows in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22162 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Notice: Undefined index: thead in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 21718 

Exception Object 
(
    [message:protected] => PDF generation failed: Some data has already been output, can't send PDF file 
    [string:Exception:private] => 
    [code:protected] => 0 
    [file:protected] => /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php 
    [line:protected] => 29841 
    [trace:Exception:private] => Array 
     (
      [0] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php 
        [line] => 9062 
        [function] => Error 
        [class] => ExceptionThrowingTCPDF 
        [type] => -> 
        [args] => Array 
         (
          [0] => Some data has already been output, can't send PDF file 
         ) 

       ) 

      [1] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/lib/payment/Invoices/InvoiceManager.php 
        [line] => 141 
        [function] => Output 
        [class] => TCPDF 
        [type] => -> 
        [args] => Array 
         (
          [0] => invoice_3284.pdf 
          [1] => D 
         ) 

       ) 

      [2] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/user-scripts/payment/view_invoice.php 
        [line] => 55 
        [function] => generatePDFVersion 
        [class] => SJB_InvoiceManager 
        [type] => :: 
        [args] => Array 
         (
          [0] => 




Rechnung 

Datum: 01.10.2014 
Rechnung #3284 
Status der Rechnung: In Bearbeitung (Zahlung auf Rechnung (Abonnement wird freigeschalten, sobald Zahlungseingang erfolgt ist.)) 

Rechnungsempfänger 





Zahlungsempfänger 

Ocean Harvest GmbH 
Ruessenstrasse 18 
6340 Baar 

Konto: 
Bank: UBS AG, Zug 
IBAN: CH81 0027 3273 1186 8701 T 


Beschreibung Betrag 
PlacementBooster.ch 
Firmen-Abonnement: 12 Monate 
50 Mitarbeiter (51 Accounts) CHF 13,808.00 
Zwischensumme CHF 13,808.00 
MWST-Nr. CHE-108.643.082 MWST MWST Ref.-Nr. 417985 CHF 1,104.64 
Insgesamt CHF 14,912.64 

          [1] => 3284 
         ) 

       ) 

      [3] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/core/ModuleManager.php 
        [line] => 127 
        [function] => execute 
        [class] => SJB_Payment_ViewInvoice 
        [type] => -> 
        [args] => Array 
         (
         ) 

       ) 

      [4] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/core/System.php 
        [line] => 140 
        [function] => executeFunction 
        [class] => SJB_ModuleManager 
        [type] => -> 
        [args] => Array 
         (
          [0] => payment 
          [1] => view_invoice 
          [2] => 
          [3] => /view-invoice/ 
         ) 

       ) 

      [5] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/core/PageConstructor.php 
        [line] => 29 
        [function] => executeFunction 
        [class] => SJB_System 
        [type] => :: 
        [args] => Array 
         (
          [0] => payment 
          [1] => view_invoice 
          [2] => 
          [3] => /view-invoice/ 
         ) 

       ) 

      [6] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/core/System.php 
        [line] => 193 
        [function] => getPage 
        [class] => SJB_PageConstructor 
        [type] => :: 
        [args] => Array 
         (
          [0] => SJB_UserPageConfig Object 
           (
            [uri] => /view-invoice/ 
            [module] => payment 
            [function] => view_invoice 
            [template] => 
            [title] => View Invoice 
            [parameters] => 
            [keywords] => 
            [page_exists] => 1 
            [page_id] => 539 
            [has_raw_output] => 
            [numberOfViews] => 
            [description] => 
           ) 

         ) 

       ) 

      [7] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/system/core/Request.php 
        [line] => 209 
        [function] => getPage 
        [class] => SJB_System 
        [type] => :: 
        [args] => Array 
         (
          [0] => SJB_UserPageConfig Object 
           (
            [uri] => /view-invoice/ 
            [module] => payment 
            [function] => view_invoice 
            [template] => 
            [title] => View Invoice 
            [parameters] => 
            [keywords] => 
            [page_exists] => 1 
            [page_id] => 539 
            [has_raw_output] => 
            [numberOfViews] => 
            [description] => 
           ) 

         ) 

       ) 

      [8] => Array 
       (
        [file] => /home/pb_admin/public_html/pb/index.php 
        [line] => 72 
        [function] => execute 
        [class] => SJB_Request 
        [type] => -> 
        [args] => Array 
         (
         ) 

       ) 

     ) 

    [previous:Exception:private] => 
) 

Почему эта ошибка происходит?

+0

php версия вашего старого сервера и нового сервера они такие же или разные, если разные, какие? любезно также разместите код, который поможет вам – justrohu

+0

С моей точки зрения проблема в том, что ошибки отображения на PHP установлены на. PHP отображает предупреждения - уведомления и TCPDF «жалуются» на то, что «Некоторые данные уже выведены». Попробуйте отключить ошибки отображения php или использовать ob_clean(); 'перед выходом PDF. – tliokos

+0

Justrohu, мой старый сервер имеет версию php 5.3.3, а новый сервер имеет версию php 5.4.32 –

ответ

3

TCPDF требует 100% правильный синтаксис XHTML

Даже "HTML Tidy" не покажет вам все ошибки HTML.В моем случае у меня был тэг-тэг, который не был закрыт, и после того, как я исправил это, предупреждения исчезли, но файл pdf был уродливым. Проблема была решена путем изменения, например, colspan=12 на colspan=”12” и rowspan=2 на rowspan=”2”.

3

Try вставки ...

//Change To Avoid the PDF Error 
    ob_end_clean(); 

, если это не работает, попробуйте использовать ob_clean(); вместо.

просто, прежде чем сделать:

$pdf->Output($filename, $output_dest); 

ошибка встречается, потому что TCPDF бросает ошибки перед окончательным рендеринга завершена. Чтобы предотвратить создание TCPDF неработающих PDF-файлов, он скорее решает сбой.

Только в случае, если TCPDF не любит вас больше, посмотрите на DomPDF :)

0

Вы должны поймать все буфера через ob_ * функции, не эхо или печать или заголовка до ob_start функции:

<?php 
ob_start(); 
[ ... ] 
$content_pdf = ob_get_contents(); 
ob_end_flush(); 
?> 

Наслаждайтесь своим кодом!

1

Проблема заключается в том, что ваш PHP-скрипт печатает в браузере перед отправкой PDF-файла. Почему печать PHP в браузере перед отправкой PDF-файла? Поскольку есть ошибки, и PHP настроен на печать ошибок в браузере.

Эти два решения, приведенные выше, являются (плохими) обходными решениями для , подавляя ошибки. Исправьте код, ошибки исчезнут, а затем PDF можно отправить правильно.

Почему PHP бросает ошибки? Давайте посмотрим:

Notice: Undefined index: cols in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22174 
Notice: Undefined index: thead in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 21705 
Notice: Undefined index: rows in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22162 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Warning: array_push() expects parameter 1 to be array, null given in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 22164 
Notice: Undefined index: thead in /home/pb_admin/public_html/pb/system/ext/tcpdf/tcpdf.php on line 21718 

Первые три ошибки вопросы кода, пытающегося получить доступ к элементу массива перед проверкой, чтобы увидеть, если он установлен. Поскольку проблема заключается в файле /tcpdf/tcpdf.php, я не думаю, что вы можете это исправить. Загрузите ошибку с помощью TCPDF.

Следующие четыре ошибки, скорее всего, связаны с первыми тремя. Исправьте эти первые три, и, вероятно, будут устранены и следующие четыре ошибки.

Если вы публикуете сообщение об ошибке, пожалуйста, разместите ссылку на него в комментариях к этому ответу. Благодарю.

1

Я думаю, что вы должны сделать уровень отладки 0 в своем действии. Используйте Configure :: write ('debug', 0);

0

Вы должны проверить, что все открывающие теги имеют соответствующие теги закрытия! Это одна из наименее заподозренных ошибок в html, и, вероятно, причина, по которой вы получаете ошибку: «Заголовки уже отправлены»

0

В моем случае ошибки в tcpdf.php появились из-за ошибок в HTML - незакрытого td тег. Похоже, что такая ошибка HTML приведет к большому количеству ошибок в файле tcpdf.php, включая те, которые не имеют никакой логической связи с фактической ошибкой.

Мой совет - изолировать ошибку, удалив весь «html», который вы отправляете на вывод, и просто добавьте одну букву. Если вы получите пустой pdf-файл, начните проверку своей переменной html.

0

Нашли аналогичную проблему. Эта проблема возникла из-за плохого html, и, следовательно, TCPDF выдавал ошибку. После исправления html-проблем TCPDF отлично справился со мной, чтобы исправить проблемы html click here.

Смежные вопросы