Я работаю в SmartJobBoard с TCPDF. PDF был сгенерирован правильно на старом сервере.
После того, как мы переместили сайт на новый сервер, он начал показывать ошибки при создании счетов в формате 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 TBeschreibung 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] =>
)
Почему происходит эта ошибка?
TCPDF требует 100% действительный синтаксис XHTML
Даже «HTML Tidy» не покажет вам все ошибки HTML. В моем случае тег tr не был закрыт, и после того, как я исправил это, предупреждения исчезли, но файл PDF был безобразным. Проблема была решена путем изменения, например, colspan=12
от colspan=”12”
а также rowspan=2
от rowspan=”2”
,
Попробуйте вставить …
//Change To Avoid the PDF Error
ob_end_clean();
если это не работает, попробуйте использовать ob_clean (); вместо.
как раз перед тем как
$pdf->Output($filename, $output_dest);
Ошибка происходит, потому что TCPDF выбрасывает ошибки до финальной оказание завершено. Чтобы TCPDF не мог создавать неработающие PDF-файлы, он скорее решает аварийно завершить работу.
На всякий случай, если вы больше не нравитесь TCPDF, взгляните на DOMPDF 🙂
Проблема в том, что ваш 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.
Следующие четыре ошибки, скорее всего, связаны с первыми тремя. Исправьте эти первые три, и следующие четыре ошибки, скорее всего, также будут устранены.
Если вы публикуете сообщение об ошибке, пожалуйста, оставьте ссылку на него в комментариях к этому ответу. Благодарю.
Я думаю, что вы должны сделать уровень отладки 0 в вашем действии.
Используйте Configure :: write (‘debug’, 0);
Вы должны перехватить весь буфер с помощью функции ob_ *, без эха, печати или заголовка перед функцией ob_start:
<?php
ob_start();
[ ... ]
$content_pdf = ob_get_contents();
ob_end_flush();
?>
Наслаждайтесь вашим кодом!
Вы должны убедиться, что все открывающие теги имеют совпадающие закрывающие теги! Это одна из наименее подозреваемых ошибок в html, и, вероятно, причина, по которой вы получаете ошибку:
«Заголовки уже отправлены»
В моем случае ошибки в tcpdf.php появились из-за того, что у меня были некоторые ошибки в HTML — закрытый тег td.
Кажется, что HTML-ошибка, подобная этой, приведет к большому количеству ошибок в файле tcpdf.php, включая ошибки, которые не имеют логической связи с фактической ошибкой.
Мой совет — изолировать ошибку, удалив весь «html», который вы отправляете на вывод, и просто добавьте одну букву. Если вы получили пустой PDF-файл, начните проверять html-переменную.
Сталкивались с такой же проблемой. Эта проблема была из-за плохого HTML и, следовательно, TCPDF выдавал ошибку.
После исправления проблем с html TCPDF работал нормально для меня, чтобы исправить проблемы с html кликните сюда.