symfony 退出状态代码“1”表示出错[knp snappy]

vdgimpew  于 2022-11-16  发布在  其他
关注(0)|答案(5)|浏览(187)

我正在使用knp snappy包从我的应用程序生成报告。但不工作,当我调用我的控制器生成pdf抛出下一个错误:

The exit status code '1' says something went wrong:
stderr: "Loading pages (1/6)
[> ] 0%
[======> ] 10%
[=======> ] 12%
Warning: Failed to load file:///gestionresiduospel/web/bundles/usuario/css/bootstrap.css (ignore)
Warning: Failed to load file:///gestionresiduospel/web/bundles/usuario/js/bootstrap.js (ignore)
[============================================================] 100%
Counting pages (2/6)
[============================================================] Object 1 of 1
Resolving links (4/6)
[============================================================] Object 1 of 1
Loading headers and footers (5/6)
Printing pages (6/6)
[> ] Preparing
[============================================================] Page 1 of 1
Done
Exit with code 1 due to network error: ContentNotFoundError
"
stdout: ""
command: "C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" --lowquality "C:\Users\rodrigo\AppData\Local\Temp\knp_snappy5682878973ade7.09664058.html" "C:\Users\rodrigo\AppData\Local\Temp\knp_snappy56828789746968.46649162.pdf".

我的控制器是这样的:

public function historicosDetallePdfAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        //gets residuos peligrosos.
        $solicitudRetiro= $em->getRepository('SolicitudRetiroBundle:SolicitudRetiro')->find($id);
        //gets residuos no peligrosos
        $residuosPRetirados = $em->getRepository('SolicitudRetiroBundle:RetiroResiduo')->findResiduos($id);
        //retorna los residuos no peligrosos en la solicitud
        $residuosNPRetirados = $em->getRepository('SolicitudRetiroBundle:RetiroResiduoNoPeligroso')->findResiduosNoPeligrosos($id);
        // view generator
        $html = $this->renderView('SolicitudRetiroBundle:Pdf:resumenSolicitudResiduoRetirado.html.twig', array(
            'solicitudRetiro' => $solicitudRetiro,  
            'residuosRetirados' => $residuosPRetirados,
            'residuosNoPel' => $residuosNPRetirados ));
        // pdf generator
        return new Response(
            $this->get('knp_snappy.pdf')->getOutputFromHtml($html), 
            200,
            array(
                'Content-Type' => 'application/pdf',
                'Content-Disposition' => 'attachment; filename="historico.pdf"'
                )
            );
    }

我复制了我的网址,并运行到控制台[CMD]与wkhtmltopdf.exe。在控制台我的pdf文件被创建,但当我看到的文件只显示我的登录屏幕。所以我认为可能是一个问题的权限进入我的控制器,但我不知道我如何通过这一点。
在另一方面,如果你知道另一个pdf生成器(从html),工作到symfony这可能是帮助我太多。
我在symfony2.7下工作

qkf9rpyu

qkf9rpyu1#

这意味着您的HTML文件中的一个资源不能被wkhtmltopdf加载,如果您的所有资源都有这样的绝对URL,请检查您的HTML文件:http://www.yourserver.com/images/myimage.jpg
如果不是这种情况,请尝试进行设置:

{{ app.request.schemeAndHttpHost ~ 'resource relative url' }}

如果您正在加载{% stylesheets %}{% javascript %}{% image %}中具有assetic的资产,您还可以执行以下操作

{{ app.request.schemeAndHttpHost ~ asset_url }}
oknwwptz

oknwwptz2#

我曾经遇到过两种问题:
第一个是因为kpn snappy在尝试转换 *.js文件时失败了。所以我不得不在我的情况下使用 *.js文件。
第二个问题是路径的问题。我必须使用绝对文件系统路径。我的意思是,类似于:/home/ubuntu/workspace/bootstrap/css/bootstrap.css这是用在href标签中使用的 *html.twig文件,然后由snappy转换为pdf。
通过这样做,我使用了一些twig全局变量。

twig:
    form:
        resources:
            - 'MyBundle:Form:fields.html.twig'
            - 'MyUploaderBundle:Form:fields.html.twig'
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    globals:
        pathToWeb: "%kernel.root_dir%/../web"
        bootstrapCss: "/home/ubuntu/workspace/MyApp/web/bootstrap/css/bootstrap.css"
        mainCss: "/home/ubuntu/workspace/MyApp/web/css/main.css"
        layoutCss: "/home/ubuntu/workspace/MyApp/web/css/layout.css"

在树枝上

<link rel="stylesheet" type="text/css" href="{{ bootstrapCss }}">
<link rel="stylesheet" type="text/css" href="{{ layoutCss }}">
<link rel="stylesheet" type="text/css" href="{{ mainCss }}">
mhd8tkvw

mhd8tkvw3#

可以使用absolute_url()分支函数{{ absolute_url(asset('assets/image.jpg')) }}

yuvru6vn

yuvru6vn4#

对我来说,这是工作,错误来自html

<!doctype html>
  <html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    {% for path in encore_entry_css_files('app') %}
        <link rel="stylesheet" href="{{ absolute_url(path) }}">
    {% endfor %}
</head>
scyqe7ek

scyqe7ek5#

这个问题永远不会变老,我刚刚遇到了这个问题,我设法解决了它,这里是如何。
这个问题大多发生在Windows中,所以这个解决方案是针对这个问题的。

1.安装此编写器依赖项wemersonjanuario/wkhtmltopdf-windows
composer require wemersonjanuario/wkhtmltopdf-windows "0.12.2.3"

2.打开您的config/snappy.php并使用此配置。

<?php

return [
    'pdf' => [
        'enabled' => true,
        'binary'  => base_path('vendor\wemersonjanuario\wkhtmltopdf-windows\bin\64bit\wkhtmltopdf'),
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],

    'image' => [
        'enabled' => true,
        'binary'  => base_path('vendor\wemersonjanuario\wkhtmltoimage-windows\bin\64bit\wkhtmltoimage'),
        'timeout' => false,
        'options' => [
            'enable-local-file-access' => true,
            'keep-relative-links' => true,
        ],
        'env'     => [],
    ],
];
3.确保您为pdf加载的刀片文件不包含外部链接,如下所示。
<head>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400;1,600;1,700&display=swap" rel="stylesheet">
</head>
4.确保使用public_path()加载资源
<link href="{{ public_path('css/pdf.css') }}" rel="stylesheet">

<img src="{{ public_path('fancy-image.png') }}">

相关问题