如何在Symfony2中创建报告?

时间:2016-09-20 20:47:44

标签: symfony

我正在创建一个非Symfony2.7的应用程序,我想开始创建报告,我已经阅读了几天而无法找到解决方案。 我试过ps pdfbundle,但我无法生成报告。无法找到更多文档。 请帮忙

我的代码:

    public function formatoOcAction($id)

{
    $facade = $this->get('ps_pdf.facade');

    $response = new Response();

    $em = $this->getDoctrine()->getManager();

    $InOc = $em->getRepository('NivalInventarioBundle:InOrdenCompra')->findById($id);

    $InOcDet = $em->getRepository('NivalInventarioBundle:InOrdenCompraDetalle')->findBy(array(
        'idOrdenCompra' => $id));

    $stylesheetXml = $this->renderView('NivalInventarioBundle:InOrdenCompra:ordencompra.xml.twig', array());


    $this->render('NivalInventarioBundle:InOrdenCompra:ordencompra.pdf.twig', array(
        "entities1" => $InOc,
        "entities2" => $InOcDet,
        "id" => $id),
        $response);

    $xml = $response->getContent();

    $content = $facade->render($xml, $stylesheetXml);

    $filename = $this->getParameter('upload_directory').'orden_compra_'.$id.'.pdf';

    file_put_contents($filename, $content);

    return new Response($content, 200, array('content-type' => 'application/pdf'));
}

其中$ id是采购订单的ID。

这会将xml文件呈现为PDF但不包含sylesheet。

这是树枝:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf SYSTEM "%resources%/dtd/doctype.dtd">
{% set empresa = app.session.get('empresa') %}

<pdf>
    <page>
<div>
    <div>
        <table>
            <tr>
                <td>
                    <h3>{{ empresa }}</h3>
                </td>
                <td id="s1">
                    <h2>Número: <b>{{ id }}</b></h2>
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <h3>Orden de compra</h3>
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    Departamento de Finanzas
                </td>
            </tr>
        </table>
    </div>
    <div>
        {% for entity1 in entities1 %}
            Fecha: {{ entity1.fecha|date('d-m-Y') }}
        {% endfor %}
    </div>
</div>
        <div>
            <div>
                <table width="100%">
                    <tr>
                        <td width="60%">Producto</td>
                        <td width="20%">Unidad</td>
                        <td>Cantidad</td>
                        <td>Precio</td>
                        <td>Total</td>
                    </tr>
                        {% set gran_total = 0 %}
                    {% for entity2 in entities2 %}
                        <tr>
                            <td>{{ entity2.productoOc.nombre }}</td>
                            <td>{{ entity2.productoOc.unidadMedida.nombre }}</td>
                            <td class="text-right">{{ entity2.cantidad }}</td>
                            <td class="text-right">{{ entity2.precioCompra }}</td>
                            <td class="text-right">{{ entity2.total }}</td>
                        </tr>
                        {% set gran_total = gran_total + entity2.total %}
                    {% endfor %}
                    <tr>
                        <td></td><td></td><td></td><td></td>
                        <td class="text-right" >{{ gran_total|number_format(2) }}</td>
                    </tr>
                </table>
            </div>
        </div>

    </page>
</pdf>

3 个答案:

答案 0 :(得分:1)

也许看看KnpSnappyBundle,它允许您从许多来源生成PDF文件,包括树枝模板:http://knpbundles.com/KnpLabs/KnpSnappyBundle

答案 1 :(得分:1)

您至少有两个选项可供选择。我发现最容易使用:

    Cyrille Hejl

    提到的
  1. Github KnpLabs/snappy

    • 来自html内容的PDF创建者,但在您的报告控制器中,您必须完成以下所有创建工作:
      • 来自twig模板的标题html
      • 来自twig模板的
      • footer html
      • 封面页面html from twig template
      • 来自twig模板的XML
      • 来自twig模板的基础文档html
      • 将所有提及的html文档添加到对象$ pdf = $ this-&gt; get('knp_snappy.pdf');
      • 优点:
        • 易于使用Twig html
        • 如果将具有关系的实体对象提供给Twig(在较长文档上),则没有内存耗尽
      • CONS:
        • 必须为Twig模板提供每个连接页面的html文件(封面,toc,页眉,页脚,基础文档)
        • 需要修改正确的wkhtmltopdf二进制版本
  2. Github mbence/OpenTBSBundle

    • 这是模板合并。在您的报告控制器中,您必须提供办公室模板和所有变量,这些变量将替换为TBS,例如:单词模板:
      • 它支持OpenOffice和MSOffice模板
      • 优点:
        • 客户供应模板,您只需用变量替换动态内容(客户负责文档设计)
      • CONS:
        • 它可能会导致内存耗尽问题,因为PHP脚本将所有输入变量或数组保存在内存中。
        • 比Twig html(更长的学习曲线)更难理解

答案 2 :(得分:0)

我建议使用:WhiteOctoberTCPDFBundle,它是一个捆绑包,可用于在Symfony2应用程序中方便地使用TCPDF生成PDF,非常适合制作我们需要的报告。请转到:https://github.com/whiteoctober/WhiteOctoberTCPDFBundle