如何安装phpwkhtmltopdf

如何安装phpwkhtmltopdf,php,composer-php,wkhtmltopdf,Php,Composer Php,Wkhtmltopdf,我正在尝试在共享服务器(webhotel)上安装phpwkhtmltopf。服务器已经安装了composer,并且我已经使用SSH连接到服务器。但我对这位作曲家不太熟悉,所以我可能在这里犯了一些非常基本的错误 因此,我从以下位置下载了zip文件: 并将其上的文件解压缩到服务器上名为phpwkhtmltopdf的目录。 然后,打开指向该目录的SSH cd并运行composer需要mikehaertl/phpwkhtmltopdf,但我只得到了行开头的问号。 关于问号,我读到这可能是检测unicod

我正在尝试在共享服务器(webhotel)上安装phpwkhtmltopf。服务器已经安装了composer,并且我已经使用SSH连接到服务器。但我对这位作曲家不太熟悉,所以我可能在这里犯了一些非常基本的错误

因此,我从以下位置下载了zip文件: 并将其上的文件解压缩到服务器上名为phpwkhtmltopdf的目录。 然后,打开指向该目录的SSH cd并运行composer需要mikehaertl/phpwkhtmltopdf,但我只得到了行开头的问号。 关于问号,我读到这可能是检测unicode的问题,所以我将htaccess:php\u flag detect\u unicode设置为Off,现在似乎在本地关闭了


但是仍然存在疑问,php wkhtmltopdf没有安装。如何安装该软件包?

问题是您要获取该软件包
mikehaertl/phpwkhtmltpdf
两次:

  • 首先,您获取了zip并将其解压缩(手动安装)
  • 然后,您运行Composer来请求它(通过Composer安装)
请决定如何安装该软件包


当您想使用Composer安装软件包时,只需在干净的项目文件夹中运行
Composer require mikehaertl/phpwkhtmltopdf

然后Composer将提取包并将其放入
/vendor
文件夹中

就这样


现在,为了使用它,您需要两件事:

  • 在项目的引导过程中,您需要包括Composer Autoloader。这样,当您访问一个包/库类时,自动加载程序将加载库

    // 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';
    
  • 最后,您需要使用库编写一些代码:

    use mikehaertl\wkhtmlto\Pdf;
    
    $pdf = new Pdf('/path/to/page.html');
    
    if (!$pdf->saveAs('/path/to/page.pdf')) {
        echo $pdf->getError();
    }
    
  • 嗯,你需要wkhtmltopdf二进制文件。。。但我想这不是问题所在


    以下是我的步骤:

  • 我下载了wkhtmltopdf
  • 并将其安装到
    c:\program files\wkhtmltopdf
  • 现在可执行文件位于
    c:\ProgramFiles\wkhtmltopfd\bin

  • 我创建了文件夹
    pdf test

  • 我在CLI上运行了命令
    composer require mikehaertl/phpwkhtmltopdf
  • 我创建了一个包含以下内容的文件
    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();
    }
    
    /**
    *寄存器生成器自动加载程序
    */
    定义('VENDOR\u DIR','VENDOR\u DIR.'\VENDOR'.DIRECTORY\u分隔符);
    如果(!is_文件(VENDOR_DIR.'autoload.php')){
    抛出新的\RuntimeException(
    “[错误]引导:找不到“vendor/autoload.php”。.php\u EOL。
    '您是否忘记运行“composer安装--dev”?'
    );
    }
    需要供应商_DIR。”autoload.php';
    /**
    *使用图书馆
    */
    使用mikehaertl\wkhtmlto\Pdf;
    $pdf=新pdf(数组)(
    'binary'=>'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe',
    “ignoreWarnings”=>true,
    “commandOptions”=>数组(
    'procev'=>数组(
    //检查系统上“locale”的输出以查找支持的语言
    “LANG”=>“en_US.utf-8”,
    ),
    “逃避责任”=>错误,
    “procOptions”=>数组(
    //这将绕过Windows上建议使用的cmd.exe
    “绕过外壳”=>true,
    //如果出现无法解释的错误,也值得一试
    “抑制错误”=>true,
    ),
    ),
    ));
    $pdf->addPage($pdf)
    这是一个示例标题。
    演示
    这是示例内容

    这是一个示例页脚。 '); 如果(!$pdf->saveAs('page.pdf')){ echo$pdf->getError(); }
  • 然后我运行了
    php makepdf.php

  • 最后,生成了文件
    page.pdf

  • 就这样……:)

    已经感谢Jens了,但是仍然没有什么问题:我更喜欢通过Composer进行安装,因为它是建议的方法,然后运行Composer require mikehaertl/phpwkhtmltopf在emtpy文件夹中。但在下一行开始时,再次得到的只是问号。然后,我也尝试了手动版本,包括Src dir中的3个文件到我的测试文件(与步骤2的内容类似),但只得到了以下错误:PHP致命错误:在第17行的/home/testdomain/public_html/Command.PHP中找不到类'mikehaertl\shellcommand\Command'。因此,我认为它缺少一些文件OK,我试图复制它,但失败了。我已经更新了我的答案,并包括了生成
    page.pdf
    所执行的所有步骤。请让我知道这是否也适用于您。再次感谢,但我仍然没有让它工作:原因似乎是我无法让composer收集所需的资源-我得到的只是运行该命令时的问号。另外,我在Linux环境下运行它,因为我试图构建相同的东西来共享Web服务器。为了测试,我还尝试了jut手动将linux版本的exe提取到服务器上,并运行相同的代码(相应地修改了exe的路径),但它似乎需要比手动安装更多的东西。似乎我们必须首先解决编写器问题。请在CLI上运行
    composer selfupdate
    ,然后运行
    composer diagnose
    diagnose
    命令将对您的环境运行一些检查,以确保Composer正常工作。也许这说明了作曲家问题的原因(问号)。谢谢Jens的帮助!我最终得到了if(由于某种原因,还没有定义部分,但我现在用require'vendor/autoload.php'替换了它)。它不工作的原因是服务器对composer的某些设置不正确(detect_unicode不影响)。事实上,我也不得不更换服务器,但无论如何,现在它可以工作了。:)