2016-09-20 96 views
-1

我创建一个应用程序联合国Symfony2.7,我想开始创建报告,我已经阅读了几天,找不到解决方案。 我试过ps pdfbundle,但我不能生成报告。无法找到更多的文档。 请帮助如何在Symfony2中创建报告?

我的代码:

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> 
+0

在什么格式的生成报告请详细说明。您是否希望应用日期范围过滤器,并仅使用表示明列或危险范围的数据以及使用不同类型图表的数据和图形表示来生成报告。如果您想以任何图片表示形式呈现报告,请使用[Flot Js](http://www.flotcharts.org/),[D3 Js](https://d3js.org/)等开放源代码库。 ,[Chartist Js](https://gionkunz.github.io/chartist-js/) –

回答

1

也许看KnpSnappyBundle,让你可以生成从许多来源的PDF文件,包括树枝模板:http://knpbundles.com/KnpLabs/KnpSnappyBundle

+0

该捆绑包运行良好。有时需要花时间来配置所需的服务器二进制文件,但值得。 – Carlos

1

您至少有两种方案可供选择。我发现最容易的工作:

  1. 从HTML内容,但在你的遥控器提及西里尔Hejl

    • PDF的创造者,你必须做创建的所有工作Github KnpLabs/snappy:从树枝模板
      • 头HTML
      • 页脚HTML代码树枝模板
      • 从树枝模板
      • 封面HTML
      • 从树枝模板
      • TOC XML
      • 从树枝模板
      • 基础文件的HTML将所有提到的html格式的文档反对$ PDF = $这个 - >获取( 'knp_snappy.pdf') ;
      • 优点:
        • 容易枝条HTML工作
        • 没有记忆排气如果有关系的实体对象提供给嫩枝(在更长的文档)
      • 缺点:
        • 有为每个加入的页面(封面,toc,页眉,页脚,基本文档)提供来自Twig模板的html文件
        • 需要修改正确的wkhtm ltopdf二进制版本
  2. Github mbence/OpenTBSBundle

    • 这是模板合并。在您的报告控制器中,您将不得不提供办公室模板和所有变量,这些变量在例如TBS中被替换为TBS。Word模板:
      • 它支持OpenOffice和的MSOffice模板
      • 优点:
        • 客户供应模板,您只需更换与变量的动态内容(客户需要的文档设计的护理)
      • 缺点:
        • 它可以运行到内存排气问题,因为PHP脚本保存所有输入变量或数组 在记忆中。
        • 更难理解比嫩枝HTML(更长的学习曲线)