Dompdf не загружается
Я пытаюсь заставить dompdf работать на внутреннем сервере. С настройками по умолчанию config.inc.php, я получаю следующее при запуске эквивалента демонстрации "Hello Wolrd" script:
Warning: require_once(/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php): failed to open stream: No such file or directory in /var/www/dompdf-master/dompdf_config.inc.php on line 335
Fatal error: require_once(): Failed opening required '/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/dompdf-master/dompdf_config.inc.php on line 335
Когда я выключаю DOMPDF_ENABLE_AUTOLOAD
, я больше не получаю это предупреждение, но код не работает со следующим:
Fatal error: Class 'DOMPDF' not found in /var/www/rfq/test.php on line 115
Ниже приведен код:
require_once("/var/www/dompdf-master/dompdf_config.inc.php");
$dompdf = new DOMPDF(); // this is the line that fails
$dompdf->load_html($quotehtml);
$dompdf->render();
$dompdf->stream("rfq".$_REQUEST['quoteid'].".pdf");
Это Ubuntu 12.04, обновленный по исправлениям, с настройками Apache по умолчанию.
Большое спасибо.
Ответы
Ответ 1
- Перейдите в https://github.com/PhenX/php-font-lib и загрузите библиотеку.
- Создайте каталог
dompdf/lib/php-font-lib/classes/
.
- В zip файле возьмите содержимое папки
src/FontLib/
и вставьте его в свой новый каталог.
Казалось, это сработало для меня.
Ответ 2
Это временная проблема после того, как проект DOMPDF переместился в Github. См. Ответы на этот вопрос.
Самое легкое решение для получения полного пакета - загрузить DOMPDF 0.6 beta 3 из Google Code.
Ответ 3
Мы будем использовать dompdf в codeigniter, но файл, который Iv скачал из GitHub, не имеет всех необходимых нам файлов. Отсутствует все файлы php-font-lib. Поэтому нам пришлось загрузить его и загрузить в соответствующую папку. Таким образом, чтобы dompdf работал в кодеринитре, вам, возможно, придется его загрузить.
См. здесь
http://www.digitalwhores.net/codeigniter/codeigniter-dompdf-master-and-php-font-lib/
Ответ 4
Если вы используете композитор для установки dompdf, вам нужно поместить define("DOMPDF_ENABLE_AUTOLOAD", false);
в dompdf_config.custom.inc.php. Это позволит автору загружать php-font-lib, поскольку он уже установлен. (См. Эту проблему: https://github.com/dompdf/dompdf/issues/636)
Если вы не используете композитор, см. ответ Mikepote.
Ответ 5
Если ошибка не исправлена после выполнения других ответов:
In dompdf_config.inc.php, change line 332 to point to the actual location of your Font.php file.
mine was /php-font-lib/src/FontLib
Здесь нет папки CLASSES.
Ответ 6
У меня была почти такая же проблема. Мой код работал над моей локальной машиной dev - ящиком Windows, но потом не работал на нашем производственном сервере - ящик Linux
Проблема заключалась в том, что каталог "classes" был нижним регистром (\ app\Vendor\dompdf\lib\php-font-lib\classes), в котором не было проблем, но Linux был чувствителен к регистру!
Простое редактирование следующей строки в dompdf_config.inc.php решило проблему:
require_once(DOMPDF_LIB_DIR . "/php-font-lib/Classes/Font.php");
Для согласованности я переименовал каталог с верхним регистром "C" в окне Windows.
Ответ 7
Новая версия dompdf не работает с "установкой композитора" или "обновлением композитора". Для этого нужны специальные версии библиотек шрифтов, которые могут быть не всегда самыми последними версиями, поэтому это может измениться в будущем. Но вы можете найти, как установить его через документацию dompdf. Не знаю, почему авторы не закодировали эти версии шрифтов внутри composer.json, но в любом случае вот как это сделать.
В настоящее время самый простой и удобный способ использования библиотеки - через git (взято из официальных документов)
git clone https://github.com/dompdf/dompdf.git
cd dompdf
git clone https://github.com/PhenX/php-font-lib.git lib/php-font-lib
cd lib/php-font-lib
git checkout 0.4
cd ..
git clone https://github.com/PhenX/php-svg-lib.git php-svg-lib
cd php-svg-lib
git checkout v0.1
Тогда вы можете просто сделать
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream( "/path-to-save-pdf-file/sample.pdf");