2016-06-01 5 views
2

Я пытаюсь установить phpwkhtmltopdf на общий сервер (webhotel). На сервере уже установлен композитор, и у меня SSH на сервере. Но я не слишком хорошо знакомы с композитором, так что я мог бы делать очень простой коснуться здесь не так ..Как установить phpwkhtmltopdf

Итак, я скачал файл зип из: https://github.com/mikehaertl/phpwkhtmltopdf и распакованы файлы на этом сервере в папку с именем, как phpwkhtmltopdf , Затем, открывая SSH cd-ing для этого каталога и работающего композитора, требуется mikehaertl/phpwkhtmltopdf, но я получаю только вопросительные знаки до начала строки. Для вопросительных знаков я читал, что это может быть проблема обнаружения unicode, поэтому я поместил его в htaccess: php_flag detect_unicode Off, и кажется, что он отключен сейчас локально.

Но все еще есть вопросительные знаки, и php wkhtmltopdf не устанавливается. Как его установить?

ответ

2

Проблема заключается в том, что вы выборки пакету mikehaertl/phpwkhtmltopdf два раза:

  • во-первых, вы скачали молнию и экстрагируют его (ручная установка).
  • После этого вы запустили Composer для его выполнения (установка через Composer).

Пожалуйста, решите, как вы хотите установить пакет!


Если вы хотите установить пакет с композитором, вам просто нужно запустить composer require mikehaertl/phpwkhtmltopdf в чистую папку проекта.

Композитор затем доставит пакет и поместит его в папку /vendor.

Вот и все.


Теперь для того, чтобы использовать его вам нужны две вещи:

  1. нужно включить Композитор автозагрузчик во время начальной загрузки вашего проекта. Это позволяет автозагрузчику загружать библиотеку при доступе к одному из классов пакета/библиотеки.

    // Register Composer Autoloader 
    
    define('VENDOR_DIR', __DIR__ . '\vendor' . DS); 
    
    if (!is_file(VENDOR_DIR . 'autoload.php')) { 
        throw new \RuntimeException(
         '[Error] Bootstrap: Could not find "vendor/autoload.php".' . PHP_EOL . 
         'Did you forget to run "composer install --dev"?' . PHP_EOL 
        ); 
    } 
    
    require VENDOR_DIR . 'autoload.php'; 
    
  2. Ну, наконец-то, что вам нужно закодировать что-то с помощью библиотеки:

    use mikehaertl\wkhtmlto\Pdf; 
    
    $pdf = new Pdf('/path/to/page.html'); 
    
    if (!$pdf->saveAs('/path/to/page.pdf')) { 
        echo $pdf->getError(); 
    } 
    

Эмм, и вам потребуется wkhtmltopdf бинарный ... но я думаю, это еще не проблема.


Это мои шаги:

  1. Я скачал wkhtmltopdf http://download.gna.org/wkhtmltopdf/0.12/0.12.3.2/wkhtmltox-0.12.3.2_msvc2013-win64.exe
  2. и установили его в c:\program files\wkhtmltopdf
  3. теперь программа находится в c:\program files\wkhtmltopdf\bin

  4. я создал папку pdf-test

  5. я выполнил команду composer require mikehaertl/phpwkhtmltopdf на CLI
  6. я создал файл makepdf.php со следующим содержанием:

    /** 
    * Register Composer Autloader 
    */ 
    define('VENDOR_DIR', __DIR__ . '\vendor' . DIRECTORY_SEPARATOR); 
    
    if (!is_file(VENDOR_DIR . 'autoload.php')) { 
        throw new \RuntimeException(
         '[Error] Bootstrap: Could not find "vendor/autoload.php".' . PHP_EOL . 
         'Did you forget to run "composer install --dev"?' . PHP_EOL 
        ); 
    } 
    
    require VENDOR_DIR . 'autoload.php'; 
    
    /** 
    * Use library 
    */ 
    
    use mikehaertl\wkhtmlto\Pdf; 
    
    
    $pdf = new Pdf(array(
        'binary' => 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe', 
        'ignoreWarnings' => true, 
        'commandOptions' => array(
         'procEnv' => array(
          // Check the output of 'locale' on your system to find supported languages 
          'LANG' => 'en_US.utf-8', 
         ), 
         'escapeArgs' => false, 
         'procOptions' => array(
          // This will bypass the cmd.exe which seems to be recommended on Windows 
          'bypass_shell' => true, 
          // Also worth a try if you get unexplainable errors 
          'suppress_errors' => true, 
         ), 
        ), 
    )); 
    
    $pdf->addPage('<html> 
    <head> 
    </head> 
    <body> 
    
        <div id="print-area"> 
         <div id="header"> 
          This is an example header. 
         </div> 
         <div id="content"> 
          <h1>Demo</h1> 
          <p>This is example content</p> 
         </div> 
         <div id="footer"> 
          This is an example footer. 
         </div> 
        </div> 
    
    </body> 
    </html>'); 
    
    if (!$pdf->saveAs('page.pdf')) { 
        echo $pdf->getError(); 
    } 
    
  7. тогда я побежал php makepdf.php

  8. наконец, файл page.pdf был создан

И это все ... :)

+0

Спасибо, Дженс уже, но осталось немного проблем: Я бы предпочел установку через Composer, как это предлагается, и затем был запущен, чтобы композитор требовал mikehaertl/phpwkhtmltopdf в папке emtpy. Но снова возвращаем только вопросительные знаки к началу следующей строки. Затем я попробовал также ручную версию, в том числе 3 файла в директории Src, в тестовый файл (имеющий аналогичный контент для вашего шага 2.), но только что получил следующую ошибку: PHP Fatal error: Class 'mikehaertl \ shellcommand \ Command' not найденный в /home/testdomain/public_html/Command.php в строке 17. Таким образом, я думаю, что некоторые файлы отсутствуют – Seppo

+0

Хорошо, я попытался воспроизвести его, но не смог. Я обновил свой ответ и включил все шаги, которые я выполнил, чтобы получить 'page.pdf'. Пожалуйста, дайте мне знать, если это также сработает для вас. –

+0

Еще раз спасибо, но я до сих пор не получил его на работу: причина в том, что я не могу заставить композитора собрать необходимые ресурсы - все, что я получаю, это вопросительные знаки при выполнении этой команды. Кроме того, я запускаю его в среде Linux, поскольку я пытаюсь создать одно и то же для совместного использования веб-сервера. Для тестирования я также попытался вручную извлечь Linux-версии exe на сервер и запустить тот же код (с изменениями в пути к exe соответственно), но, похоже, он нуждается в большем, чем я, из ручной установки. – Seppo