2016-09-20 65 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(更長的學習曲線)