Я генерирую отчеты Excel, загружая листы Excel, которые я сгенерировал с помощью Excel, и заполняю некоторые данные с помощью кода PHP.Создание PDF с PHPExcel не удается
Теперь я хотел преобразовать эти листы Excel в PDF, и поскольку я видел, что PHPExcel 1.7.x поддерживает создание PDF, я подумал: «Совершенно, мне не нужно проходить OpenOffice Engine, потому что этот движок не был полезен для создания PDF-файлов для веб-пользователей в режиме реального времени.
Но: Кроме того, у меня не было возможности использовать PDF-редактор PHPExcel для записи загруженного шаблона Excel. Невозможно было загрузить и записать доставленные файлы xls.
Я попытался создать excel только с помощью кода PHP и отказаться от шаблона excel: excel-to-pdf уже завершился неудачей с помощью простейшего сгенерированного excel, объединяющего две ячейки.
Является ли этот писатель совершенно непригодным для такой задачи?
Приложение, 2013-06-09: Извините, это можно понять неправильно: это может быть моя ошибка или я просто не понял основных принципов.
Следующая простая генерация кода первенствует терпит неудачу, если речь идет о выходе Ф:
<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');
/** Include PHPExcel */
require_once 'app/_includes/PHPExcel_1.7/PHPExcel.php';
$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
$rendererLibrary = 'tcpdf';
$rendererLibraryPath = '/inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/'. $rendererLibrary;
if (!PHPExcel_Settings::setPdfRenderer(
$rendererName,
$rendererLibraryPath
)) {
die(
'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
'<br />' .
'at the top of this script as appropriate for your directory structure'
);
}
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Company X")
->setDescription("Test document for PDF, generated using PHP classes.");
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Date')
->setCellValue('B1', 'Time')
->setCellValue('B2', 'Start')
->setCellValue('C2', 'End');
// This line generated errors inside the output pdf -> corrupts PDF
$objPHPExcel->setActiveSheetIndex(0)->mergeCells('B1:C1');
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(14);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(4);
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->getActiveSheet()->setShowGridLines(false);
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client.s web browser (PDF)
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="p1.pdf"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');
exit;
Приложения, 2013-06-09: Это начало сгенерированный файл PDF:
Notice: Array to string conversion in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1236
Call Stack:
0.0010 257896 1. {main}() /inet/xxx/HTTP/devel/p1.php:0
0.0243 7798872 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799224 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799728 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0243 7800064 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0309 8678376 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119
0.0313 8683176 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436
Warning: Illegal string offset 'width' in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1257
Call Stack:
0.0010 257896 1. {main}() /inet/xxx/HTTP/devel/p1.php:0
0.0243 7798872 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799224 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799728 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0243 7800064 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0309 8678376 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119
0.0313 8683176 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436
Warning: Invalid argument supplied for foreach() in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1315
Call Stack:
0.0010 257896 1. {main}() /inet/xxx/HTTP/devel/p1.php:0
0.0243 7798872 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799224 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/p1.php:62
0.0243 7799728 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0243 7800064 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87
0.0309 8678376 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119
0.0313 8683176 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436
0.0320 8701296 8. PHPExcel_Writer_HTML->_assembleCSS() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:1267
%PDF-1.7
Приложение, 2013-06-10: Я попробовал пример 21pdf.php, с tcpdf. Это показывает мне некоторые предупреждения, но PDF-файл генерируется. Это является выходом PHP:
21:55:52 Create new PHPExcel object
21:55:52 Set document properties
21:55:52 Add some data
21:55:52 Add comments
21:55:52 Add rich-text string
21:55:52 Merge cells
21:55:52 Protect cells
21:55:52 Set cell number formats
21:55:52 Set column widths
21:55:52 Set fonts
21:55:52 Set alignments
21:55:52 Set thin black border outline around column
21:55:52 Set thick brown border outline around Total
21:55:52 Set fills
21:55:52 Set style for header row using alternative method
21:55:52 Unprotect a cell
21:55:52 Add a hyperlink to the sheet
21:55:52 Add a drawing to the worksheet
21:55:52 Add a drawing to the worksheet
21:55:52 Add a drawing to the worksheet
21:55:52 Play around with inserting and removing rows and columns
21:55:52 Set header/footer
21:55:52 Set page orientation and size
21:55:52 Rename first worksheet
21:55:52 Create a second Worksheet object
21:55:52 Add some data
21:55:52 Set the worksheet tab color
21:55:52 Set alignments
21:55:52 Set column widths
21:55:52 Set fonts
21:55:52 Add a drawing to the worksheet
21:55:52 Set page orientation and size
21:55:52 Rename second worksheet
21:55:52 Hide grid lines
21:55:52 Set orientation to landscape
21:55:52 Write to PDF format using tcPDF
Notice: Array to string conversion in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1236 Call Stack: 0.0010 258104 1. {main}() /inet/xxx/HTTP/devel/21pdf.php:0 0.1375 8979304 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8979656 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8980096 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1375 8980432 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1569 9542416 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119 0.2014 9683184 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436 Warning: Illegal string offset 'width' in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1257 Call Stack: 0.0010 258104 1. {main}() /inet/xxx/HTTP/devel/21pdf.php:0 0.1375 8979304 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8979656 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8980096 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1375 8980432 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1569 9542416 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119 0.2014 9683184 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436 Warning: Invalid argument supplied for foreach() in /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php on line 1315 Call Stack: 0.0010 258104 1. {main}() /inet/xxx/HTTP/devel/21pdf.php:0 0.1375 8979304 2. PHPExcel_Writer_PDF->save() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8979656 3. PHPExcel_Writer_PDF->__call() /inet/xxx/HTTP/devel/21pdf.php:80 0.1375 8980096 4. call_user_func_array() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1375 8980432 5. PHPExcel_Writer_PDF_tcPDF->save() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF.php:87 0.1569 9542416 6. PHPExcel_Writer_HTML->generateSheetData() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/PDF/tcPDF.php:119 0.2014 9683184 7. PHPExcel_Writer_HTML->_generateRow() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:436 0.2019 9685336 8. PHPExcel_Writer_HTML->_assembleCSS() /inet/xxx/HTTP/devel/app/_includes/PHPExcel_1.7/PHPExcel/Writer/HTML.php:1267 21:55:53 File written to 21pdf_tcPDF.pdf
Call time to write Workbook was 0.9275 seconds
21:55:53 Current memory usage: 16 MB
21:55:53 Peak memory usage: 18 MB
21:55:53 Done writing files
File has been created in /inet/xxx/HTTP/devel
Интересная заметка: возьмите взгляд на другом выходе TCPDF и MPDF. Думаю, теперь я знаю, почему вы оставите выбор генератора PDF открытым для пользователя.
Вы говорите, что "не может" .... просьба уточнить, что именно вы имеете в виду «fail» ... Если вы получаете сообщения об ошибках, тогда полезно знать, что на самом деле говорят эти сообщения об ошибках! –
Как разработчик библиотеки, о которой идет речь, вы предполагаете, что она даже не может генерировать файл xls ... быть уверенным, что это возможно; и он также может создавать файлы PDF с объединенными ячейками; но мне нужно немного больше информации (например, сообщения об ошибках), чтобы попытаться диагностировать, что происходит не так –
Привет, Марк Бейкер, я только что прочитал свой пост, что я написал немного в спешке, и я боюсь сказать, что это не хватает определенного тона уважения к работе, содержащейся в этом проекте, и ко всему, что вы делали для сообщества. Я прошу прощения за это, и я счастлив, что вы все же ответили мне. Между тем я поместил запрошенную информацию. – spikey