1

当我去/fileDownload我收到 500 内部服务器错误 - RuntimeException:

进程因“0”信号而停止。

控制器动作:

public function fileAction()
{
    $html = $this->render('MyBundle:Downloads:file.html.twig', array(
    'fileNumber'  => '1234'
    ));

    return new Response(
        $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="file.pdf"'
        )
    );
}

我已经为 WKHTMLTOPDF 使用了终端命令,它已经成功生成了 PDF。它只是在 Symfony2 应用程序中不起作用。

在我的 config.yml 中:

knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltopdf
        options:    []
4

5 回答 5

0

我假设 Symfony 在某个阶段发出了 exec() 。您需要获得返回的确切命令行错误。它在终端会话中为您工作的事实并不一定意味着当不同的用户/进程正在运行它时它会工作。

检查 wkhtmltopdf 上的权限,确保 apache 或运行您的 Web 服务器的任何人都有权运行该命令。

另外,请查看 wkhtmltopdf: cannot connect to X server以及此处的第一篇文章:http: //geekisland.org/index.php ?m=05&y=11&entry=entry110518-114630

X Server 需要运行 wkhtmltopdf 的某些构建,并且在通过 cron 或从 apache 进程中运行时不存在。如果是这种情况,您需要使用上面第一个链接中的 bash 包装器。

于 2012-10-29T18:19:00.463 回答
0

确保 wkhtmltopdf 确实在您指定的文件夹中,并具有正确的权限:/usr/local/bin/wkhtmltopdf

我成功地将 KNP Snappy Bundle 与 Symfony 2.0 一起使用,在生成 html 时尝试使用 RenderView 而不是渲染(检查我的代码是否有效):

控制器:

$html = $this->renderView('YOPYourOwnPoetBundle:thePoet:poemPDF.html.twig', array(
                'poem'  => $customizedPoem,
                'fontType' => $fontType,
                'fontSize' => $formData['fontSize'],
                'fontWeight' => $fontWeight,
                'fontStyle' => $fontStyle,
            ));
return new Response(
                $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
                200,
                array(
                    'Content-Type'          => 'application/pdf',
                    'Content-Disposition'   => 'attachment; filename="'.$session->get('poemTitle').'.pdf"',
                )
            );
于 2012-10-30T03:35:48.640 回答
0

我有同样的问题,我终于解决了,我的建议是如果你wkhtmltopdf从你的操作系统 repos 安装 lib 然后删除它,然后从谷歌代码网站下载静态版本,不要使用版本 11rc,使用版本 9静态库,它是与我一起工作的库。

http://code.google.com/p/wkhtmltopdf/downloads/list

于 2013-06-02T16:55:31.503 回答
0

看起来 selinux 阻止了你的命令,我曾经遇到过同样的问题,但我通过禁用 SELinux 解决了它,现在我可以使用 wkhtmltopdf+php 生成 pdf 文件。

exec("/usr/local/bin/wkhtmltopdf http://www.google.com /var/www/html/google.pdf");

要禁用 selinux run setenforce 0,请再试一次,看看它是否有效。重新启用它setenforce 1

但是禁用 selinux 并不是最好的解决方案,您需要使用 audit2allow 对其进行扩展,它会自动创建一个自定义策略模块来解决此问题,如果尚未安装,请先安装 audit2allo

yum -y install policycoreutils-python
grep httpd_t /var/log/audit/audit.log | audit2allow -m httpdlocal > httpd.te
checkmodule -M -m -o httpdlocal.mod httpd.te
semodule_package -o httpdlocal.pp -m httpdlocal.mod
semodule -i httpdlocal.pp

再试一次,看看它是否有效

于 2014-08-10T13:43:50.647 回答
0

我在使用 wkhtmltopdf 的相同场景中遇到了同样的问题。我摆脱了以下命令:

setsebool httpd_execmem on

于 2015-01-12T12:13:25.740 回答