Здравствуйте! Есть шаблон xls файла, который я открываю через PHPExcel, произвожу редактирование и сохраняю. Но проблема вот в чем. Вычитал, что из PHPExcel можно сохранять прямо в PDF. Пробовал через mpdf (Уже было установлено на сервере). И затем установил DOMpdf. Для конвертации использую как указано в документации:
$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
//$rendererLibrary = 'domPDF0.6.0beta3';
$rendererLibrary = 'DomPDF.php';
$rendererLibraryPath = dirname(__FILE__). '../Classes/PHPExcel/Writer/PDF/' . $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'
);
}
Затем пытаюсь сохранить:
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="01simple.pdf"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');
Долгое время вообще функция PHPExcel_Settings::setPdfRenderer не отрабатывала, но теперь дает сохранить PDF файл, но при открытии пишет, что файл поврежден. Что я делаю не так и как исправить данную ошибку? Или есть какие-либо аналогичные решения для сохранения xls в pdf?
Прикладываю код файла, который изменяю, на основе примера библиотеки:
<?php
/**
* PHPExcel
*
* Copyright (C) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/** 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 dirname(__FILE__) . '/../Classes/PHPExcel.php';
// Change these values to select the Rendering library that you wish to use
// and its directory location on your server
//$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
//$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
//$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
//$rendererLibrary = 'tcPDF5.9';
//$rendererLibrary = 'mPDF5.4';
//$rendererLibrary = 'domPDF0.6.0beta3';
//$rendererLibraryPath = '../Classes/PHPExcel/Writer/PDF/DomPDF.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
//$rendererLibrary = 'domPDF0.6.0beta3';
//$rendererLibrary = 'DomPDF.php';
$rendererLibrary = 'Dompdf.php';
$rendererLibraryPath = '../dompdf/src/' . $rendererLibrary;
// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("PDF Test Document")
->setSubject("PDF Test Document")
->setDescription("Test document for PDF, generated using PHP classes.")
->setKeywords("pdf php")
->setCategory("Test result file");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A4', 'Miscellaneous glyphs')
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
// 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);
//$objPHPExcel->setSheetIndex(0);
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'
);
}
// Redirect output to a client’s web browser (PDF)
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="01simple.pdf"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->setSheetIndex(0);
$objWriter->save('php://output');
exit;
Upd: Если изменить вывод на сохранение файла и написать:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('TORG.pdf');
Соответственно убрав все "header", Тогда при этом выдает ошибку:
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Unable to load PDF Rendering library' in /var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/Writer/PDF/mPDF.php on line 34 PHPExcel_Writer_Exception: Unable to load PDF Rendering library in /var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/Writer/PDF/mPDF.php on line 34 Call Stack: 0.0009 301144 1. {main}() /var/www/php/c_invoice/new_invoice.php:0 0.3588 6395720 2. PHPExcel_IOFactory::createWriter() /var/www/php/c_invoice/new_invoice.php:203 0.3590 6407192 3. PHPExcel_Writer_PDF->__construct() /var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/IOFactory.php:141 0.3590 6408224 4. PHPExcel_Autoloader::Load() /var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/IOFactory.php:0 0.3593 6439208 5. require('/var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/Writer/PDF/mPDF.php') /var/www/PHPExcel_1.8.0_doc/Classes/PHPExcel/Autoloader.php:82
Спасибо за все ответы на мой вопрос! Проблема была решена, все было намного проще. Необходимо было использовать версии, которые указаны в PHPexcel. А ошибки были из-за того, что PHPexcel не мог найти необходимые файлы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Выпадает ошибка(ошибка: C2550: MainWindow::MyClient: список инициализации конструктора должен использоваться только в месте определения конструктора)...