Класс для конвертации 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
        ]
    ];

Обратная связь

Напишите мне задачу для улучшения, ошибки или другие мысли.

4 комментария

  • Артем2016, 19 апреля @ 00:30 Ответить

    Антон здравствуйте.

    К сожалению не получилось запустить ваш класс.

    Не хватает подробной документации (для чайников).

    У меня 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';

    подключается без ошибок

    Помогите, пожалуйста. Отблагодарю.

    _________________________

    С уважением, Артем

    • tonchik™2016, 10 августа @ 14:20 Ответить

      Приветствую!

      Я так понимаю, что у Вас PHP ниже нужной версии. А именно — ниже 5.4.

  • Дмитрий2016, 9 августа @ 04:49 Ответить

    Кака ты, Антошка.

    Ты почему версию php не указал с которой работает твоя шляпа.

    Так нельзя делать.

    А за скрипт спасибо!

    • tonchik™2016, 9 августа @ 10:10 Ответить

      Да, как-то пропустил этот момент. в composer.json прописал, конечно, а тут не учел. Спасибо за коммент)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *