Класс для конвертации pdf в html
Этот PHP пакет конвертирует pdf файлы в html с помощью poppler-utils.
Исходный код: https://github.com/tonchik-tm/pdf-to-html
Благодарности
Большое спасибо Mochamad Gufron (mgufrone)! Я создавал свой пакет на основе его пакета (https://github.com/mgufrone/pdf-to-html).
Примечания
Инструкцию по использованию смотрите ниже.
Установка
Для добавления пакета в Ваше приложение выполните команду из каталога с файлом composer.json
composer require tonchik-tm/pdf-to-html:~1
Или добавьте вручную в composer.json
{
"tonchik-tm/pdf-to-html":"~1"
}
Требования
0. Версия PHP >=5.4.0
1. Установить Poppler-Utils
Debian/Ubuntu
sudo apt-get install poppler-utils
Mac OS X
brew install poppler
Windows
Для тех, кому нужен этот пакет на Windows, сначала скачиваем poppler-utils для windows здесь http://blog.alivate.com.au/poppler-windows/.
После скачивания, распаковываем в удобном месте.
2. Мы должны знать, где находятся утилиты
Debian/Ubuntu
$ whereis pdftohtml pdftohtml: /usr/bin/pdftohtml $ whereis pdfinfo pdfinfo: /usr/bin/pdfinfo
Mac OS X
$ which pdfinfo /usr/local/bin/pdfinfo $ which pdftohtml /usr/local/bin/pdfinfo
Windows
Переходим в распакованную папку. В ней должна быть папка под названием «bin». Нам нужен путь к ней.
3. Конфигурация PHP должна позволять запускать команды из оболочки.
Использование
Пример:
< ?php
// если вы используете composer, подключите через
include 'vendor/autoload.php';
// инициализация
$pdf = new \TonchikTm\PdfToHtml\Pdf('test.pdf', [
'pdftohtml_path' => '/usr/bin/pdftohtml',
'pdfinfo_path' => '/usr/bin/pdfinfo'
]);
// пример для windows
// $pdf = new \TonchikTm\PdfToHtml\Pdf('test.pdf', [
// 'pdftohtml_path' => '/path/to/poppler/bin/pdftohtml.exe',
// 'pdfinfo_path' => '/path/to/poppler/bin/pdfinfo.exe'
// ]);
// получаем инфо о pdf файле
$pdfInfo = $pdf->getInfo();
// получаем количество страниц
$countPages = $pdf->countPages();
// получаем контент одной страницы (1)
$contentFirstPage = $pdf->getHtml()->getPage(1);
// получаем контент всех страниц и пробегаемся по ним
foreach ($pdf->getHtml()->getAllPages() as $page) {
echo $page . "\n";
}
Полный список настроек:
< ?php
$full_settings = [
'pdftohtml_path' => '/usr/bin/pdftohtml', // путь к pdftohtml
'pdfinfo_path' => '/usr/bin/pdfinfo', // путь к pdfinfo
'generate' => [ // настройки для генерации html
'singlePage' => false, // мы хотим отдельные страницы
'imageJpeg' => false, // мы хотим картинки png а не jpg
'ignoreImages' => false, // нам нужны картинки
'zoom' => 1.5, // масштаб pdf
'noFrames' => false, // мы хотим отдельные страницы
],
'clearAfter' => true, // автоматическая очистка каталога вывода
// (если removeOutputDir==false то каталог вывода не останется)
'removeOutputDir' => true, // удалить каталог вывода
'outputDir' => '/tmp/'.uniqid(), // путь к каталогу вывода
'html' => [ // настройки для обработки html
'inlineCss' => true, // заменить css классы на inline css правила
'inlineImages' => true, // найти картинки в html и заменить атрибут src на base64 hash
'onlyContent' => true, // получить только контент внутри body
]
];
Обратная связь
Напишите мне задачу для улучшения, ошибки или другие мысли.
Антон здравствуйте.
К сожалению не получилось запустить ваш класс.
Не хватает подробной документации (для чайников).
У меня Debian 6
Путь к папке: /var/www/admin/data/www/mysite.ru/pdf2html
Что сделал:
Добавил пользователя в sudoers www-data ALL=(ALL) ALL //для тестов
В php.ini disable_functions =
Проверка '/usr/bin/pdftohtml',
'pdfinfo_path' => '/usr/bin/pdfinfo'
]);
Колдовал, колдовал. Пробовал пути разные. Все равно выдает ошибку:
Parse error: syntax error, unexpected '[' in /var/www/admin/data/www/mysite.ru/pdf2html/index.php on line 8 //(на инициализацию выше)
include '/var/www/admin/data/www/mysite.ru/pdf2html/vendor/autoload.php';
подключается без ошибок
Помогите, пожалуйста. Отблагодарю.
_________________________
С уважением, Артем
Приветствую!
Я так понимаю, что у Вас PHP ниже нужной версии. А именно — ниже 5.4.
Кака ты, Антошка.
Ты почему версию php не указал с которой работает твоя шляпа.
Так нельзя делать.
А за скрипт спасибо!
Да, как-то пропустил этот момент. в composer.json прописал, конечно, а тут не учел. Спасибо за коммент)